1Parsed test spec with 3 sessions
2
3starting permutation: controller_locks controller_show s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_2_2 controller_show controller_unlock_1_2 controller_show
4step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);
5pg_advisory_lock|sess|lock
6----------------+----+----
7                |   1|   1
8                |   1|   2
9                |   1|   3
10                |   2|   1
11                |   2|   2
12                |   2|   3
13(6 rows)
14
15step controller_show: SELECT * FROM upserttest;
16key|data
17---+----
18(0 rows)
19
20s1: NOTICE:  called for k1
21s1: NOTICE:  blocking 3
22step s1_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; <waiting ...>
23s2: NOTICE:  called for k1
24s2: NOTICE:  blocking 3
25step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; <waiting ...>
26step controller_show: SELECT * FROM upserttest;
27key|data
28---+----
29(0 rows)
30
31step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1);
32pg_advisory_unlock
33------------------
34t
35(1 row)
36
37step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1);
38pg_advisory_unlock
39------------------
40t
41(1 row)
42
43step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3);
44pg_advisory_unlock
45------------------
46t
47(1 row)
48
49s1: NOTICE:  called for k1
50s1: NOTICE:  blocking 2
51step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3);
52pg_advisory_unlock
53------------------
54t
55(1 row)
56
57s2: NOTICE:  called for k1
58s2: NOTICE:  blocking 2
59step controller_show: SELECT * FROM upserttest;
60key|data
61---+----
62(0 rows)
63
64step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2);
65pg_advisory_unlock
66------------------
67t
68(1 row)
69
70step s2_upsert: <... completed>
71step controller_show: SELECT * FROM upserttest;
72key|data
73---+-----------
74k1 |inserted s2
75(1 row)
76
77step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2);
78pg_advisory_unlock
79------------------
80t
81(1 row)
82
83s1: NOTICE:  called for k1
84s1: NOTICE:  blocking 2
85s1: NOTICE:  called for k1
86s1: NOTICE:  blocking 2
87step s1_upsert: <... completed>
88step controller_show: SELECT * FROM upserttest;
89key|data
90---+-----------------------------------
91k1 |inserted s2 with conflict update s1
92(1 row)
93
94
95starting permutation: controller_locks controller_show s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_1_2 controller_show controller_unlock_2_2 controller_show
96step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);
97pg_advisory_lock|sess|lock
98----------------+----+----
99                |   1|   1
100                |   1|   2
101                |   1|   3
102                |   2|   1
103                |   2|   2
104                |   2|   3
105(6 rows)
106
107step controller_show: SELECT * FROM upserttest;
108key|data
109---+----
110(0 rows)
111
112s1: NOTICE:  called for k1
113s1: NOTICE:  blocking 3
114step s1_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; <waiting ...>
115s2: NOTICE:  called for k1
116s2: NOTICE:  blocking 3
117step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; <waiting ...>
118step controller_show: SELECT * FROM upserttest;
119key|data
120---+----
121(0 rows)
122
123step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1);
124pg_advisory_unlock
125------------------
126t
127(1 row)
128
129step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1);
130pg_advisory_unlock
131------------------
132t
133(1 row)
134
135step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3);
136pg_advisory_unlock
137------------------
138t
139(1 row)
140
141s1: NOTICE:  called for k1
142s1: NOTICE:  blocking 2
143step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3);
144pg_advisory_unlock
145------------------
146t
147(1 row)
148
149s2: NOTICE:  called for k1
150s2: NOTICE:  blocking 2
151step controller_show: SELECT * FROM upserttest;
152key|data
153---+----
154(0 rows)
155
156step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2);
157pg_advisory_unlock
158------------------
159t
160(1 row)
161
162step s1_upsert: <... completed>
163step controller_show: SELECT * FROM upserttest;
164key|data
165---+-----------
166k1 |inserted s1
167(1 row)
168
169step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2);
170pg_advisory_unlock
171------------------
172t
173(1 row)
174
175s2: NOTICE:  called for k1
176s2: NOTICE:  blocking 2
177s2: NOTICE:  called for k1
178s2: NOTICE:  blocking 2
179step s2_upsert: <... completed>
180step controller_show: SELECT * FROM upserttest;
181key|data
182---+-----------------------------------
183k1 |inserted s1 with conflict update s2
184(1 row)
185
186
187starting permutation: controller_locks controller_show s1_begin s2_begin s1_upsert s2_upsert controller_show controller_unlock_1_1 controller_unlock_2_1 controller_unlock_1_3 controller_unlock_2_3 controller_show controller_unlock_1_2 controller_show controller_unlock_2_2 controller_show s1_commit controller_show s2_commit controller_show
188step controller_locks: SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);
189pg_advisory_lock|sess|lock
190----------------+----+----
191                |   1|   1
192                |   1|   2
193                |   1|   3
194                |   2|   1
195                |   2|   2
196                |   2|   3
197(6 rows)
198
199step controller_show: SELECT * FROM upserttest;
200key|data
201---+----
202(0 rows)
203
204step s1_begin: BEGIN;
205step s2_begin: BEGIN;
206s1: NOTICE:  called for k1
207s1: NOTICE:  blocking 3
208step s1_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; <waiting ...>
209s2: NOTICE:  called for k1
210s2: NOTICE:  blocking 3
211step s2_upsert: INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; <waiting ...>
212step controller_show: SELECT * FROM upserttest;
213key|data
214---+----
215(0 rows)
216
217step controller_unlock_1_1: SELECT pg_advisory_unlock(1, 1);
218pg_advisory_unlock
219------------------
220t
221(1 row)
222
223step controller_unlock_2_1: SELECT pg_advisory_unlock(2, 1);
224pg_advisory_unlock
225------------------
226t
227(1 row)
228
229step controller_unlock_1_3: SELECT pg_advisory_unlock(1, 3);
230pg_advisory_unlock
231------------------
232t
233(1 row)
234
235s1: NOTICE:  called for k1
236s1: NOTICE:  blocking 2
237step controller_unlock_2_3: SELECT pg_advisory_unlock(2, 3);
238pg_advisory_unlock
239------------------
240t
241(1 row)
242
243s2: NOTICE:  called for k1
244s2: NOTICE:  blocking 2
245step controller_show: SELECT * FROM upserttest;
246key|data
247---+----
248(0 rows)
249
250step controller_unlock_1_2: SELECT pg_advisory_unlock(1, 2);
251pg_advisory_unlock
252------------------
253t
254(1 row)
255
256step s1_upsert: <... completed>
257step controller_show: SELECT * FROM upserttest;
258key|data
259---+----
260(0 rows)
261
262step controller_unlock_2_2: SELECT pg_advisory_unlock(2, 2);
263pg_advisory_unlock
264------------------
265t
266(1 row)
267
268s2: NOTICE:  called for k1
269s2: NOTICE:  blocking 2
270s2: NOTICE:  called for k1
271s2: NOTICE:  blocking 2
272step controller_show: SELECT * FROM upserttest;
273key|data
274---+----
275(0 rows)
276
277step s1_commit: COMMIT;
278s2: NOTICE:  called for k1
279s2: NOTICE:  blocking 2
280step s2_upsert: <... completed>
281step controller_show: SELECT * FROM upserttest;
282key|data
283---+-----------
284k1 |inserted s1
285(1 row)
286
287step s2_commit: COMMIT;
288step controller_show: SELECT * FROM upserttest;
289key|data
290---+-----------------------------------
291k1 |inserted s1 with conflict update s2
292(1 row)
293
294