mirror of
https://github.com/postgres/postgres.git
synced 2025-10-18 04:29:09 +03:00
Make new isolationtester test more stable
The original coding of the test was relying too much on the ordering in which backends are awakened once an advisory lock which they wait for is released. Change the code so that each backend uses its own advisory lock instead, so that the output becomes stable. Also add a few seconds of sleep between lock releases, so that the test isn't broken in overloaded buildfarm animals, as suggested by Tom Lane. Per buildfarm members spoonbill and guaibasaurus. Discussion: https://www.postgresql.org/message-id/19294.1456551587%40sss.pgh.pa.us
This commit is contained in:
@@ -9,20 +9,26 @@ teardown {
|
||||
}
|
||||
|
||||
session "s1"
|
||||
step "s1_advlock" { SELECT pg_advisory_lock(142857); }
|
||||
step "s1_advlock" {
|
||||
SELECT pg_advisory_lock(142857),
|
||||
pg_advisory_lock(285714),
|
||||
pg_advisory_lock(571428);
|
||||
}
|
||||
step "s1_chain" { UPDATE pktab SET data = DEFAULT; }
|
||||
step "s1_begin" { BEGIN; }
|
||||
step "s1_grablock" { SELECT * FROM pktab FOR KEY SHARE; }
|
||||
step "s1_advunlock" { SELECT pg_advisory_unlock(142857); }
|
||||
step "s1_advunlock1" { SELECT pg_advisory_unlock(142857); }
|
||||
step "s1_advunlock2" { SELECT pg_sleep(5), pg_advisory_unlock(285714); }
|
||||
step "s1_advunlock3" { SELECT pg_sleep(5), pg_advisory_unlock(571428); }
|
||||
step "s1_commit" { COMMIT; }
|
||||
|
||||
session "s2"
|
||||
step "s2_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; }
|
||||
|
||||
session "s3"
|
||||
step "s3_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; }
|
||||
step "s3_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(285714) IS NOT NULL; }
|
||||
|
||||
session "s4"
|
||||
step "s4_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; }
|
||||
step "s4_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; }
|
||||
|
||||
permutation "s1_advlock" "s2_update" "s3_update" "s4_update" "s1_chain" "s1_begin" "s1_grablock" "s1_advunlock" "s1_commit"
|
||||
permutation "s1_advlock" "s2_update" "s3_update" "s4_update" "s1_chain" "s1_begin" "s1_grablock" "s1_advunlock1" "s1_advunlock2" "s1_advunlock3" "s1_commit"
|
||||
|
Reference in New Issue
Block a user