From 85a1a30da685ec4f0cd12d22368c0219f5aa6ef4 Mon Sep 17 00:00:00 2001
From: Giorgos Korfiatis <gkorf@grnet.gr>
Date: Wed, 21 Oct 2015 20:42:49 +0300
Subject: [PATCH] Make sure there is exactly one syncer

Keep the syncer even in an error status. Don't init_sync in force_sync,
since we already have a syncer.
---
 agkyra/protocol.py | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/agkyra/protocol.py b/agkyra/protocol.py
index d67fe7b..f01fcbe 100644
--- a/agkyra/protocol.py
+++ b/agkyra/protocol.py
@@ -505,7 +505,6 @@ class WebSocketProtocol(WebSocket):
             master = pithos_client.PithosFileClient(syncer_settings)
             slave = localfs_client.LocalfsFileClient(syncer_settings)
             syncer_ = syncer.FileSyncer(syncer_settings, master, slave)
-            self.syncer_settings = syncer_settings
             # Check if syncer is ready, by consuming messages
             local_ok, remote_ok = False, False
             for i in range(2):
@@ -533,8 +532,6 @@ class WebSocketProtocol(WebSocket):
             if local_ok and remote_ok:
                 syncer_.initiate_probe()
                 self.set_status(code=STATUS['SYNCING'])
-            else:
-                syncer_ = None
         except pithos_client.ClientError as ce:
             LOGGER.debug('backend init failed: %s %s' % (ce, ce.status))
             try:
@@ -605,13 +602,10 @@ class WebSocketProtocol(WebSocket):
     def force_sync(self):
         """Force syncing, assuming there is a directory or container problem"""
         self.set_status(code=STATUS['INITIALIZING'])
-        self.syncer_settings.purge_db_archives_and_enable()
-        self.init_sync()
-        if self.syncer:
-            self.syncer.start_decide()
-            self.set_status(code=STATUS['SYNCING'])
-        else:
-            self.set_status(code=STATUS['CRITICAL ERROR'])
+        self.syncer.settings.purge_db_archives_and_enable()
+        self.syncer.initiate_probe()
+        self.syncer.start_decide()
+        self.set_status(code=STATUS['SYNCING'])
 
     def send_json(self, msg):
         LOGGER.debug('send: %s' % msg)
@@ -640,7 +634,9 @@ class WebSocketProtocol(WebSocket):
             self._load_settings()
             if (not self.syncer) and self.can_sync():
                 self.init_sync()
-                if self.syncer and self.settings['sync_on_start']:
+                status = self.get_status('code')
+                if self.syncer and self.settings['sync_on_start'] and \
+                   status == STATUS["SYNCING"]:
                     self.start_sync()
         else:
             action = r.get('path', 'ui_id')
-- 
GitLab