diff options
| author | Ruben Pollan <meskio@sindominio.net> | 2015-04-29 00:55:53 +0200 | 
|---|---|---|
| committer | Ruben Pollan <meskio@sindominio.net> | 2015-05-21 11:49:58 +0200 | 
| commit | 9515c944279e08221de1852ab373d24232dccbf1 (patch) | |
| tree | b23731dee12f1b3228c60bdf03519d6c1f884749 | |
| parent | 01b005b0642454e3d670089ed7e530eda8e9ef91 (diff) | |
[bug] fix soledad bootstrap sync issues
* Instead of checking if soledad is still syncing for the timeuot cancel
  the delayed call.
* Count retries properly.
* Now soledad sync only returns SoledadError (#6981).
| -rw-r--r-- | changes/bug-syncing_retry | 1 | ||||
| -rw-r--r-- | src/leap/bitmask/services/soledad/soledadbootstrapper.py | 21 | 
2 files changed, 7 insertions, 15 deletions
| diff --git a/changes/bug-syncing_retry b/changes/bug-syncing_retry new file mode 100644 index 00000000..5a784a0c --- /dev/null +++ b/changes/bug-syncing_retry @@ -0,0 +1 @@ +- Fix soledad bootstrap sync retries. diff --git a/src/leap/bitmask/services/soledad/soledadbootstrapper.py b/src/leap/bitmask/services/soledad/soledadbootstrapper.py index 6cb4c116..9864e4e1 100644 --- a/src/leap/bitmask/services/soledad/soledadbootstrapper.py +++ b/src/leap/bitmask/services/soledad/soledadbootstrapper.py @@ -22,7 +22,6 @@ import os  import socket  import sys -from ssl import SSLError  from sqlite3 import ProgrammingError as sqlite_ProgrammingError  from u1db import errors as u1db_errors @@ -621,14 +620,17 @@ class Syncer(object):          # for debugging.          self._sync_deferred = self._soledad.sync(defer_decryption=True)          self._sync_deferred.addCallbacks(self._success, self._error) -        reactor.callLater(self.WAIT_MAX_SECONDS, self._timeout) +        self._timeout_delayed_call = reactor.callLater(self.WAIT_MAX_SECONDS, +                                                       self._timeout)      def _success(self, result):          logger.debug("Soledad has been synced!") +        self._timeout_delayed_call.cancel()          self._callback_deferred.callback(result)          # so long, and thanks for all the fish      def _error(self, failure): +        self._timeout_delayed_call.cancel()          if failure.check(InvalidAuthTokenError):              logger.error('Invalid auth token while trying to self Soledad')              self._signaler.signal( @@ -638,22 +640,11 @@ class Syncer(object):                             sqlcipher_ProgrammingError):              logger.exception("%r" % (failure.value,))              self._callback_deferred.fail(failure) -        elif failure.check(SSLError): -            logger.error("%r" % (failure.value,)) -            self._retry() -        elif failure.check(u1db_errors.InvalidGeneration): -            logger.error("%r" % (failure.value,)) -            self._retry()          else: -            logger.exception("Unhandled error while syncing " -                             "soledad: %r" % (failure.value,)) +            logger.error("%r" % (failure.value,))              self._retry()      def _timeout(self): -        if not self._soledad.syncing: -            # timeout only if is still syncing -            return -          # maybe it's my connection, but I'm getting          # ssl handshake timeouts and read errors quite often.          # A particularly big sync is a disaster. @@ -666,7 +657,7 @@ class Syncer(object):      def _retry(self):          self._tries += 1 -        if self._tries > self.MAX_SYNC_RETRIES: +        if self._tries < self.MAX_SYNC_RETRIES:              msg = "Sync failed, retrying... (retry {0} of {1})".format(                  self._tries, self.MAX_SYNC_RETRIES)              logger.warning(msg) | 
