diff --git a/neo/storage/replicator.py b/neo/storage/replicator.py index 1ce076fee9b34faa61855c0aeb1abde0805ffe21..5554e49299598b83fa0527e708c88446087f1b3d 100644 --- a/neo/storage/replicator.py +++ b/neo/storage/replicator.py @@ -41,14 +41,10 @@ class Partition(object): tid = '\x00' * 8 self.tid = tid - def safe(self, pending_tid_list): - if self.tid is None: - return False - for tid in pending_tid_list: - if self.tid >= tid: - return False - return True - + def safe(self, min_pending_tid): + tid = self.tid + return tid is not None and ( + min_pending_tid is None or tid < min_pending_tid) class Replicator(object): """This class handles replications of objects and transactions. @@ -222,15 +218,18 @@ class Replicator(object): return # Try to select something. + if len(self.unfinished_tid_list): + min_unfinished_tid = min(self.unfinished_tid_list) + else: + min_unfinished_tid = None + self.unfinished_tid_list = None for partition in self.partition_dict.values(): - if partition.safe(self.unfinished_tid_list): + if partition.safe(min_unfinished_tid): self.current_partition = partition - self.unfinished_tid_list = None break else: # Not yet. logging.debug('not ready yet') - self.unfinished_tid_list = None return self._startReplication()