test(db): lock probes read only their own database's locks
pg_locks is the whole server's: under the parallel lane a worker's own advisory claim on the same playlist id, or its own lock wait, was counted by another worker's probe (a leak reported where there was none, a commit made before the second tab blocked).
This commit is contained in:
@@ -1105,10 +1105,16 @@ def test_two_overlapping_reorders_never_share_a_slot(db, as_user):
|
||||
|
||||
worker = threading.Thread(target=second_tab)
|
||||
worker.start()
|
||||
# Commit A only once B is blocked on a row lock, so B's read is the stale snapshot.
|
||||
# Commit A only once B is blocked on a row lock, so B's read is the stale snapshot. pg_locks is
|
||||
# the whole server's: only a wait in this database is B's (a parallel worker's is not).
|
||||
waiting = 0
|
||||
for _ in range(200):
|
||||
waiting = probe.scalar(text("SELECT count(*) FROM pg_locks WHERE NOT granted"))
|
||||
waiting = probe.scalar(
|
||||
text(
|
||||
"SELECT count(*) FROM pg_locks WHERE NOT granted AND pid IN"
|
||||
" (SELECT pid FROM pg_stat_activity WHERE datname = current_database())"
|
||||
)
|
||||
)
|
||||
probe.rollback()
|
||||
if waiting:
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user