Concurrency protocol question to those with more experience in the space than I.
Classical OCC requires *transitive* conflict serializability. That is, the conflict graph can not contain cycles *at all*. I think one of my students and I might have just found a setting where pairwise conflict serializability suffices.
To be more precise, take three transactions: A, B, C. A reads from B's write set, B reads from C's write set, and C reads from A's write set (but not visa versa). There's a cycle in the conflict graph, so these three transactions are *not* conflict serializable.
However, because there is no *pairwise* cycle, in our setting, all three transactions executed concurrently on a single snapshot result in three write sets that, when merged, are guaranteed to be equivalent to a serial execution of the three transactions.
This feels weird...
1. Are we correct that this is weird?
2. Has anyone else seen/done something similar?