summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2015-04-29 00:55:53 +0200
committerRuben Pollan <meskio@sindominio.net>2015-05-21 11:49:58 +0200
commit9515c944279e08221de1852ab373d24232dccbf1 (patch)
treeb23731dee12f1b3228c60bdf03519d6c1f884749
parent01b005b0642454e3d670089ed7e530eda8e9ef91 (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_retry1
-rw-r--r--src/leap/bitmask/services/soledad/soledadbootstrapper.py21
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)