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