{ "model": "Finite Dynamo-inspired schedules, not a Dynamo product or persistence test.", "fixed": { "N": 3, "R": 2, "W": 2, "single_writer": true }, "scenarios": { "without_readback": { "trace": [ { "step": 1, "action": "invoke", "op": "write", "kind": "put", "argument": 1 }, { "step": 2, "action": "send", "message": { "id": 1, "op": "write", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 3, "action": "send", "message": { "id": 2, "op": "write", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 4, "action": "send", "message": { "id": 3, "op": "write", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 5, "action": "deliver", "message": { "id": 1, "op": "write", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 6, "action": "stored", "node": "A", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 7, "action": "send", "message": { "id": 4, "op": "write", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 8, "action": "deliver", "message": { "id": 4, "op": "write", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 9, "action": "invoke", "op": "read1", "kind": "get", "argument": null }, { "step": 10, "action": "send", "message": { "id": 5, "op": "read1", "kind": "read", "source": "A", "dest": "A", "version": null, "hint": null, "handoff": false } }, { "step": 11, "action": "send", "message": { "id": 6, "op": "read1", "kind": "read", "source": "A", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 12, "action": "send", "message": { "id": 7, "op": "read1", "kind": "read", "source": "A", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 13, "action": "deliver", "message": { "id": 5, "op": "read1", "kind": "read", "source": "A", "dest": "A", "version": null, "hint": null, "handoff": false } }, { "step": 14, "action": "send", "message": { "id": 8, "op": "read1", "kind": "read-reply", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 15, "action": "deliver", "message": { "id": 8, "op": "read1", "kind": "read-reply", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 16, "action": "deliver", "message": { "id": 6, "op": "read1", "kind": "read", "source": "A", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 17, "action": "send", "message": { "id": 9, "op": "read1", "kind": "read-reply", "source": "B", "dest": "A", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 18, "action": "deliver", "message": { "id": 9, "op": "read1", "kind": "read-reply", "source": "B", "dest": "A", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 19, "action": "send", "message": { "id": 10, "op": "read1-repair", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 20, "action": "send", "message": { "id": 11, "op": "read1-repair", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 21, "action": "send", "message": { "id": 12, "op": "read1-repair", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 22, "action": "respond", "op": "read1", "result": 1 }, { "step": 23, "action": "invoke", "op": "read2", "kind": "get", "argument": null }, { "step": 24, "action": "send", "message": { "id": 13, "op": "read2", "kind": "read", "source": "B", "dest": "A", "version": null, "hint": null, "handoff": false } }, { "step": 25, "action": "send", "message": { "id": 14, "op": "read2", "kind": "read", "source": "B", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 26, "action": "send", "message": { "id": 15, "op": "read2", "kind": "read", "source": "B", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 27, "action": "deliver", "message": { "id": 14, "op": "read2", "kind": "read", "source": "B", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 28, "action": "send", "message": { "id": 16, "op": "read2", "kind": "read-reply", "source": "B", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 29, "action": "deliver", "message": { "id": 16, "op": "read2", "kind": "read-reply", "source": "B", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 30, "action": "deliver", "message": { "id": 15, "op": "read2", "kind": "read", "source": "B", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 31, "action": "send", "message": { "id": 17, "op": "read2", "kind": "read-reply", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 32, "action": "deliver", "message": { "id": 17, "op": "read2", "kind": "read-reply", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 33, "action": "respond", "op": "read2", "result": 0 }, { "step": 34, "action": "deliver", "message": { "id": 2, "op": "write", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 35, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 36, "action": "send", "message": { "id": 18, "op": "write", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 37, "action": "deliver", "message": { "id": 18, "op": "write", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 38, "action": "respond", "op": "write", "result": "ok" }, { "step": 39, "action": "deliver", "message": { "id": 10, "op": "read1-repair", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 40, "action": "stored", "node": "A", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 41, "action": "send", "message": { "id": 19, "op": "read1-repair", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 42, "action": "deliver", "message": { "id": 19, "op": "read1-repair", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 43, "action": "deliver", "message": { "id": 11, "op": "read1-repair", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 44, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 45, "action": "send", "message": { "id": 20, "op": "read1-repair", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 46, "action": "deliver", "message": { "id": 20, "op": "read1-repair", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 47, "action": "send", "message": { "id": 21, "op": "old-data", "kind": "update", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 48, "action": "deliver", "message": { "id": 21, "op": "old-data", "kind": "update", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 49, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 50, "action": "send", "message": { "id": 22, "op": "old-data", "kind": "ack", "source": "B", "dest": "C", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 51, "action": "deliver", "message": { "id": 22, "op": "old-data", "kind": "ack", "source": "B", "dest": "C", "version": [ 0, 0 ], "hint": null, "handoff": false } } ], "history": [ { "id": "write", "kind": "put", "argument": 1, "call": 1, "result": "ok", "return": 38 }, { "id": "read1", "kind": "get", "argument": null, "call": 9, "result": 1, "return": 22 }, { "id": "read2", "kind": "get", "argument": null, "call": 23, "result": 0, "return": 33 } ], "nodes": { "A": { "version": [ 1, 1 ], "hints": {} }, "B": { "version": [ 1, 1 ], "hints": {} }, "C": { "version": [ 0, 0 ], "hints": {} } }, "undelivered_messages": [ { "id": 3, "op": "write", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false }, { "id": 7, "op": "read1", "kind": "read", "source": "A", "dest": "C", "version": null, "hint": null, "handoff": false }, { "id": 12, "op": "read1-repair", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false }, { "id": 13, "op": "read2", "kind": "read", "source": "B", "dest": "A", "version": null, "hint": null, "handoff": false } ], "witnesses": [] }, "with_readback": { "trace": [ { "step": 1, "action": "invoke", "op": "write", "kind": "put", "argument": 1 }, { "step": 2, "action": "send", "message": { "id": 1, "op": "write", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 3, "action": "send", "message": { "id": 2, "op": "write", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 4, "action": "send", "message": { "id": 3, "op": "write", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 5, "action": "deliver", "message": { "id": 1, "op": "write", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 6, "action": "stored", "node": "A", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 7, "action": "send", "message": { "id": 4, "op": "write", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 8, "action": "deliver", "message": { "id": 4, "op": "write", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 9, "action": "invoke", "op": "read1", "kind": "get", "argument": null }, { "step": 10, "action": "send", "message": { "id": 5, "op": "read1", "kind": "read", "source": "A", "dest": "A", "version": null, "hint": null, "handoff": false } }, { "step": 11, "action": "send", "message": { "id": 6, "op": "read1", "kind": "read", "source": "A", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 12, "action": "send", "message": { "id": 7, "op": "read1", "kind": "read", "source": "A", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 13, "action": "deliver", "message": { "id": 5, "op": "read1", "kind": "read", "source": "A", "dest": "A", "version": null, "hint": null, "handoff": false } }, { "step": 14, "action": "send", "message": { "id": 8, "op": "read1", "kind": "read-reply", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 15, "action": "deliver", "message": { "id": 8, "op": "read1", "kind": "read-reply", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 16, "action": "deliver", "message": { "id": 6, "op": "read1", "kind": "read", "source": "A", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 17, "action": "send", "message": { "id": 9, "op": "read1", "kind": "read-reply", "source": "B", "dest": "A", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 18, "action": "deliver", "message": { "id": 9, "op": "read1", "kind": "read-reply", "source": "B", "dest": "A", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 19, "action": "send", "message": { "id": 10, "op": "read1-repair", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 20, "action": "send", "message": { "id": 11, "op": "read1-repair", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 21, "action": "send", "message": { "id": 12, "op": "read1-repair", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 22, "action": "deliver", "message": { "id": 10, "op": "read1-repair", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 23, "action": "stored", "node": "A", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 24, "action": "send", "message": { "id": 13, "op": "read1-repair", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 25, "action": "deliver", "message": { "id": 13, "op": "read1-repair", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 26, "action": "deliver", "message": { "id": 11, "op": "read1-repair", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 27, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 28, "action": "send", "message": { "id": 14, "op": "read1-repair", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 29, "action": "deliver", "message": { "id": 14, "op": "read1-repair", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 30, "action": "respond", "op": "read1", "result": 1 }, { "step": 31, "action": "invoke", "op": "read2", "kind": "get", "argument": null }, { "step": 32, "action": "send", "message": { "id": 15, "op": "read2", "kind": "read", "source": "B", "dest": "A", "version": null, "hint": null, "handoff": false } }, { "step": 33, "action": "send", "message": { "id": 16, "op": "read2", "kind": "read", "source": "B", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 34, "action": "send", "message": { "id": 17, "op": "read2", "kind": "read", "source": "B", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 35, "action": "deliver", "message": { "id": 16, "op": "read2", "kind": "read", "source": "B", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 36, "action": "send", "message": { "id": 18, "op": "read2", "kind": "read-reply", "source": "B", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 37, "action": "deliver", "message": { "id": 18, "op": "read2", "kind": "read-reply", "source": "B", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 38, "action": "deliver", "message": { "id": 17, "op": "read2", "kind": "read", "source": "B", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 39, "action": "send", "message": { "id": 19, "op": "read2", "kind": "read-reply", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 40, "action": "deliver", "message": { "id": 19, "op": "read2", "kind": "read-reply", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 41, "action": "respond", "op": "read2", "result": 1 }, { "step": 42, "action": "deliver", "message": { "id": 2, "op": "write", "kind": "update", "source": "A", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 43, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 44, "action": "send", "message": { "id": 20, "op": "write", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 45, "action": "deliver", "message": { "id": 20, "op": "write", "kind": "ack", "source": "B", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 46, "action": "respond", "op": "write", "result": "ok" }, { "step": 47, "action": "send", "message": { "id": 21, "op": "old-data", "kind": "update", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 48, "action": "deliver", "message": { "id": 21, "op": "old-data", "kind": "update", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 49, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 50, "action": "send", "message": { "id": 22, "op": "old-data", "kind": "ack", "source": "B", "dest": "C", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 51, "action": "deliver", "message": { "id": 22, "op": "old-data", "kind": "ack", "source": "B", "dest": "C", "version": [ 0, 0 ], "hint": null, "handoff": false } } ], "history": [ { "id": "write", "kind": "put", "argument": 1, "call": 1, "result": "ok", "return": 46 }, { "id": "read1", "kind": "get", "argument": null, "call": 9, "result": 1, "return": 30 }, { "id": "read2", "kind": "get", "argument": null, "call": 31, "result": 1, "return": 41 } ], "nodes": { "A": { "version": [ 1, 1 ], "hints": {} }, "B": { "version": [ 1, 1 ], "hints": {} }, "C": { "version": [ 0, 0 ], "hints": {} } }, "undelivered_messages": [ { "id": 3, "op": "write", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false }, { "id": 7, "op": "read1", "kind": "read", "source": "A", "dest": "C", "version": null, "hint": null, "handoff": false }, { "id": 12, "op": "read1-repair", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false }, { "id": 15, "op": "read2", "kind": "read", "source": "B", "dest": "A", "version": null, "hint": null, "handoff": false } ], "witnesses": [ [ "write", "read1", "read2" ] ] }, "sloppy": { "trace": [ { "step": 1, "action": "candidate-filter", "coordinator": "A", "preference": [ "A", "B", "C", "D", "E", "F" ], "reachable": [ "A", "D", "E" ], "selected": [ "A", "D", "E" ] }, { "step": 2, "action": "invoke", "op": "write", "kind": "put", "argument": 1 }, { "step": 3, "action": "send", "message": { "id": 1, "op": "write", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 4, "action": "send", "message": { "id": 2, "op": "write", "kind": "update", "source": "A", "dest": "D", "version": [ 1, 1 ], "hint": "B", "handoff": false } }, { "step": 5, "action": "send", "message": { "id": 3, "op": "write", "kind": "update", "source": "A", "dest": "E", "version": [ 1, 1 ], "hint": "C", "handoff": false } }, { "step": 6, "action": "deliver", "message": { "id": 1, "op": "write", "kind": "update", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 7, "action": "stored", "node": "A", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 8, "action": "send", "message": { "id": 4, "op": "write", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 9, "action": "deliver", "message": { "id": 4, "op": "write", "kind": "ack", "source": "A", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 10, "action": "deliver", "message": { "id": 2, "op": "write", "kind": "update", "source": "A", "dest": "D", "version": [ 1, 1 ], "hint": "B", "handoff": false } }, { "step": 11, "action": "stored", "node": "D", "state": { "version": [ 1, 1 ], "hints": { "B": [ 1, 1 ] } } }, { "step": 12, "action": "send", "message": { "id": 5, "op": "write", "kind": "ack", "source": "D", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 13, "action": "deliver", "message": { "id": 5, "op": "write", "kind": "ack", "source": "D", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 14, "action": "respond", "op": "write", "result": "ok" }, { "step": 15, "action": "candidate-filter", "coordinator": "B", "preference": [ "A", "B", "C", "D", "E", "F" ], "reachable": [ "B", "C", "F" ], "selected": [ "B", "C", "F" ] }, { "step": 16, "action": "invoke", "op": "read", "kind": "get", "argument": null }, { "step": 17, "action": "send", "message": { "id": 6, "op": "read", "kind": "read", "source": "B", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 18, "action": "send", "message": { "id": 7, "op": "read", "kind": "read", "source": "B", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 19, "action": "send", "message": { "id": 8, "op": "read", "kind": "read", "source": "B", "dest": "F", "version": null, "hint": null, "handoff": false } }, { "step": 20, "action": "deliver", "message": { "id": 6, "op": "read", "kind": "read", "source": "B", "dest": "B", "version": null, "hint": null, "handoff": false } }, { "step": 21, "action": "send", "message": { "id": 9, "op": "read", "kind": "read-reply", "source": "B", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 22, "action": "deliver", "message": { "id": 9, "op": "read", "kind": "read-reply", "source": "B", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 23, "action": "deliver", "message": { "id": 7, "op": "read", "kind": "read", "source": "B", "dest": "C", "version": null, "hint": null, "handoff": false } }, { "step": 24, "action": "send", "message": { "id": 10, "op": "read", "kind": "read-reply", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 25, "action": "deliver", "message": { "id": 10, "op": "read", "kind": "read-reply", "source": "C", "dest": "B", "version": [ 0, 0 ], "hint": null, "handoff": false } }, { "step": 26, "action": "respond", "op": "read", "result": 0 }, { "step": 27, "action": "heal", "note": "all subsequent messages now reachable" }, { "step": 28, "action": "send", "message": { "id": 11, "op": "handoff", "kind": "update", "source": "D", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": true } }, { "step": 29, "action": "deliver", "message": { "id": 11, "op": "handoff", "kind": "update", "source": "D", "dest": "B", "version": [ 1, 1 ], "hint": null, "handoff": true } }, { "step": 30, "action": "stored", "node": "B", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 31, "action": "send", "message": { "id": 12, "op": "handoff", "kind": "ack", "source": "B", "dest": "D", "version": [ 1, 1 ], "hint": null, "handoff": true } }, { "step": 32, "action": "deliver", "message": { "id": 12, "op": "handoff", "kind": "ack", "source": "B", "dest": "D", "version": [ 1, 1 ], "hint": null, "handoff": true } }, { "step": 33, "action": "hint-deleted-after-ack", "holder": "D", "home": "B" }, { "step": 34, "action": "send", "message": { "id": 13, "op": "anti-entropy", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 35, "action": "deliver", "message": { "id": 13, "op": "anti-entropy", "kind": "update", "source": "A", "dest": "C", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 36, "action": "stored", "node": "C", "state": { "version": [ 1, 1 ], "hints": {} } }, { "step": 37, "action": "send", "message": { "id": 14, "op": "anti-entropy", "kind": "ack", "source": "C", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } }, { "step": 38, "action": "deliver", "message": { "id": 14, "op": "anti-entropy", "kind": "ack", "source": "C", "dest": "A", "version": [ 1, 1 ], "hint": null, "handoff": false } } ], "history": [ { "id": "write", "kind": "put", "argument": 1, "call": 2, "result": "ok", "return": 14 }, { "id": "read", "kind": "get", "argument": null, "call": 16, "result": 0, "return": 26 } ], "nodes": { "A": { "version": [ 1, 1 ], "hints": {} }, "B": { "version": [ 1, 1 ], "hints": {} }, "C": { "version": [ 1, 1 ], "hints": {} }, "D": { "version": [ 1, 1 ], "hints": {} }, "E": { "version": [ 0, 0 ], "hints": {} }, "F": { "version": [ 0, 0 ], "hints": {} } }, "undelivered_messages": [ { "id": 3, "op": "write", "kind": "update", "source": "A", "dest": "E", "version": [ 1, 1 ], "hint": "C", "handoff": false }, { "id": 8, "op": "read", "kind": "read", "source": "B", "dest": "F", "version": null, "hint": null, "handoff": false } ], "witnesses": [], "write_acks": [ "A", "D" ], "read_replies": [ "B", "C" ], "N": 3, "R": 2, "W": 2 }, "vectors": { "trace": [ { "action": "partition-local-writes", "N": 3, "R": 1, "W": 1, "partition": [ "A", "BC" ], "acks": { "left": [ "A" ], "right": [ "B" ] }, "nodes": { "A": [ { "clock": { "A": 2 }, "items": [ "apple" ] } ], "B": [ { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] } ], "C": [ { "clock": { "A": 1 }, "items": [] } ] } }, { "action": "anti-entropy", "source": "A", "dest": "B", "sent": [ { "clock": { "A": 2 }, "items": [ "apple" ] } ], "stored": [ { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] }, { "clock": { "A": 2 }, "items": [ "apple" ] } ] }, { "action": "anti-entropy", "source": "B", "dest": "C", "sent": [ { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] }, { "clock": { "A": 2 }, "items": [ "apple" ] } ], "stored": [ { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] }, { "clock": { "A": 2 }, "items": [ "apple" ] } ] }, { "action": "anti-entropy", "source": "C", "dest": "A", "sent": [ { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] }, { "clock": { "A": 2 }, "items": [ "apple" ] } ], "stored": [ { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] }, { "clock": { "A": 2 }, "items": [ "apple" ] } ] }, { "action": "explicit-application-resolution", "context": [ { "clock": { "A": 2 }, "items": [ "apple" ] }, { "clock": { "A": 1, "B": 1 }, "items": [ "pear" ] } ], "resolved": { "clock": { "A": 2, "B": 1, "C": 1 }, "items": [ "apple", "pear" ] }, "nodes": { "A": [ { "clock": { "A": 2, "B": 1, "C": 1 }, "items": [ "apple", "pear" ] } ], "B": [ { "clock": { "A": 2, "B": 1, "C": 1 }, "items": [ "apple", "pear" ] } ], "C": [ { "clock": { "A": 2, "B": 1, "C": 1 }, "items": [ "apple", "pear" ] } ] } }, { "action": "union-resurrects-delete", "base": { "clock": { "A": 1 }, "items": [ "tea" ] }, "siblings": [ { "clock": { "A": 1, "B": 1 }, "items": [ "coffee", "tea" ] }, { "clock": { "A": 2 }, "items": [] } ], "resolved": { "clock": { "A": 2, "B": 1, "C": 1 }, "items": [ "coffee", "tea" ] } } ], "algebra_samples": 6, "limitations": "full stable-ID vectors; no truncation, real persistence, membership gossip or Merkle implementation" } } }