summaryrefslogtreecommitdiff
path: root/client/src/leap/soledad
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/leap/soledad')
-rw-r--r--client/src/leap/soledad/client/target.py28
1 files changed, 18 insertions, 10 deletions
diff --git a/client/src/leap/soledad/client/target.py b/client/src/leap/soledad/client/target.py
index 986bd991..d59923b2 100644
--- a/client/src/leap/soledad/client/target.py
+++ b/client/src/leap/soledad/client/target.py
@@ -300,7 +300,7 @@ class DocumentSyncerPool(object):
# we rely on DocumentSyncerThread.run() to release the lock using
# self.release_syncer so we can launch a new thread.
t = DocumentSyncerThread(
- doc_syncer, self.release_syncer, self.cancel_threads,
+ doc_syncer, self.release_syncer, self.stop_threads,
idx, total,
last_request_lock=last_request_lock,
last_callback_lock=last_callback_lock)
@@ -348,17 +348,21 @@ class DocumentSyncerPool(object):
self._threads.remove(syncer_thread)
self._semaphore_pool.release()
- def cancel_threads(self):
+ def stop_threads(self, fail=True):
"""
Stop all threads in the pool.
+
+ :param fail: Whether we are stopping because of a failure.
+ :type fail: bool
"""
# stop sync
self._stop_method()
stopped = []
# stop all threads
- logger.warning("Soledad sync: cancelling sync threads...")
with self._pool_access_lock:
- self._failures = True
+ if fail:
+ self._failures = True
+ logger.error("sync failed: cancelling sync threads...")
while self._threads:
t = self._threads.pop(0)
t.stop()
@@ -377,7 +381,8 @@ class DocumentSyncerPool(object):
self._semaphore_pool.release()
except ValueError:
break
- logger.warning("Soledad sync: cancelled sync threads.")
+ if fail:
+ logger.error("Soledad sync: cancelled sync threads.")
def cleanup(self):
"""
@@ -1020,7 +1025,7 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth):
# bail out if any thread failed
if t is None:
- self.stop()
+ self.stop(fail=True)
break
t.doc_syncer.set_request_method(
@@ -1220,7 +1225,7 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth):
# bail out if any thread failed
if t is None:
- self.stop()
+ self.stop(fail=True)
break
# set the request method
@@ -1308,7 +1313,7 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth):
cur_target_gen = gen_after_send
cur_target_trans_id = trans_id_after_send
- self.stop()
+ self.stop(fail=False)
self._syncer_pool = None
return cur_target_gen, cur_target_trans_id
@@ -1324,17 +1329,20 @@ class SoledadSyncTarget(HTTPSyncTarget, TokenBasedAuth):
with self._stop_lock:
self._stopped = True
- def stop(self):
+ def stop(self, fail=False):
"""
Mark current sync session as stopped.
This will eventually interrupt the sync_exchange() method and return
enough information to the synchronizer so the sync session can be
recovered afterwards.
+
+ :param fail: Whether we are stopping because of a failure.
+ :type fail: bool
"""
self.stop_syncer()
if self._syncer_pool:
- self._syncer_pool.cancel_threads()
+ self._syncer_pool.stop_threads(fail=fail)
@property
def stopped(self):