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()