Skip to content

Commit e4e940c

Browse files
author
Nikita Glukhov
committed
Add isolation tests for jsonbc
1 parent 17ea8ff commit e4e940c

File tree

3 files changed

+391
-0
lines changed

3 files changed

+391
-0
lines changed
Lines changed: 334 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,334 @@
1+
Parsed test spec with 2 sessions
2+
3+
starting permutation: s1rc s2rc s1ia s2ia s1sd s1sf s2sd s2sf s1ci s2ci s1sd s1sf
4+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
5+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
6+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
7+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
8+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
9+
id name
10+
11+
1 a
12+
step s1sf: SELECT * FROM foo;
13+
bar
14+
15+
{"a": 1}
16+
step s2sd: SELECT id, name FROM pg_jsonbc_dict;
17+
id name
18+
19+
1 a
20+
step s2sf: SELECT * FROM foo;
21+
bar
22+
23+
{"a": 2}
24+
step s1ci: COMMIT;
25+
step s2ci: COMMIT;
26+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
27+
id name
28+
29+
1 a
30+
step s1sf: SELECT * FROM foo;
31+
bar
32+
33+
{"a": 1}
34+
{"a": 2}
35+
36+
starting permutation: s1rc s2rc s1ia s2ia s1ci s2rb s1sd s1sf
37+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
38+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
39+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
40+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
41+
step s1ci: COMMIT;
42+
step s2rb: ROLLBACK;
43+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
44+
id name
45+
46+
1 a
47+
step s1sf: SELECT * FROM foo;
48+
bar
49+
50+
{"a": 1}
51+
52+
starting permutation: s1rc s2rc s1ia s2ia s1rb s2ci s1sd s1sf
53+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
54+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
55+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
56+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
57+
step s1rb: ROLLBACK;
58+
step s2ci: COMMIT;
59+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
60+
id name
61+
62+
1 a
63+
step s1sf: SELECT * FROM foo;
64+
bar
65+
66+
{"a": 2}
67+
68+
starting permutation: s1rc s2rc s1ia s2ia s1rb s2rb s1sd s1sf
69+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
70+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
71+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
72+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
73+
step s1rb: ROLLBACK;
74+
step s2rb: ROLLBACK;
75+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
76+
id name
77+
78+
1 a
79+
step s1sf: SELECT * FROM foo;
80+
bar
81+
82+
83+
starting permutation: s1rc s2rc s1ia s2ia s2ci s1ci s1sd s1sf
84+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
85+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
86+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
87+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
88+
step s2ci: COMMIT;
89+
step s1ci: COMMIT;
90+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
91+
id name
92+
93+
1 a
94+
step s1sf: SELECT * FROM foo;
95+
bar
96+
97+
{"a": 1}
98+
{"a": 2}
99+
100+
starting permutation: s1rc s2rc s1ia s2ia s2ci s1rb s1sd s1sf
101+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
102+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
103+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
104+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
105+
step s2ci: COMMIT;
106+
step s1rb: ROLLBACK;
107+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
108+
id name
109+
110+
1 a
111+
step s1sf: SELECT * FROM foo;
112+
bar
113+
114+
{"a": 2}
115+
116+
starting permutation: s1rc s2rc s1ia s2ia s2rb s1ci s1sd s1sf
117+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
118+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
119+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
120+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
121+
step s2rb: ROLLBACK;
122+
step s1ci: COMMIT;
123+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
124+
id name
125+
126+
1 a
127+
step s1sf: SELECT * FROM foo;
128+
bar
129+
130+
{"a": 1}
131+
132+
starting permutation: s1rc s2rc s1ia s2ia s2rb s1rb s1sd s1sf
133+
step s1rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
134+
step s2rc: SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
135+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
136+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
137+
step s2rb: ROLLBACK;
138+
step s1rb: ROLLBACK;
139+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
140+
id name
141+
142+
1 a
143+
step s1sf: SELECT * FROM foo;
144+
bar
145+
146+
147+
starting permutation: s1sr s2sr s1ia s2ia s1sd s1sf s1ci s2ci s1sd s1sf
148+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
149+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
150+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
151+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
152+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
153+
id name
154+
155+
step s1sf: SELECT * FROM foo;
156+
bar
157+
158+
{"a": 1}
159+
step s1ci: COMMIT;
160+
step s2ci: COMMIT;
161+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
162+
id name
163+
164+
1 a
165+
step s1sf: SELECT * FROM foo;
166+
bar
167+
168+
{"a": 1}
169+
{"a": 2}
170+
171+
starting permutation: s1sr s2sr s1ia s2ia s1ci s2rb s1sd s1sf
172+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
173+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
174+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
175+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
176+
step s1ci: COMMIT;
177+
step s2rb: ROLLBACK;
178+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
179+
id name
180+
181+
1 a
182+
step s1sf: SELECT * FROM foo;
183+
bar
184+
185+
{"a": 1}
186+
187+
starting permutation: s1sr s2sr s1ia s2ia s1rb s2ci s1sd s1sf
188+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
189+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
190+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
191+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
192+
step s1rb: ROLLBACK;
193+
step s2ci: COMMIT;
194+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
195+
id name
196+
197+
1 a
198+
step s1sf: SELECT * FROM foo;
199+
bar
200+
201+
{"a": 2}
202+
203+
starting permutation: s1sr s2sr s1ia s2ia s1rb s2rb s1sd s1sf
204+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
205+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
206+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
207+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
208+
step s1rb: ROLLBACK;
209+
step s2rb: ROLLBACK;
210+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
211+
id name
212+
213+
1 a
214+
step s1sf: SELECT * FROM foo;
215+
bar
216+
217+
218+
starting permutation: s1sr s2sr s1ia s2ia s2ci s1ci s1sd s1sf
219+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
220+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
221+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
222+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
223+
step s2ci: COMMIT;
224+
step s1ci: COMMIT;
225+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
226+
id name
227+
228+
1 a
229+
step s1sf: SELECT * FROM foo;
230+
bar
231+
232+
{"a": 1}
233+
{"a": 2}
234+
235+
starting permutation: s1sr s2sr s1ia s2ia s2ci s1rb s1sd s1sf
236+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
237+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
238+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
239+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
240+
step s2ci: COMMIT;
241+
step s1rb: ROLLBACK;
242+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
243+
id name
244+
245+
1 a
246+
step s1sf: SELECT * FROM foo;
247+
bar
248+
249+
{"a": 2}
250+
251+
starting permutation: s1sr s2sr s1ia s2ia s2rb s1ci s1sd s1sf
252+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
253+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
254+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
255+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
256+
step s2rb: ROLLBACK;
257+
step s1ci: COMMIT;
258+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
259+
id name
260+
261+
1 a
262+
step s1sf: SELECT * FROM foo;
263+
bar
264+
265+
{"a": 1}
266+
267+
starting permutation: s1sr s2sr s1ia s2ia s2rb s1rb s1sd s1sf
268+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
269+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
270+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
271+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
272+
step s2rb: ROLLBACK;
273+
step s1rb: ROLLBACK;
274+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
275+
id name
276+
277+
1 a
278+
step s1sf: SELECT * FROM foo;
279+
bar
280+
281+
282+
starting permutation: s1sr s2sr s1ia s1ia s1ib s1ic s2ib s2ia s2ib s1ci s2ci s1sd s1sf
283+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
284+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
285+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
286+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
287+
step s1ib: INSERT INTO foo VALUES (jsonb_build_object('b', 1));
288+
step s1ic: INSERT INTO foo VALUES (jsonb_build_object('a', 1, 'b', 1, 'c', jsonb_build_object('a', 1)));
289+
step s2ib: INSERT INTO foo VALUES (jsonb_build_object('b', 2));
290+
step s2ia: INSERT INTO foo VALUES (jsonb_build_object('a', 2));
291+
step s2ib: INSERT INTO foo VALUES (jsonb_build_object('b', 2));
292+
step s1ci: COMMIT;
293+
step s2ci: COMMIT;
294+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
295+
id name
296+
297+
1 a
298+
2 b
299+
3 c
300+
step s1sf: SELECT * FROM foo;
301+
bar
302+
303+
{"a": 1}
304+
{"a": 1}
305+
{"b": 1}
306+
{"a": 1, "b": 1, "c": {"a": 1}}
307+
{"b": 2}
308+
{"a": 2}
309+
{"b": 2}
310+
311+
starting permutation: s1sr s2sr s1ic s1ic s1ia s2ic s2ib s1ci s2ci s1sd s1sf
312+
step s1sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
313+
step s2sr: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
314+
step s1ic: INSERT INTO foo VALUES (jsonb_build_object('a', 1, 'b', 1, 'c', jsonb_build_object('a', 1)));
315+
step s1ic: INSERT INTO foo VALUES (jsonb_build_object('a', 1, 'b', 1, 'c', jsonb_build_object('a', 1)));
316+
step s1ia: INSERT INTO foo VALUES (jsonb_build_object('a', 1));
317+
step s2ic: INSERT INTO foo VALUES (jsonb_build_object('a', 2, 'b', 2, 'c', jsonb_build_object('a', 2)));
318+
step s2ib: INSERT INTO foo VALUES (jsonb_build_object('b', 2));
319+
step s1ci: COMMIT;
320+
step s2ci: COMMIT;
321+
step s1sd: SELECT id, name FROM pg_jsonbc_dict;
322+
id name
323+
324+
1 a
325+
2 b
326+
3 c
327+
step s1sf: SELECT * FROM foo;
328+
bar
329+
330+
{"a": 1, "b": 1, "c": {"a": 1}}
331+
{"a": 1, "b": 1, "c": {"a": 1}}
332+
{"a": 1}
333+
{"a": 2, "b": 2, "c": {"a": 2}}
334+
{"b": 2}

