diff options
-rw-r--r-- | client/changes/bug_5975_wait-for-last-request-on-sync | 1 | ||||
-rw-r--r-- | client/src/leap/soledad/client/target.py | 8 | ||||
-rw-r--r-- | common/src/leap/soledad/common/couch.py | 9 |
3 files changed, 12 insertions, 6 deletions
diff --git a/client/changes/bug_5975_wait-for-last-request-on-sync b/client/changes/bug_5975_wait-for-last-request-on-sync new file mode 100644 index 00000000..7a394580 --- /dev/null +++ b/client/changes/bug_5975_wait-for-last-request-on-sync @@ -0,0 +1 @@ + o Wait for last post request to finish before starting a new one (#5975). diff --git a/client/src/leap/soledad/client/target.py b/client/src/leap/soledad/client/target.py index ae2010a6..651d3ee5 100644 --- a/client/src/leap/soledad/client/target.py +++ b/client/src/leap/soledad/client/target.py @@ -1176,6 +1176,7 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth): synced = [] number_of_docs = len(docs_by_generations) + last_request_lock = None for doc, gen, trans_id in docs_by_generations: # allow for interrupting the sync process if self.stopped is True: @@ -1212,7 +1213,7 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth): # end of symmetric encryption # ------------------------------------------------------------- t = syncer_pool.new_syncer_thread( - sent + 1, total, last_request_lock=None, + sent + 1, total, last_request_lock=last_request_lock, last_callback_lock=last_callback_lock) # bail out if any thread failed @@ -1249,7 +1250,12 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth): # save thread and append t.start() threads.append((t, doc)) + + # update lock references so they can be used in next call to + # syncer_pool.new_syncer_thread() above last_callback_lock = t.callback_lock + last_request_lock = t.request_lock + sent += 1 # make sure all threads finished and we have up-to-date info diff --git a/common/src/leap/soledad/common/couch.py b/common/src/leap/soledad/common/couch.py index 5658f4ce..a98a8f25 100644 --- a/common/src/leap/soledad/common/couch.py +++ b/common/src/leap/soledad/common/couch.py @@ -18,12 +18,12 @@ """A U1DB backend that uses CouchDB as its persistence layer.""" + import simplejson as json import re import uuid import logging import binascii -import socket import time import sys import threading @@ -44,7 +44,7 @@ from couchdb.http import ( urljoin as couch_urljoin, Resource, ) -from u1db import query_parser, vectorclock +from u1db import vectorclock from u1db.errors import ( DatabaseDoesNotExist, InvalidGeneration, @@ -60,7 +60,7 @@ from u1db.remote import http_app from u1db.remote.server_state import ServerState -from leap.soledad.common import USER_DB_PREFIX, ddocs, errors +from leap.soledad.common import ddocs, errors from leap.soledad.common.document import SoledadDocument @@ -160,7 +160,6 @@ class CouchDocument(SoledadDocument): """ if self._conflicts is None: raise Exception("Run self._ensure_fetch_conflicts first!") - conflicts_len = len(self._conflicts) self._conflicts = filter( lambda doc: doc.rev not in conflict_revs, self._conflicts) @@ -1181,7 +1180,7 @@ class CouchDatabase(CommonBackend): res = self._database.resource(*ddoc_path) try: with CouchDatabase.update_handler_lock[self._get_replica_uid()]: - body={ + body = { 'other_replica_uid': other_replica_uid, 'other_generation': other_generation, 'other_transaction_id': other_transaction_id, |