1 files changed, 14 insertions, 3 deletions
diff --git a/synapse/state.py b/synapse/state.py
index b081de8f4f..4f8b4d9760 100644
--- a/synapse/state.py
+++ b/synapse/state.py
@@ -157,7 +157,10 @@ class StateHandler(object):
defer.returnValue(True)
return
- if new_branch[-1] == current_branch[-1]:
+ n = new_branch[-1]
+ c = current_branch[-1]
+
+ if n.pdu_id == c.pdu_id and n.origin == c.origin:
# We have all the PDUs we need, so we can just do the conflict
# resolution.
@@ -188,10 +191,18 @@ class StateHandler(object):
key=lambda x: x.depth
)
+ pdu_id = missing_prev.prev_state_id
+ origin = missing_prev.prev_state_origin
+
+ is_missing = yield self.store.get_pdu(pdu_id, origin) is None
+
+ if not is_missing:
+ raise Exception("Conflict resolution failed.")
+
yield self._replication.get_pdu(
destination=missing_prev.origin,
- pdu_origin=missing_prev.prev_state_origin,
- pdu_id=missing_prev.prev_state_id,
+ pdu_origin=origin,
+ pdu_id=pdu_id,
outlier=True
)
|