Re: SSI patch version 14
Jeff Davis <pgsql@j-davis.com>
From: Jeff Davis <pgsql@j-davis.com>
To: Dan Ports <drkp@csail.mit.edu>
Cc: Kevin Grittner <Kevin.Grittner@wicourts.gov>, pgsql-hackers@postgresql.org
Date: 2011-01-27T17:18:23Z
Lists: pgsql-hackers
On Tue, 2011-01-25 at 05:57 -0500, Dan Ports wrote: > This summary is right on. I would add one additional detail or > clarification to the last point, which is that rather than checking for > a cycle, we're checking for a transaction with both "in" and "out" > conflicts, which every cycle must contain. To clarify, this means that it will get some false positives, right? For instance: T1: get snapshot T2: get snapshot insert R1 commit T1: read R1 write R2 T3: get snapshot read R2 T3: commit T1: commit -- throws error T1 has a conflict out to T2, and T1 has a conflict in from T3. T2 has a conflict in from T1. T3 has a conflict out to T1. T1 is canceled because it has both a conflict in and a conflict out. But the results are the same as a serial order of execution: T3, T1, T2. Is there a reason we can't check for a real cycle, which would let T1 succeed? Regards, Jeff Davis