+++ /dev/null
-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