Beispiel #1
0
    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
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
    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]
Beispiel #5
0
    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]
Beispiel #6
0
    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]
Beispiel #7
0
    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)
Beispiel #8
0
 def _require_existing_client(self, client_name):
     if client_name not in self.get_client_names():
         raise obnamlib.RepositoryClientDoesNotExist(
             client_name=client_name)
Beispiel #9
0
 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)
Beispiel #10
0
 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)
Beispiel #11
0
 def _require_client_exists(self, client_name):
     if client_name not in self._data.get('clients', {}):
         raise obnamlib.RepositoryClientDoesNotExist(
             client_name=client_name)
Beispiel #12
0
 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
Beispiel #13
0
 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)
Beispiel #14
0
 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
Beispiel #15
0
 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)