Per object possibilities: 1) Lock acquired, version id matches 2) No lock, but version id matches 3) Version id doesn't match 4) Not here Participant responses to coordinator A) DISAGREE (if we ever see at least 1 #3) B) AGREE (all #1) C) AGREE BUT MISSING OBJECTS (mixture of #1 and #4 - no #2 or #3) - return list of oid's for missing objects (need to build list) D) SOFT ABORT (need #2, could have #1, #4, can't have #3) - make sure there are no #3's Coordinator: I) ABORT (Any A's) (rerun computation, clear out transaction records, etc...) II) COMMIT (All B's) - do local commit, free storage III) ABORT BUT RETRY COMMIT (don't rerun computation) (Need D, can have B's, can have C', no A's) IV) ABORT BUT RETRY COMMIT WITH RELOCATING (don't rerun computation, but relookup all missing objects) (Need C, can have B's, no A's, no D's) Other machine involved in transaction: I) COMMIT - commit object into store, send ACK to coordinator II) ABORT - unlock objects, free transaction resources, send ACK to coordinator III) Coordinator unreachable: 1) Elect leader out of reachable nodes (choose smallest reachable mid) 2) leader queries everyone for what they've heard (ABORT/COMMIT/nothing) 3) If anyone has heard commit from original leader, all commit 4) If anyone has heard abort from original leader, all abort 5) Otherwise leader does following: for each mid in group send SUSPICIOUS_ABORT() receive acknowledgements from mid's for each mid in group send TRUST_ONLY(nodes that send acknowledgements) In case 5, machines become suspicious of all current machines not on the list. When first contacting (or being contacted by a machine isn't in the list, it is suspicious of all current machines except the leader). The machine won't talk to a machine it is suspicious of until it can verify that the other machines made the same decision on all "suspicious" transactions. COORDINATOR: Once it has received ACK's from all other machines in transaction: 1) It sends a recycle transaction id message (they don't need to remember the ABORT/COMMIT result of that id anymore) 2) After sending all these messages and receiving ack's, it marks it local copy of transaction id recyclable