From: | Peter Geoghegan <pg(at)bowt(dot)ie> |
---|---|
To: | Kyle Kingsbury <aphyr(at)jepsen(dot)io> |
Cc: | PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Potential G2-item cycles under serializable isolation |
Date: | 2020-06-08 02:54:21 |
Message-ID: | CAH2-Wzk+FHVJvSS9VPPJ_K9w4xwqeVyfnkzYWtWrBzXJSJcMVQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Sat, Jun 6, 2020 at 3:24 PM Peter Geoghegan <pg(at)bowt(dot)ie> wrote:
> Here is a restatement of the same anomaly with RR event number
> annotations, to make it easy for other people to match up each
> observation/modification to a query from the log file I made available
> yesterday:
Attached is a tentative bug fix. With this applied, I cannot get
Jepsen/Elle to complain about a G2-Item anymore, nor any other
anomaly, even after a dozen or so attempts. The regression tests pass,
too.
The issue seems to be that heapam's mechanism for adding a "conflict
out" can get some details subtly wrong. This can happen in the event
of a concurrently updated tuple where the updating xact aborts. So for
each pair of transactions that committed in each G2-Item, there seemed
to be a third updating transaction that aborted, messing things up. I
think that the "conflict out" stuff ought to behave as if an updated
tuple was never updated when it's not visible to our xact anyway. We
should use the XID that created the original tuple for "conflict out"
purposes -- not the (possibly aborted) updater's XID (i.e. not the
HeapTupleHeaderGetUpdateXid() XID).
In the example RR log that I posted the other day, the update + abort
transaction was here (jepsen process 39/xid 1680826):
[rr 316505 584863]
1591388175.991-316505-7/407-1680826-SELECT-5edaa7f9.4d459-jepsen
process 39 LOG: execute <unnamed>: select (val) from txn0 where id =
$1
1591388175.991-316505-7/407-1680826-SELECT-5edaa7f9.4d459-jepsen
process 39 DETAIL: parameters: $1 = '1470'
[rr 316505 584881]
1591388175.992-316505-7/0-1680826-ROLLBACK-5edaa7f9.4d459-jepsen
process 39 LOG: execute <unnamed>: ROLLBACK
Kyle: Shouldn't be too hard to build Postgres from source if you want
to test it yourself. Either way, thanks for the report!
--
Peter Geoghegan
Attachment | Content-Type | Size |
---|---|---|
0001-Fix-HeapCheckForSerializableConflictOut-bug.patch | application/octet-stream | 1.1 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Geoghegan | 2020-06-08 02:59:09 | Re: Potential G2-item cycles under serializable isolation |
Previous Message | David G. Johnston | 2020-06-07 06:17:18 | Re: BUG #16483: pg_ctl -D $PREFIX/var/lib/postgresql start |