src/test/isolation/isolation_schedule

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,4 @@ test: create-trigger
6161
test: async-notify
6262
test: vacuum-reltuples
6363
test: timeouts
64+
test: jsonbc

src/test/isolation/specs/jsonbc.spec

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
setup
2+
{
3+
CREATE TABLE foo (
4+
bar jsonb compressed jsonbc
5+
);
6+
}
7+
8+
teardown
9+
{
10+
DROP TABLE foo;
11+
}
12+
13+
session "s1"
14+
setup { BEGIN; SET deadlock_timeout = '100ms'; }
15+
step "s1rc" { SET TRANSACTION ISOLATION LEVEL READ COMMITTED; }
16+
step "s1sr" { SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; }
17+
step "s1ia" { INSERT INTO foo VALUES (jsonb_build_object('a', 1)); }
18+
step "s1ib" { INSERT INTO foo VALUES (jsonb_build_object('b', 1)); }
19+
step "s1ic" { INSERT INTO foo VALUES (jsonb_build_object('a', 1, 'b', 1, 'c', jsonb_build_object('a', 1))); }
20+
step "s1sf" { SELECT * FROM foo; }
21+
step "s1sd" { SELECT id, name FROM pg_jsonbc_dict; }
22+
step "s1ci" { COMMIT; }
23+
step "s1rb" { ROLLBACK; }
24+
25+
session "s2"
26+
setup { BEGIN; SET deadlock_timeout = '100ms'; }
27+
step "s2rc" { SET TRANSACTION ISOLATION LEVEL READ COMMITTED; }
28+
step "s2sr" { SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; }
29+
step "s2ia" { INSERT INTO foo VALUES (jsonb_build_object('a', 2)); }
30+
step "s2ib" { INSERT INTO foo VALUES (jsonb_build_object('b', 2)); }
31+
step "s2ic" { INSERT INTO foo VALUES (jsonb_build_object('a', 2, 'b', 2, 'c', jsonb_build_object('a', 2))); }
32+
step "s2sf" { SELECT * FROM foo; }
33+
step "s2sd" { SELECT id, name FROM pg_jsonbc_dict; }
34+
step "s2ci" { COMMIT; }
35+
step "s2rb" { ROLLBACK; }
36+
37+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s1sd" "s1sf" "s2sd" "s2sf" "s1ci" "s2ci" "s1sd" "s1sf"
38+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s1ci" "s2rb" "s1sd" "s1sf"
39+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s1rb" "s2ci" "s1sd" "s1sf"
40+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s1rb" "s2rb" "s1sd" "s1sf"
41+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s2ci" "s1ci" "s1sd" "s1sf"
42+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s2ci" "s1rb" "s1sd" "s1sf"
43+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s2rb" "s1ci" "s1sd" "s1sf"
44+
permutation "s1rc" "s2rc" "s1ia" "s2ia" "s2rb" "s1rb" "s1sd" "s1sf"
45+
46+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s1sd" "s1sf" "s1ci" "s2ci" "s1sd" "s1sf"
47+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s1ci" "s2rb" "s1sd" "s1sf"
48+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s1rb" "s2ci" "s1sd" "s1sf"
49+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s1rb" "s2rb" "s1sd" "s1sf"
50+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s2ci" "s1ci" "s1sd" "s1sf"
51+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s2ci" "s1rb" "s1sd" "s1sf"
52+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s2rb" "s1ci" "s1sd" "s1sf"
53+
permutation "s1sr" "s2sr" "s1ia" "s2ia" "s2rb" "s1rb" "s1sd" "s1sf"
54+
55+
permutation "s1sr" "s2sr" "s1ia" "s1ia" "s1ib" "s1ic" "s2ib" "s2ia" "s2ib" "s1ci" "s2ci" "s1sd" "s1sf"
56+
permutation "s1sr" "s2sr" "s1ic" "s1ic" "s1ia" "s2ic" "s2ib" "s1ci" "s2ci" "s1sd" "s1sf"

0 commit comments

Comments
 (0)