diff --git a/agkyra/syncer/file_client.py b/agkyra/syncer/file_client.py
index a7878535f9b8e02a5befd4901a6e30d2f0ac533c..ec42f66aa88e2541349e0f7f95fe0ecbd41a42db 100644
--- a/agkyra/syncer/file_client.py
+++ b/agkyra/syncer/file_client.py
@@ -41,14 +41,14 @@ class FileClient(object):
if callback is not None:
callback(synced_source_state, synced_target_state)
except common.SyncError as e:
+ hard = isinstance(e, common.HardSyncError)
+ if failure_callback is not None:
+ failure_callback(source_handle.source_state, hard=hard)
msg = messaging.SyncErrorMessage(
objname=target_state.objname,
serial=source_handle.source_state.serial,
exception=e, logger=logger)
self.settings.messager.put(msg)
- if isinstance(e, common.HardSyncError):
- if failure_callback is not None:
- failure_callback(source_handle.source_state)
def _start(self, source_handle, target_state, sync_state):
try:
diff --git a/agkyra/syncer/syncer.py b/agkyra/syncer/syncer.py
index a3cc0d81830facf951a2495b3a8bee43339f22ba..2b94681571f9b7d3daebd7afafc8902ed9779c35 100644
--- a/agkyra/syncer/syncer.py
+++ b/agkyra/syncer/syncer.py
@@ -288,16 +288,17 @@ class FileSyncer(object):
callback=self.ack_file_sync,
failure_callback=self.mark_as_failed)
- def mark_as_failed(self, state):
+ def mark_as_failed(self, state, hard=False):
serial = state.serial
objname = state.objname
- logger.warning(
- "Marking failed serial %s for archive: %s, object: '%s'" %
- (serial, state.archive, objname))
with self.heartbeat.lock() as hb:
hb.pop(objname)
- with self.failed_serials.lock() as d:
- d[(serial, objname)] = state
+ if hard:
+ logger.warning(
+ "Marking failed serial %s for archive: %s, object: '%s'" %
+ (serial, state.archive, objname))
+ with self.failed_serials.lock() as d:
+ d[(serial, objname)] = state
def update_state(self, old_state, new_state):
db = self.get_db()