def _raw_lock_client(self, client_name): tracing.trace('client_name=%s', client_name) if self.got_client_lock(client_name): raise obnamlib.RepositoryClientLockingFailed( client_name=client_name) client_id = self._get_client_id(client_name) if client_id is None: # pragma: no cover raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) # Create and initialise the client's own directory, if needed. client_dir = self._get_client_dir(client_id) if not self._fs.exists(client_dir): self._fs.mkdir(client_dir) self.hooks.call('repository-toplevel-init', self, client_dir) # Actually lock the directory. self._lockmgr.lock([client_dir]) # Remember that we have the lock. self._open_client(client_name) # Ensure client is open open_client_info = self._open_client_infos[client_name] open_client_info.locked = True
def set_client_encryption_key_id(self, client_name, key_id): self._require_client_list_lock() client_names = self.get_client_names() if client_name not in client_names: raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) self._client_list.set_client_keyid(client_name, key_id)
def rename(self, old_client_name, new_client_name): self._require_lock() client = self.data.get_value(old_client_name, None) if client is None: raise obnamlib.RepositoryClientDoesNotExist( client_name=old_client_name) if self.data.get_value(new_client_name, None) is not None: raise obnamlib.RepositoryClientAlreadyExists( client_name=new_client_name) self.data.set_value(old_client_name, None) self.data.set_value(new_client_name, client)
def find_client(self, client_name): if client_name not in self._client_list.get_client_names(): raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) if client_name not in self._clients: client = SimpleClient(client_name) client.set_fs(self._fs) client.set_lock_manager(self._lockmgr) client.set_current_time(self._current_time) self._clients[client_name] = client return self._clients[client_name]
def find_client(self, client_name): if client_name not in self._clients: if client_name not in self._client_list.get_client_names(): raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) client = self._client_factory(client_name) client.set_fs(self._fs) dirname = self._client_list.get_client_dirname(client_name) client.set_dirname(dirname) client.set_current_time(self._current_time) client.set_dir_cache_size(self._dir_cache_size) client.set_dir_bag_size(self._dir_bag_size) self._clients[client_name] = client return self._clients[client_name]
def _get_open_client_info(self, client_name): if client_name not in self._open_client_infos: tracing.trace('client_name=%s', client_name) client_id = self._get_client_id(client_name) if client_id is None: # pragma: no cover raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) client_dir = self._get_client_dir(client_id) client = obnamlib.ClientMetadataTree( self._fs, client_dir, self._node_size, self._upload_queue_size, self._lru_size, self) client.init_forest() self._open_client_infos[client_name] = _OpenClientInfo(client) return self._open_client_infos[client_name]
def rename_client(self, old_client_name, new_client_name): self._require_client_list_lock() client_names = self.get_client_names() if old_client_name not in client_names: raise obnamlib.RepositoryClientDoesNotExist( client_name=old_client_name) if new_client_name in client_names: raise obnamlib.RepositoryClientAlreadyExists( client_name=new_client_name) client_id = self._get_client_id(old_client_name) new_key = self._client_list.key( new_client_name, client_id, self._client_list.CLIENT_NAME) self._client_list.tree.insert(new_key, new_client_name) old_key = self._client_list.key( old_client_name, client_id, self._client_list.CLIENT_NAME) self._client_list.tree.remove(old_key)
def _require_existing_client(self, client_name): if client_name not in self.get_client_names(): raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name)
def get_client_encryption_key_id(self, client_name): client_names = self.get_client_names() if client_name not in client_names: raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) return self._client_list.get_client_keyid(client_name)
def remove_client(self, client_name): self._require_client_list_lock() if not self._client_list.get_client_id(client_name): raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) self._client_list.remove_client(client_name)
def _require_client_exists(self, client_name): if client_name not in self._data.get('clients', {}): raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name)
def set_client_encryption_key_id(self, client_name, key_id): client = self.data.get_value(client_name, None) if client is None: raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) client.key_id = key_id
def remove(self, client_name): self._require_lock() if self.data.get_value(client_name, None) is None: raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) self.data.set_value(client_name, None)
def __getitem__(self, client_name): client = self.data.get_value(client_name, None) if client is None: raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) return client
def get_client_extra_data_directory(self, client_name): # pragma: no cover if client_name not in self.get_client_names(): raise obnamlib.RepositoryClientDoesNotExist( client_name=client_name) return self._client_list.get_client_dirname(client_name)