Commit 8ef1ddba authored by Julien Muchembled's avatar Julien Muchembled

fixup! client: discard late answers to lockless writes

Since commit 50e7fe52,
some code can be simplified.
parent a2e278d5
...@@ -105,22 +105,15 @@ class Transaction(object): ...@@ -105,22 +105,15 @@ class Transaction(object):
# conflict. Because we have no way to identify such case, we must keep # conflict. Because we have no way to identify such case, we must keep
# the data in self.data_dict until all nodes have answered so we remain # the data in self.data_dict until all nodes have answered so we remain
# able to resolve conflicts. # able to resolve conflicts.
data, serial, uuid_list = self.data_dict[oid]
try: try:
data, serial, uuid_list = self.data_dict[oid]
uuid_list.remove(uuid) uuid_list.remove(uuid)
except KeyError:
# 1. store to S1 and S2
# 2. S2 reports a conflict
# 3. store to S1 and S2 # conflict resolution
# 4. S1 does not report a conflict (lockless)
# 5. S2 answers before S1 for the second store
return
except ValueError: except ValueError:
# The most common case for this exception is because nodeLost() # The most common case for this exception is because nodeLost()
# tries all oids blindly. Other possible cases: # tries all oids blindly.
# - like above (KeyError), but with S2 answering last # Another possible case is when we receive several positive answers
# - answer to resolved conflict before the first answer from a # from a node that is being disconnected by the master, whereas the
# node that was being disconnected by the master # first one (at least) should actually be conflict answer.
return return
if lockless: if lockless:
if lockless != serial: # late lockless write if lockless != serial: # late lockless write
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment