From 23e55ac38a41f1f2c3e1b49ea2ef13d8da561f57 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Tue, 11 Mar 2014 11:20:29 -0400 Subject: do not block on the lock... --- client/src/leap/soledad/client/__init__.py | 31 +++++++++++++++++++++++------ client/src/leap/soledad/client/sqlcipher.py | 7 +++++++ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/client/src/leap/soledad/client/__init__.py b/client/src/leap/soledad/client/__init__.py index a8d68c88..72db5d96 100644 --- a/client/src/leap/soledad/client/__init__.py +++ b/client/src/leap/soledad/client/__init__.py @@ -1086,14 +1086,33 @@ class Soledad(object): performed. :rtype: str """ + #return + local_gen = None if self._db: # acquire lock before attempt to sync - with Soledad.syncing_lock[self._db._get_replica_uid()]: - local_gen = self._db.sync( - urlparse.urljoin(self.server_url, 'user-%s' % self._uuid), - creds=self._creds, autocreate=True) - signal(SOLEDAD_DONE_DATA_SYNC, self._uuid) - return local_gen + replica_uid = self._db._get_replica_uid() + logger.debug("REPLICA UID: %s", replica_uid) + lock = Soledad.syncing_lock[replica_uid] + # optional wait flag used to avoid blocking + if not lock.acquire(False): + logger.debug('Already syncing... Skipping!') + return + else: + print "CLIENT syncing..." + try: + local_gen = self._db.sync( + urlparse.urljoin( + self.server_url, 'user-%s' % self._uuid), + creds=self._creds, autocreate=True) + #signal(SOLEDAD_DONE_DATA_SYNC, self._uuid) + except Exception as exc: + logger.error("error during soledad sync") + logger.exception(exc) + finally: + lock.release() + if local_gen is not None: + print "CLIENT synced!!!", local_gen + return local_gen def need_sync(self, url): """ diff --git a/client/src/leap/soledad/client/sqlcipher.py b/client/src/leap/soledad/client/sqlcipher.py index 3aea340d..a17c6a5f 100644 --- a/client/src/leap/soledad/client/sqlcipher.py +++ b/client/src/leap/soledad/client/sqlcipher.py @@ -351,6 +351,8 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase): :return: The local generation before the synchronisation was performed. :rtype: int """ + print "***********************" + print "SQLCIPHER: sync started" if not self.syncer: self._create_syncer(url, creds=creds) @@ -365,7 +367,12 @@ class SQLCipherDatabase(sqlite_backend.SQLitePartialExpandDatabase): logger.info("Replacing connection and trying again...") self._syncer = None self._create_syncer(url, creds=creds) + print "SQLCIPHER: syncer created, about to sync..." res = self.syncer.sync(autocreate=autocreate) + except Exception: + logger.error("error SQLITE sync") + raise + print "SQLCIPHER: sync DONE" return res @property -- cgit v1.2.3