JEPSEN

G1a (Aborted Read)

Phenomenon G1a, or Aborted Read, occurs when a write performed by an aborted transaction is read by a committed transaction. G1a is legal under Read Uncommitted, but proscribed by Read Committed.

For example, imagine a pair of transactions Ti and Tj. Ti writes version xi, and aborts. Transaction Tj reads xi, and commits. Information from an aborted transaction has now leaked in to a committed transaction.

If writes are arbitrary transformations of values (rather than blind writes), this definition of G1a is insufficient. Imagine an aborted transaction Ti writes xi, and a committed transaction Tj writes xj = f(xi). Finally, a committed transaction Tk reads xj. Clearly, information from an aborted transaction is visible to a committed one, but G1a is technically not present. One could resolve this by treating writes as implicit reads: Ti and Tj would then be G1a. Jepsen opts to call this phenomenon dirty update.

Formally

G1a is defined in Adya’s thesis, section 3.2.2:

G1a: Aborted Reads. A history H exhibits phenomenon G1a if it contains an aborted transaction Ti and a committed transaction Tj such that Tj has read some object (maybe via a predicate) modified by Ti.

See Also

Aborted read is clearly analogous to the ANSI SQL anomaly P1 (Dirty Read). However, P1 has two interpretations: one allows non-Serializable histories, and the other rules out Serializable histories. Adya’s G1 captures the spirit of P1 in three general, precise phenomena: G1a (Aborted Read), G1b (Intermediate Read), and G1c (Cyclic Information Flow). Ruling out all three ensures Read Committed.