diff --git a/agkyra/agkyra/syncer/localfs_client.py b/agkyra/agkyra/syncer/localfs_client.py index 76d676f69e9cb2f43c84b8b580422cfa3ec6338a..731ae7437a5eb311f9936493fada6d987afd9ce4 100644 --- a/agkyra/agkyra/syncer/localfs_client.py +++ b/agkyra/agkyra/syncer/localfs_client.py @@ -532,7 +532,7 @@ class LocalfsFileClient(FileClient): final_part = parts[-1] return exclude_pattern.match(final_part) - def start_probing_file(self, objname, old_state, ref_state, callback=None): + def probe_file(self, objname, old_state, ref_state): with self.probe_candidates.lock() as d: cached_info = d.pop(objname, None) if self.exclude_file(objname): @@ -545,8 +545,7 @@ class LocalfsFileClient(FileClient): if live_info is None: return live_state = old_state.set(info=live_info) - if callback is not None: - callback(live_state) + return live_state def stage_file(self, source_state): return LocalfsSourceHandle(self.settings, source_state) diff --git a/agkyra/agkyra/syncer/pithos_client.py b/agkyra/agkyra/syncer/pithos_client.py index 14818def4521c7aa2a6c300758fec0ebb1ac901c..0080bb5d182d62243f47fe5c860ff3783dacc951 100644 --- a/agkyra/agkyra/syncer/pithos_client.py +++ b/agkyra/agkyra/syncer/pithos_client.py @@ -340,7 +340,7 @@ class PithosFileClient(FileClient): PITHOS_TYPE: p_type, } - def start_probing_file(self, objname, old_state, ref_state, callback=None): + def probe_file(self, objname, old_state, ref_state): info = old_state.info with self.probe_candidates.lock() as d: cached_info = d.pop(objname, None) @@ -354,9 +354,8 @@ class PithosFileClient(FileClient): else: live_info = cached_info if info != live_info: - if callback is not None: - live_state = old_state.set(info=live_info) - callback(live_state) + live_state = old_state.set(info=live_info) + return live_state def stage_file(self, source_state): return PithosSourceHandle(self.settings, source_state) diff --git a/agkyra/agkyra/syncer/syncer.py b/agkyra/agkyra/syncer/syncer.py index ab0c830c995efb4819ffeb30b70a9efb1ffbeb86..0d8999cf6fc420241cabc0af6080b3a13b7cc796 100644 --- a/agkyra/agkyra/syncer/syncer.py +++ b/agkyra/agkyra/syncer/syncer.py @@ -97,6 +97,9 @@ class FileSyncer(object): @transaction() def probe_file(self, archive, objname): + return self._probe_file(archive, objname) + + def _probe_file(self, archive, objname): logger.info("Probing archive: %s, object: '%s'" % (archive, objname)) db = self.get_db() client = self.clients[archive] @@ -114,10 +117,10 @@ class FileSyncer(object): logger.warning("Serial mismatch in probing archive: %s, " "object: '%s'" % (archive, objname)) return - client.start_probing_file(objname, db_state, ref_state, - callback=self.update_file_state) + live_state = client.probe_file(objname, db_state, ref_state) + if live_state is not None: + self.update_file_state(live_state) - @transaction() def update_file_state(self, live_state): db = self.get_db() archive = live_state.archive @@ -345,11 +348,12 @@ class FileSyncer(object): return set(db.list_deciding(archives=archives, sync=self.SYNC)) + @transaction() def probe_archive(self, archive, forced=False): client = self.clients[archive] candidates = client.list_candidate_files(forced=forced) for objname in candidates: - self.probe_file(archive, objname) + self._probe_file(archive, objname) def decide_archive(self, archive): for objname in self.list_deciding([archive]):