From 8f3fdc2f9c3d4360669c2c7fd89dbd95e0f8dd22 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Sat, 11 Nov 2017 00:37:01 -0300 Subject: [feature] apply deletions from server Sync method to propagate deletions in batch locally. -- Resolves: #8961 --- src/leap/soledad/client/_db/blobs/sql.py | 7 +++++++ src/leap/soledad/client/_db/blobs/sync.py | 7 +++++++ 2 files changed, 14 insertions(+) (limited to 'src/leap') diff --git a/src/leap/soledad/client/_db/blobs/sql.py b/src/leap/soledad/client/_db/blobs/sql.py index c5b0b64b..5337ab87 100644 --- a/src/leap/soledad/client/_db/blobs/sql.py +++ b/src/leap/soledad/client/_db/blobs/sql.py @@ -190,6 +190,13 @@ class SQLiteBlobBackend(object): query = 'DELETE FROM blobs WHERE blob_id = ? AND namespace = ?' return self.dbpool.runQuery(query, (blob_id, namespace,)) + def batch_delete(self, blob_id_list, namespace=''): + query = 'DELETE FROM blobs WHERE blob_id IN ' + size = len(blob_id_list) + query += ('(%s)' % ', '.join(['?' for _ in range(size)])) + values = tuple(blob_id_list) + return self.dbpool.runQuery(query, values) + def _init_tables(conn): # unified init for running under the same lock diff --git a/src/leap/soledad/client/_db/blobs/sync.py b/src/leap/soledad/client/_db/blobs/sync.py index bfdc5fbe..bdfbb983 100644 --- a/src/leap/soledad/client/_db/blobs/sync.py +++ b/src/leap/soledad/client/_db/blobs/sync.py @@ -72,6 +72,12 @@ class BlobsSynchronizer(object): SyncStatus.PENDING_UPLOAD, namespace=namespace) + @defer.inlineCallbacks + def _apply_deletions_from_server(self, namespace=''): + remote_deletions = self.remote_list(namespace=namespace, deleted=True) + remote_deletions = yield remote_deletions + yield self.local.batch_delete(remote_deletions) + @defer.inlineCallbacks def send_missing(self, namespace=''): """ @@ -131,6 +137,7 @@ class BlobsSynchronizer(object): @defer.inlineCallbacks def sync(self, namespace=''): try: + yield self._apply_deletions_from_server(namespace) yield self.refresh_sync_status_from_server(namespace) yield self.fetch_missing(namespace) yield self.send_missing(namespace) -- cgit v1.2.3