mirror of https://github.com/postgres/postgres
parent
d153b80161
commit
9ee16b49f0
@ -0,0 +1,43 @@ |
||||
Parsed test spec with 2 sessions |
||||
|
||||
starting permutation: s1a s2a s2b s1b s2c |
||||
step s1a: SELECT * FROM foo FOR SHARE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2a: SELECT * FROM foo FOR SHARE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2b: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s1b: COMMIT; |
||||
step s2c: COMMIT; |
||||
|
||||
starting permutation: s2a s1a s2b s1b s2c |
||||
step s2a: SELECT * FROM foo FOR SHARE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s1a: SELECT * FROM foo FOR SHARE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2b: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s1b: COMMIT; |
||||
step s2c: COMMIT; |
||||
|
||||
starting permutation: s2a s2b s1a s1b s2c |
||||
step s2a: SELECT * FROM foo FOR SHARE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2b: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s1a: SELECT * FROM foo FOR SHARE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s1b: COMMIT; |
||||
step s2c: COMMIT; |
@ -0,0 +1,17 @@ |
||||
Parsed test spec with 3 sessions |
||||
|
||||
starting permutation: s1a s2a s3a s1b s2b s3b |
||||
step s1a: SELECT * FROM foo FOR UPDATE; |
||||
id data |
||||
|
||||
1 x |
||||
step s2a: SELECT * FROM foo FOR UPDATE; <waiting ...> |
||||
step s3a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s1b: COMMIT; |
||||
step s2a: <... completed> |
||||
id data |
||||
|
||||
1 x |
||||
step s2b: COMMIT; |
||||
step s3b: COMMIT; |
@ -0,0 +1,65 @@ |
||||
Parsed test spec with 2 sessions |
||||
|
||||
starting permutation: s1a s1b s2a s2b |
||||
step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s1b: COMMIT; |
||||
step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2b: COMMIT; |
||||
|
||||
starting permutation: s1a s2a s1b s2b |
||||
step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s1b: COMMIT; |
||||
step s2b: COMMIT; |
||||
|
||||
starting permutation: s1a s2a s2b s1b |
||||
step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s2b: COMMIT; |
||||
step s1b: COMMIT; |
||||
|
||||
starting permutation: s2a s1a s1b s2b |
||||
step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s1b: COMMIT; |
||||
step s2b: COMMIT; |
||||
|
||||
starting permutation: s2a s1a s2b s1b |
||||
step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
ERROR: could not obtain lock on row in relation "foo" |
||||
step s2b: COMMIT; |
||||
step s1b: COMMIT; |
||||
|
||||
starting permutation: s2a s2b s1a s1b |
||||
step s2a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s2b: COMMIT; |
||||
step s1a: SELECT * FROM foo FOR UPDATE NOWAIT; |
||||
id data |
||||
|
||||
1 x |
||||
step s1b: COMMIT; |
@ -0,0 +1,37 @@ |
||||
# Test NOWAIT with multixact locks. |
||||
|
||||
setup |
||||
{ |
||||
CREATE TABLE foo ( |
||||
id int PRIMARY KEY, |
||||
data text NOT NULL |
||||
); |
||||
INSERT INTO foo VALUES (1, 'x'); |
||||
} |
||||
|
||||
teardown |
||||
{ |
||||
DROP TABLE foo; |
||||
} |
||||
|
||||
session "s1" |
||||
setup { BEGIN; } |
||||
step "s1a" { SELECT * FROM foo FOR SHARE NOWAIT; } |
||||
step "s1b" { COMMIT; } |
||||
|
||||
session "s2" |
||||
setup { BEGIN; } |
||||
step "s2a" { SELECT * FROM foo FOR SHARE NOWAIT; } |
||||
step "s2b" { SELECT * FROM foo FOR UPDATE NOWAIT; } |
||||
step "s2c" { COMMIT; } |
||||
|
||||
# s1 and s2 both get SHARE lock, creating a multixact lock, then s2 |
||||
# tries to upgrade to UPDATE but aborts because it cannot acquire a |
||||
# multi-xact lock |
||||
permutation "s1a" "s2a" "s2b" "s1b" "s2c" |
||||
# the same but with the SHARE locks acquired in a different order, so |
||||
# s2 again aborts because it can't acquired a multi-xact lock |
||||
permutation "s2a" "s1a" "s2b" "s1b" "s2c" |
||||
# s2 acquires SHARE then UPDATE, then s1 tries to acquire SHARE but |
||||
# can't so aborts because it can't acquire a regular lock |
||||
permutation "s2a" "s2b" "s1a" "s1b" "s2c" |
@ -0,0 +1,33 @@ |
||||
# Test NOWAIT with tuple locks. |
||||
|
||||
setup |
||||
{ |
||||
CREATE TABLE foo ( |
||||
id int PRIMARY KEY, |
||||
data text NOT NULL |
||||
); |
||||
INSERT INTO foo VALUES (1, 'x'); |
||||
} |
||||
|
||||
teardown |
||||
{ |
||||
DROP TABLE foo; |
||||
} |
||||
|
||||
session "s1" |
||||
setup { BEGIN; } |
||||
step "s1a" { SELECT * FROM foo FOR UPDATE; } |
||||
step "s1b" { COMMIT; } |
||||
|
||||
session "s2" |
||||
setup { BEGIN; } |
||||
step "s2a" { SELECT * FROM foo FOR UPDATE; } |
||||
step "s2b" { COMMIT; } |
||||
|
||||
session "s3" |
||||
setup { BEGIN; } |
||||
step "s3a" { SELECT * FROM foo FOR UPDATE NOWAIT; } |
||||
step "s3b" { COMMIT; } |
||||
|
||||
# s3 skips to second record due to tuple lock held by s2 |
||||
permutation "s1a" "s2a" "s3a" "s1b" "s2b" "s3b" |
@ -0,0 +1,25 @@ |
||||
# Test NOWAIT when regular row locks can't be acquired. |
||||
|
||||
setup |
||||
{ |
||||
CREATE TABLE foo ( |
||||
id int PRIMARY KEY, |
||||
data text NOT NULL |
||||
); |
||||
INSERT INTO foo VALUES (1, 'x'); |
||||
} |
||||
|
||||
teardown |
||||
{ |
||||
DROP TABLE foo; |
||||
} |
||||
|
||||
session "s1" |
||||
setup { BEGIN; } |
||||
step "s1a" { SELECT * FROM foo FOR UPDATE NOWAIT; } |
||||
step "s1b" { COMMIT; } |
||||
|
||||
session "s2" |
||||
setup { BEGIN; } |
||||
step "s2a" { SELECT * FROM foo FOR UPDATE NOWAIT; } |
||||
step "s2b" { COMMIT; } |
Loading…
Reference in new issue