diff options
| author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2019-06-16 22:24:21 -0400 |
|---|---|---|
| committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2019-06-16 22:24:21 -0400 |
| commit | 9d20b0ec8f2af43041b1a65e5fcd91acc47e9ace (patch) | |
| tree | 19713e1f3369ac4f1b4d7f0097805fba404950c3 /src/test | |
| parent | 16c4e76f1b0a0145572551b7e919b967e406a0b1 (diff) | |
Revert "Avoid spurious deadlocks when upgrading a tuple lock"
This reverts commits 3da73d6839dc and de87a084c0a5.
This code has some tricky corner cases that I'm not sure are correct and
not properly tested anyway, so I'm reverting the whole thing for next
week's releases (reintroducing the deadlock bug that we set to fix).
I'll try again afterwards.
Discussion: https://postgr.es/m/E1hbXKQ-0003g1-0C@gemulon.postgresql.org
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out | 150 | ||||
| -rw-r--r-- | src/test/isolation/isolation_schedule | 1 | ||||
| -rw-r--r-- | src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec | 57 |
3 files changed, 0 insertions, 208 deletions
diff --git a/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out b/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out deleted file mode 100644 index 5148aa2c8d7..00000000000 --- a/src/test/isolation/expected/tuplelock-upgrade-no-deadlock.out +++ /dev/null @@ -1,150 +0,0 @@ -Parsed test spec with 3 sessions - -starting permutation: s1_share s2_for_update s3_share s3_for_update s1_rollback s3_rollback s2_rollback -step s1_share: select id from tlu_job where id = 1 for share; -id - -1 -step s2_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s3_share: select id from tlu_job where id = 1 for share; -id - -1 -step s3_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s1_rollback: rollback; -step s3_for_update: <... completed> -id - -1 -step s3_rollback: rollback; -step s2_for_update: <... completed> -id - -1 -step s2_rollback: rollback; - -starting permutation: s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_rollback s3_rollback s2_rollback -step s1_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s2_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s3_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s1_update: update tlu_job set name = 'b' where id = 1; -step s3_update: update tlu_job set name = 'c' where id = 1; <waiting ...> -step s1_rollback: rollback; -step s3_update: <... completed> -step s3_rollback: rollback; -step s2_for_update: <... completed> -id - -1 -step s2_rollback: rollback; - -starting permutation: s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_commit s3_rollback s2_rollback -step s1_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s2_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s3_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s1_update: update tlu_job set name = 'b' where id = 1; -step s3_update: update tlu_job set name = 'c' where id = 1; <waiting ...> -step s1_commit: commit; -step s3_update: <... completed> -step s3_rollback: rollback; -step s2_for_update: <... completed> -id - -1 -step s2_rollback: rollback; - -starting permutation: s1_keyshare s2_for_update s3_keyshare s3_delete s1_rollback s3_rollback s2_rollback -step s1_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s2_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s3_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s3_delete: delete from tlu_job where id = 1; <waiting ...> -step s1_rollback: rollback; -step s3_delete: <... completed> -step s3_rollback: rollback; -step s2_for_update: <... completed> -id - -1 -step s2_rollback: rollback; - -starting permutation: s1_keyshare s2_for_update s3_keyshare s3_delete s1_rollback s3_commit s2_rollback -step s1_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s2_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s3_keyshare: select id from tlu_job where id = 1 for key share; -id - -1 -step s3_delete: delete from tlu_job where id = 1; <waiting ...> -step s1_rollback: rollback; -step s3_delete: <... completed> -step s3_commit: commit; -step s2_for_update: <... completed> -id - -step s2_rollback: rollback; - -starting permutation: s1_share s2_for_update s3_for_update s1_rollback s2_rollback s3_rollback -step s1_share: select id from tlu_job where id = 1 for share; -id - -1 -step s2_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s3_for_update: select id from tlu_job where id = 1 for update; <waiting ...> -step s1_rollback: rollback; -step s2_for_update: <... completed> -id - -1 -step s2_rollback: rollback; -step s3_for_update: <... completed> -id - -1 -step s3_rollback: rollback; - -starting permutation: s1_share s2_update s3_update s1_rollback s2_rollback s3_rollback -step s1_share: select id from tlu_job where id = 1 for share; -id - -1 -step s2_update: update tlu_job set name = 'b' where id = 1; <waiting ...> -step s3_update: update tlu_job set name = 'c' where id = 1; <waiting ...> -step s1_rollback: rollback; -step s2_update: <... completed> -step s2_rollback: rollback; -step s3_update: <... completed> -step s3_rollback: rollback; - -starting permutation: s1_share s2_delete s3_delete s1_rollback s2_rollback s3_rollback -step s1_share: select id from tlu_job where id = 1 for share; -id - -1 -step s2_delete: delete from tlu_job where id = 1; <waiting ...> -step s3_delete: delete from tlu_job where id = 1; <waiting ...> -step s1_rollback: rollback; -step s2_delete: <... completed> -step s2_rollback: rollback; -step s3_delete: <... completed> -step s3_rollback: rollback; diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule index 74b50779e25..889b4d827a4 100644 --- a/src/test/isolation/isolation_schedule +++ b/src/test/isolation/isolation_schedule @@ -49,7 +49,6 @@ test: reindex-concurrently test: propagate-lock-delete test: tuplelock-conflict test: tuplelock-update -test: tuplelock-upgrade-no-deadlock test: freeze-the-dead test: nowait test: nowait-2 diff --git a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec b/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec deleted file mode 100644 index 431fd6f9f25..00000000000 --- a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec +++ /dev/null @@ -1,57 +0,0 @@ -# This test checks that multiple sessions locking a single row in a table -# do not deadlock each other when one of them upgrades its existing lock -# while the others are waiting for it. - -setup -{ - drop table if exists tlu_job; - create table tlu_job (id integer primary key, name text); - - insert into tlu_job values(1, 'a'); -} - - -teardown -{ - drop table tlu_job; -} - -session "s1" -setup { begin; } -step "s1_keyshare" { select id from tlu_job where id = 1 for key share;} -step "s1_share" { select id from tlu_job where id = 1 for share; } -step "s1_update" { update tlu_job set name = 'b' where id = 1; } -step "s1_delete" { delete from tlu_job where id = 1; } -step "s1_rollback" { rollback; } -step "s1_commit" { commit; } - -session "s2" -setup { begin; } -step "s2_for_update" { select id from tlu_job where id = 1 for update; } -step "s2_update" { update tlu_job set name = 'b' where id = 1; } -step "s2_delete" { delete from tlu_job where id = 1; } -step "s2_rollback" { rollback; } -step "s2_commit" { commit; } - -session "s3" -setup { begin; } -step "s3_keyshare" { select id from tlu_job where id = 1 for key share; } -step "s3_share" { select id from tlu_job where id = 1 for share; } -step "s3_for_update" { select id from tlu_job where id = 1 for update; } -step "s3_update" { update tlu_job set name = 'c' where id = 1; } -step "s3_delete" { delete from tlu_job where id = 1; } -step "s3_rollback" { rollback; } -step "s3_commit" { commit; } - -# test that s2 will not deadlock with s3 when s1 is rolled back -permutation "s1_share" "s2_for_update" "s3_share" "s3_for_update" "s1_rollback" "s3_rollback" "s2_rollback" -# test that update does not cause deadlocks if it can proceed -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s1_update" "s3_update" "s1_rollback" "s3_rollback" "s2_rollback" -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s1_update" "s3_update" "s1_commit" "s3_rollback" "s2_rollback" -# test that delete does not cause deadlocks if it can proceed -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s3_delete" "s1_rollback" "s3_rollback" "s2_rollback" -permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s3_delete" "s1_rollback" "s3_commit" "s2_rollback" -# test that sessions that don't upgrade locks acquire them in order -permutation "s1_share" "s2_for_update" "s3_for_update" "s1_rollback" "s2_rollback" "s3_rollback" -permutation "s1_share" "s2_update" "s3_update" "s1_rollback" "s2_rollback" "s3_rollback" -permutation "s1_share" "s2_delete" "s3_delete" "s1_rollback" "s2_rollback" "s3_rollback" |
