Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3f32395

Browse files
committed
isolationtester: append session name to application_name.
When writing / debugging an isolation test it sometimes is useful to see which session holds what lock etc. To make it easier, both as part of spec files and interactively, append the session name to application_name. Since b1907d6 application_name already contains the test name, this appends the session's name to that. insert-conflict-specconflict did something like this manually, which can now be removed. As we have done lately with other test infrastructure improvements, backpatch this change, to make it easier to backpatch tests. Author: Andres Freund <andres@anarazel.de> Reviewed-By: Michael Paquier <michael@paquier.xyz> Reviewed-By: Andrew Dunstan <andrew@dunslane.net> Discussion: https://postgr.es/m/20211211012052.2blmzcmxnxqawd2z@alap3.anarazel.de Backpatch: 10-, to make backpatching of tests easier.
1 parent 45f5270 commit 3f32395

File tree

3 files changed

+37
-16
lines changed

3 files changed

+37
-16
lines changed

src/test/isolation/expected/insert-conflict-specconflict.out

+10-10
Original file line numberDiff line numberDiff line change
@@ -490,15 +490,15 @@ step controller_print_speculative_locks:
490490
WHERE
491491
locktype IN ('spectoken', 'transactionid')
492492
AND pa.datname = current_database()
493-
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%'
493+
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict/s%'
494494
ORDER BY 1, 2, 3, 4;
495495

496496
application_name |locktype |mode |granted
497497
-----------------------------------------+-------------+-------------+-------
498-
isolation/insert-conflict-specconflict-s1|spectoken |ShareLock |f
499-
isolation/insert-conflict-specconflict-s1|transactionid|ExclusiveLock|t
500-
isolation/insert-conflict-specconflict-s2|spectoken |ExclusiveLock|t
501-
isolation/insert-conflict-specconflict-s2|transactionid|ExclusiveLock|t
498+
isolation/insert-conflict-specconflict/s1|spectoken |ShareLock |f
499+
isolation/insert-conflict-specconflict/s1|transactionid|ExclusiveLock|t
500+
isolation/insert-conflict-specconflict/s2|spectoken |ExclusiveLock|t
501+
isolation/insert-conflict-specconflict/s2|transactionid|ExclusiveLock|t
502502
(4 rows)
503503

504504
step controller_unlock_2_4: SELECT pg_advisory_unlock(2, 4);
@@ -517,14 +517,14 @@ step controller_print_speculative_locks:
517517
WHERE
518518
locktype IN ('spectoken', 'transactionid')
519519
AND pa.datname = current_database()
520-
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%'
520+
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict/s%'
521521
ORDER BY 1, 2, 3, 4;
522522

523523
application_name |locktype |mode |granted
524524
-----------------------------------------+-------------+-------------+-------
525-
isolation/insert-conflict-specconflict-s1|transactionid|ExclusiveLock|t
526-
isolation/insert-conflict-specconflict-s1|transactionid|ShareLock |f
527-
isolation/insert-conflict-specconflict-s2|transactionid|ExclusiveLock|t
525+
isolation/insert-conflict-specconflict/s1|transactionid|ExclusiveLock|t
526+
isolation/insert-conflict-specconflict/s1|transactionid|ShareLock |f
527+
isolation/insert-conflict-specconflict/s2|transactionid|ExclusiveLock|t
528528
(3 rows)
529529

530530
step s2_commit: COMMIT;
@@ -544,7 +544,7 @@ step controller_print_speculative_locks:
544544
WHERE
545545
locktype IN ('spectoken', 'transactionid')
546546
AND pa.datname = current_database()
547-
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%'
547+
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict/s%'
548548
ORDER BY 1, 2, 3, 4;
549549

550550
application_name|locktype|mode|granted

src/test/isolation/isolationtester.c

+26-2
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,14 @@ main(int argc, char **argv)
154154

155155
for (i = 0; i < nconns; i++)
156156
{
157+
const char *sessionname;
158+
157159
if (i == 0)
158-
conns[i].sessionname = "control connection";
160+
sessionname = "control connection";
159161
else
160-
conns[i].sessionname = testspec->sessions[i - 1]->name;
162+
sessionname = testspec->sessions[i - 1]->name;
163+
164+
conns[i].sessionname = sessionname;
161165

162166
conns[i].conn = PQconnectdb(conninfo);
163167
if (PQstatus(conns[i].conn) != CONNECTION_OK)
@@ -182,6 +186,26 @@ main(int argc, char **argv)
182186
blackholeNoticeProcessor,
183187
NULL);
184188

189+
/*
190+
* Similarly, append the session name to application_name to make it
191+
* easier to map spec file sessions to log output and
192+
* pg_stat_activity. The reason to append instead of just setting the
193+
* name is that we don't know the name of the test currently running.
194+
*/
195+
res = PQexecParams(conns[i].conn,
196+
"SELECT set_config('application_name',\n"
197+
" current_setting('application_name') || '/' || $1,\n"
198+
" false)",
199+
1, NULL,
200+
&sessionname,
201+
NULL, NULL, 0);
202+
if (PQresultStatus(res) != PGRES_TUPLES_OK)
203+
{
204+
fprintf(stderr, "setting of application name failed: %s",
205+
PQerrorMessage(conns[i].conn));
206+
exit(1);
207+
}
208+
185209
/* Save each connection's backend PID for subsequent use. */
186210
conns[i].backend_pid = PQbackendPID(conns[i].conn);
187211
conns[i].backend_pid_str = psprintf("%d", conns[i].backend_pid);

src/test/isolation/specs/insert-conflict-specconflict.spec

+1-4
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ session controller
4747
setup
4848
{
4949
SET default_transaction_isolation = 'read committed';
50-
SET application_name = 'isolation/insert-conflict-specconflict-controller';
5150
}
5251
step controller_locks {SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);}
5352
step controller_unlock_1_1 { SELECT pg_advisory_unlock(1, 1); }
@@ -66,7 +65,7 @@ step controller_print_speculative_locks {
6665
WHERE
6766
locktype IN ('spectoken', 'transactionid')
6867
AND pa.datname = current_database()
69-
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict-s%'
68+
AND pa.application_name LIKE 'isolation/insert-conflict-specconflict/s%'
7069
ORDER BY 1, 2, 3, 4;
7170
}
7271

@@ -75,7 +74,6 @@ setup
7574
{
7675
SET default_transaction_isolation = 'read committed';
7776
SET spec.session = 1;
78-
SET application_name = 'isolation/insert-conflict-specconflict-s1';
7977
}
8078
step s1_begin { BEGIN; }
8179
step s1_create_non_unique_index { CREATE INDEX upserttest_key_idx ON upserttest((blurt_and_lock_4(key))); }
@@ -90,7 +88,6 @@ setup
9088
{
9189
SET default_transaction_isolation = 'read committed';
9290
SET spec.session = 2;
93-
SET application_name = 'isolation/insert-conflict-specconflict-s2';
9491
}
9592
step s2_begin { BEGIN; }
9693
step s2_upsert { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock_123(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; }

0 commit comments

Comments
 (0)