File tree 7 files changed +223
-0
lines changed
7 files changed +223
-0
lines changed Original file line number Diff line number Diff line change
1
+ Parsed test spec with 2 sessions
2
+
3
+ starting permutation: s1a s2a s2b s1b s2c
4
+ step s1a: SELECT * FROM foo FOR SHARE NOWAIT;
5
+ id data
6
+
7
+ 1 x
8
+ step s2a: SELECT * FROM foo FOR SHARE NOWAIT;
9
+ id data
10
+
11
+ 1 x
12
+ step s2b: SELECT * FROM foo FOR UPDATE NOWAIT;
13
+ ERROR: could not obtain lock on row in relation "foo"
14
+ step s1b: COMMIT;
15
+ step s2c: COMMIT;
16
+
17
+ starting permutation: s2a s1a s2b s1b s2c
18
+ step s2a: SELECT * FROM foo FOR SHARE NOWAIT;
19
+ id data
20
+
21
+ 1 x
22
+ step s1a: SELECT * FROM foo FOR SHARE NOWAIT;
23
+ id data
24
+
25
+ 1 x
26
+ step s2b: SELECT * FROM foo FOR UPDATE NOWAIT;
27
+ ERROR: could not obtain lock on row in relation "foo"
28
+ step s1b: COMMIT;
29
+ step s2c: COMMIT;
30
+
31
+ starting permutation: s2a s2b s1a s1b s2c
32
+ step s2a: SELECT * FROM foo FOR SHARE NOWAIT;
33
+ id data
34
+
35
+ 1 x
36
+ step s2b: SELECT * FROM foo FOR UPDATE NOWAIT;
37
+ id data
38
+
39
+ 1 x
40
+ step s1a: SELECT * FROM foo FOR SHARE NOWAIT;
41
+ ERROR: could not obtain lock on row in relation "foo"
42
+ step s1b: COMMIT;
43
+ step s2c: COMMIT;
Original file line number Diff line number Diff line change
1
+ Parsed test spec with 3 sessions
2
+
3
+ starting permutation: s1a s2a s3a s1b s2b s3b
4
+ step s1a: SELECT * FROM foo FOR UPDATE;
5
+ id data
6
+
7
+ 1 x
8
+ step s2a: SELECT * FROM foo FOR UPDATE; <waiting ...>
9
+ step s3a: SELECT * FROM foo FOR UPDATE NOWAIT;
10
+ ERROR: could not obtain lock on row in relation "foo"
11
+ step s1b: COMMIT;
12
+ step s2a: <... completed>
13
+ id data
14
+
15
+ 1 x
16
+ step s2b: COMMIT;
17
+ step s3b: COMMIT;
Original file line number Diff line number Diff line change
1
+ Parsed test spec with 2 sessions
2
+
3
+ starting permutation: s1a s1b s2a s2b
4
+ step s1a: SELECT * FROM foo FOR UPDATE NOWAIT;
5
+ id data
6
+
7
+ 1 x
8
+ step s1b: COMMIT;
9
+ step s2a: SELECT * FROM foo FOR UPDATE NOWAIT;
10
+ id data
11
+
12
+ 1 x
13
+ step s2b: COMMIT;
14
+
15
+ starting permutation: s1a s2a s1b s2b
16
+ step s1a: SELECT * FROM foo FOR UPDATE NOWAIT;
17
+ id data
18
+
19
+ 1 x
20
+ step s2a: SELECT * FROM foo FOR UPDATE NOWAIT;
21
+ ERROR: could not obtain lock on row in relation "foo"
22
+ step s1b: COMMIT;
23
+ step s2b: COMMIT;
24
+
25
+ starting permutation: s1a s2a s2b s1b
26
+ step s1a: SELECT * FROM foo FOR UPDATE NOWAIT;
27
+ id data
28
+
29
+ 1 x
30
+ step s2a: SELECT * FROM foo FOR UPDATE NOWAIT;
31
+ ERROR: could not obtain lock on row in relation "foo"
32
+ step s2b: COMMIT;
33
+ step s1b: COMMIT;
34
+
35
+ starting permutation: s2a s1a s1b s2b
36
+ step s2a: SELECT * FROM foo FOR UPDATE NOWAIT;
37
+ id data
38
+
39
+ 1 x
40
+ step s1a: SELECT * FROM foo FOR UPDATE NOWAIT;
41
+ ERROR: could not obtain lock on row in relation "foo"
42
+ step s1b: COMMIT;
43
+ step s2b: COMMIT;
44
+
45
+ starting permutation: s2a s1a s2b s1b
46
+ step s2a: SELECT * FROM foo FOR UPDATE NOWAIT;
47
+ id data
48
+
49
+ 1 x
50
+ step s1a: SELECT * FROM foo FOR UPDATE NOWAIT;
51
+ ERROR: could not obtain lock on row in relation "foo"
52
+ step s2b: COMMIT;
53
+ step s1b: COMMIT;
54
+
55
+ starting permutation: s2a s2b s1a s1b
56
+ step s2a: SELECT * FROM foo FOR UPDATE NOWAIT;
57
+ id data
58
+
59
+ 1 x
60
+ step s2b: COMMIT;
61
+ step s1a: SELECT * FROM foo FOR UPDATE NOWAIT;
62
+ id data
63
+
64
+ 1 x
65
+ step s1b: COMMIT;
Original file line number Diff line number Diff line change @@ -25,3 +25,6 @@ test: propagate-lock-delete
25
25
test: drop-index-concurrently-1
26
26
test: alter-table-1
27
27
test: timeouts
28
+ test: nowait
29
+ test: nowait-2
30
+ test: nowait-3
Original file line number Diff line number Diff line change
1
+ # Test NOWAIT with multixact locks.
2
+
3
+ setup
4
+ {
5
+ CREATE TABLE foo (
6
+ id int PRIMARY KEY ,
7
+ data text NOT NULL
8
+ ) ;
9
+ INSERT INTO foo VALUES ( 1 , 'x' ) ;
10
+ }
11
+
12
+ teardown
13
+ {
14
+ DROP TABLE foo ;
15
+ }
16
+
17
+ session "s1"
18
+ setup { BEGIN; }
19
+ step "s1a" { SELECT * FROM foo FOR SHARE NOWAIT ; }
20
+ step "s1b " { COMMIT ; }
21
+
22
+ session "s2 "
23
+ setup { BEGIN; }
24
+ step "s2a " { SELECT * FROM foo FOR SHARE NOWAIT ; }
25
+ step "s2b " { SELECT * FROM foo FOR UPDATE NOWAIT ; }
26
+ step "s2c " { COMMIT ; }
27
+
28
+ # s1 and s2 both get SHARE lock, creating a multixact lock, then s2
29
+ # tries to upgrade to UPDATE but aborts because it cannot acquire a
30
+ # multi-xact lock
31
+ permutation "s1a " "s2a " "s2b " "s1b " "s2c "
32
+ # the same but with the SHARE locks acquired in a different order, so
33
+ # s2 again aborts because it can't acquired a multi-xact lock
34
+ permutation "s2a " "s1a " "s2b " "s1b " "s2c "
35
+ # s2 acquires SHARE then UPDATE, then s1 tries to acquire SHARE but
36
+ # can't so aborts because it can't acquire a regular lock
37
+ permutation "s2a " "s2b " "s1a " "s1b " "s2c "
Original file line number Diff line number Diff line change
1
+ # Test NOWAIT with tuple locks.
2
+
3
+ setup
4
+ {
5
+ CREATE TABLE foo (
6
+ id int PRIMARY KEY ,
7
+ data text NOT NULL
8
+ );
9
+ INSERT INTO foo VALUES (1 , 'x' );
10
+ }
11
+
12
+ teardown
13
+ {
14
+ DROP TABLE foo ;
15
+ }
16
+
17
+ session "s1"
18
+ setup { BEGIN ; }
19
+ step "s1a" { SELECT * FROM foo FOR UPDATE ; }
20
+ step "s1b" { COMMIT ; }
21
+
22
+ session "s2"
23
+ setup { BEGIN ; }
24
+ step "s2a" { SELECT * FROM foo FOR UPDATE ; }
25
+ step "s2b" { COMMIT ; }
26
+
27
+ session "s3"
28
+ setup { BEGIN ; }
29
+ step "s3a" { SELECT * FROM foo FOR UPDATE NOWAIT ; }
30
+ step "s3b" { COMMIT ; }
31
+
32
+ # s3 skips to second record due to tuple lock held by s2
33
+ permutation "s1a" "s2a" "s3a" "s1b" "s2b" "s3b"
Original file line number Diff line number Diff line change
1
+ # Test NOWAIT when regular row locks can't be acquired.
2
+
3
+ setup
4
+ {
5
+ CREATE TABLE foo (
6
+ id int PRIMARY KEY ,
7
+ data text NOT NULL
8
+ );
9
+ INSERT INTO foo VALUES (1 , 'x' );
10
+ }
11
+
12
+ teardown
13
+ {
14
+ DROP TABLE foo ;
15
+ }
16
+
17
+ session "s1"
18
+ setup { BEGIN ; }
19
+ step "s1a" { SELECT * FROM foo FOR UPDATE NOWAIT ; }
20
+ step "s1b" { COMMIT ; }
21
+
22
+ session "s2"
23
+ setup { BEGIN ; }
24
+ step "s2a" { SELECT * FROM foo FOR UPDATE NOWAIT ; }
25
+ step "s2b" { COMMIT ; }
You can’t perform that action at this time.
0 commit comments