fix: atomically apply reconciliation leases
This commit is contained in:
@@ -205,6 +205,39 @@ class ClientStoreTests(unittest.TestCase):
|
||||
self.assertEqual(row["last_event_sequence"], 0)
|
||||
self.assertEqual(row["state"], "JOB_STATE_QUEUED")
|
||||
|
||||
def test_reconciliation_acknowledgement_and_state_are_atomic(self):
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
store = ClientStore(Path(directory) / "state.db")
|
||||
store.initialize()
|
||||
store.accept_command(
|
||||
"stale", '{"executeStep":{"jobId":"job-1"}}',
|
||||
'{"status":"COMMAND_ACK_STATUS_ACCEPTED"}',
|
||||
)
|
||||
accepted = store.accept_reconcile_command(
|
||||
"reconcile-1", '{"reconcileJob":{"authoritativeJob":{}}}',
|
||||
'{"status":"COMMAND_ACK_STATUS_ACCEPTED"}',
|
||||
job_id="job-1", definition_json='{"jobId":"job-1"}',
|
||||
state="JOB_STATE_QUEUED", revision=0,
|
||||
last_event_sequence=0, committed=False,
|
||||
superseded_command_ids=["stale"],
|
||||
)
|
||||
self.assertFalse(accepted.duplicate)
|
||||
self.assertEqual(accepted.state, "accepted")
|
||||
self.assertTrue(store.is_command_active("reconcile-1"))
|
||||
self.assertFalse(store.is_command_active("stale"))
|
||||
self.assertEqual(
|
||||
store.job_snapshot_rows(["job-1"])[0]["last_event_sequence"], 0
|
||||
)
|
||||
duplicate = store.accept_reconcile_command(
|
||||
"reconcile-1", '{"reconcileJob":{"authoritativeJob":{}}}',
|
||||
'{"status":"COMMAND_ACK_STATUS_ACCEPTED"}',
|
||||
job_id="job-1", definition_json='{"jobId":"job-1"}',
|
||||
state="JOB_STATE_QUEUED", revision=0,
|
||||
last_event_sequence=0, committed=False,
|
||||
superseded_command_ids=["stale"],
|
||||
)
|
||||
self.assertTrue(duplicate.duplicate)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user