Skip to content

Commit 90247e7

Browse files
committed
Add a regression test for contrib/pgrowlocks.
Dong Wook Lee, revised a bit by me Discussion: https://postgr.es/m/20220629055326.tdswmcjcr5jzbrsk@home-desktop
1 parent e548455 commit 90247e7

File tree

4 files changed

+281
-0
lines changed

4 files changed

+281
-0
lines changed

contrib/pgrowlocks/.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Generated subdirectories
2+
/log/
3+
/results/
4+
/output_iso/
5+
/tmp_check/
6+
/tmp_check_iso/

contrib/pgrowlocks/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ EXTENSION = pgrowlocks
99
DATA = pgrowlocks--1.2.sql pgrowlocks--1.1--1.2.sql pgrowlocks--1.0--1.1.sql
1010
PGFILEDESC = "pgrowlocks - display row locking information"
1111

12+
ISOLATION = pgrowlocks
13+
ISOLATION_OPTS = --load-extension=pgrowlocks
14+
1215
ifdef USE_PGXS
1316
PG_CONFIG = pg_config
1417
PGXS := $(shell $(PG_CONFIG) --pgxs)
Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,233 @@
1+
Parsed test spec with 2 sessions
2+
3+
starting permutation: s1_begin s1_tuplock1 s2_rowlocks s1_commit
4+
step s1_begin: BEGIN;
5+
step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE;
6+
a|b
7+
-+-
8+
1|2
9+
3|4
10+
(2 rows)
11+
12+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
13+
locked_row|multi|modes
14+
----------+-----+-----------------
15+
(0,1) |f |{"For Key Share"}
16+
(0,2) |f |{"For Key Share"}
17+
(2 rows)
18+
19+
step s1_commit: COMMIT;
20+
21+
starting permutation: s1_begin s1_tuplock2 s2_rowlocks s1_commit
22+
step s1_begin: BEGIN;
23+
step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE;
24+
a|b
25+
-+-
26+
1|2
27+
3|4
28+
(2 rows)
29+
30+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
31+
locked_row|multi|modes
32+
----------+-----+-------------
33+
(0,1) |f |{"For Share"}
34+
(0,2) |f |{"For Share"}
35+
(2 rows)
36+
37+
step s1_commit: COMMIT;
38+
39+
starting permutation: s1_begin s1_tuplock3 s2_rowlocks s1_commit
40+
step s1_begin: BEGIN;
41+
step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE;
42+
a|b
43+
-+-
44+
1|2
45+
3|4
46+
(2 rows)
47+
48+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
49+
locked_row|multi|modes
50+
----------+-----+---------------------
51+
(0,1) |f |{"For No Key Update"}
52+
(0,2) |f |{"For No Key Update"}
53+
(2 rows)
54+
55+
step s1_commit: COMMIT;
56+
57+
starting permutation: s1_begin s1_tuplock4 s2_rowlocks s1_commit
58+
step s1_begin: BEGIN;
59+
step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE;
60+
a|b
61+
-+-
62+
1|2
63+
3|4
64+
(2 rows)
65+
66+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
67+
locked_row|multi|modes
68+
----------+-----+--------------
69+
(0,1) |f |{"For Update"}
70+
(0,2) |f |{"For Update"}
71+
(2 rows)
72+
73+
step s1_commit: COMMIT;
74+
75+
starting permutation: s1_begin s1_updatea s2_rowlocks s1_commit
76+
step s1_begin: BEGIN;
77+
step s1_updatea: UPDATE multixact_conflict SET a = 10 WHERE a = 1;
78+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
79+
locked_row|multi|modes
80+
----------+-----+--------
81+
(0,1) |f |{Update}
82+
(1 row)
83+
84+
step s1_commit: COMMIT;
85+
86+
starting permutation: s1_begin s1_updateb s2_rowlocks s1_commit
87+
step s1_begin: BEGIN;
88+
step s1_updateb: UPDATE multixact_conflict SET b = 11 WHERE b = 4;
89+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
90+
locked_row|multi|modes
91+
----------+-----+-----------------
92+
(0,2) |f |{"No Key Update"}
93+
(1 row)
94+
95+
step s1_commit: COMMIT;
96+
97+
starting permutation: s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit
98+
step s1_begin: BEGIN;
99+
step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s;
100+
a|b
101+
-+-
102+
1|2
103+
3|4
104+
(2 rows)
105+
106+
step s1_tuplock1: SELECT * FROM multixact_conflict FOR KEY SHARE;
107+
a|b
108+
-+-
109+
1|2
110+
3|4
111+
(2 rows)
112+
113+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
114+
locked_row|multi|modes
115+
----------+-----+-----------------
116+
(0,1) |f |{"For Key Share"}
117+
(0,2) |f |{"For Key Share"}
118+
(2 rows)
119+
120+
step s1_commit: COMMIT;
121+
122+
starting permutation: s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit
123+
step s1_begin: BEGIN;
124+
step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s;
125+
a|b
126+
-+-
127+
1|2
128+
3|4
129+
(2 rows)
130+
131+
step s1_tuplock2: SELECT * FROM multixact_conflict FOR SHARE;
132+
a|b
133+
-+-
134+
1|2
135+
3|4
136+
(2 rows)
137+
138+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
139+
locked_row|multi|modes
140+
----------+-----+-------------------
141+
(0,1) |t |{"Key Share",Share}
142+
(0,2) |t |{"Key Share",Share}
143+
(2 rows)
144+
145+
step s1_commit: COMMIT;
146+
147+
starting permutation: s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit
148+
step s1_begin: BEGIN;
149+
step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s;
150+
a|b
151+
-+-
152+
1|2
153+
3|4
154+
(2 rows)
155+
156+
step s1_tuplock3: SELECT * FROM multixact_conflict FOR NO KEY UPDATE;
157+
a|b
158+
-+-
159+
1|2
160+
3|4
161+
(2 rows)
162+
163+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
164+
locked_row|multi|modes
165+
----------+-----+---------------------------------
166+
(0,1) |t |{"Key Share","For No Key Update"}
167+
(0,2) |t |{"Key Share","For No Key Update"}
168+
(2 rows)
169+
170+
step s1_commit: COMMIT;
171+
172+
starting permutation: s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit
173+
step s1_begin: BEGIN;
174+
step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s;
175+
a|b
176+
-+-
177+
1|2
178+
3|4
179+
(2 rows)
180+
181+
step s1_tuplock4: SELECT * FROM multixact_conflict FOR UPDATE;
182+
a|b
183+
-+-
184+
1|2
185+
3|4
186+
(2 rows)
187+
188+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
189+
locked_row|multi|modes
190+
----------+-----+--------------------------
191+
(0,1) |t |{"Key Share","For Update"}
192+
(0,2) |t |{"Key Share","For Update"}
193+
(2 rows)
194+
195+
step s1_commit: COMMIT;
196+
197+
starting permutation: s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit
198+
step s1_begin: BEGIN;
199+
step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s;
200+
a|b
201+
-+-
202+
1|2
203+
3|4
204+
(2 rows)
205+
206+
step s1_updatea: UPDATE multixact_conflict SET a = 10 WHERE a = 1;
207+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
208+
locked_row|multi|modes
209+
----------+-----+--------------------
210+
(0,1) |t |{"Key Share",Update}
211+
(0,2) |f |{"For Key Share"}
212+
(2 rows)
213+
214+
step s1_commit: COMMIT;
215+
216+
starting permutation: s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit
217+
step s1_begin: BEGIN;
218+
step s1_lcksvpt: SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s;
219+
a|b
220+
-+-
221+
1|2
222+
3|4
223+
(2 rows)
224+
225+
step s1_updateb: UPDATE multixact_conflict SET b = 11 WHERE b = 4;
226+
step s2_rowlocks: SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict');
227+
locked_row|multi|modes
228+
----------+-----+-----------------------------
229+
(0,1) |f |{"For Key Share"}
230+
(0,2) |t |{"Key Share","No Key Update"}
231+
(2 rows)
232+
233+
step s1_commit: COMMIT;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Tests for contrib/pgrowlocks
2+
3+
setup {
4+
CREATE TABLE multixact_conflict (a int PRIMARY KEY, b int);
5+
INSERT INTO multixact_conflict VALUES (1, 2), (3, 4);
6+
}
7+
8+
teardown {
9+
DROP TABLE multixact_conflict;
10+
}
11+
12+
session s1
13+
step s1_begin { BEGIN; }
14+
step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; }
15+
step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; }
16+
step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
17+
step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; }
18+
step s1_updatea { UPDATE multixact_conflict SET a = 10 WHERE a = 1; }
19+
step s1_updateb { UPDATE multixact_conflict SET b = 11 WHERE b = 4; }
20+
step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT s; }
21+
step s1_commit { COMMIT; }
22+
23+
session s2
24+
step s2_rowlocks { SELECT locked_row, multi, modes FROM pgrowlocks('multixact_conflict'); }
25+
26+
permutation s1_begin s1_tuplock1 s2_rowlocks s1_commit
27+
permutation s1_begin s1_tuplock2 s2_rowlocks s1_commit
28+
permutation s1_begin s1_tuplock3 s2_rowlocks s1_commit
29+
permutation s1_begin s1_tuplock4 s2_rowlocks s1_commit
30+
permutation s1_begin s1_updatea s2_rowlocks s1_commit
31+
permutation s1_begin s1_updateb s2_rowlocks s1_commit
32+
33+
# test multixact cases using savepoints
34+
permutation s1_begin s1_lcksvpt s1_tuplock1 s2_rowlocks s1_commit
35+
permutation s1_begin s1_lcksvpt s1_tuplock2 s2_rowlocks s1_commit
36+
permutation s1_begin s1_lcksvpt s1_tuplock3 s2_rowlocks s1_commit
37+
permutation s1_begin s1_lcksvpt s1_tuplock4 s2_rowlocks s1_commit
38+
permutation s1_begin s1_lcksvpt s1_updatea s2_rowlocks s1_commit
39+
permutation s1_begin s1_lcksvpt s1_updateb s2_rowlocks s1_commit

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy