Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
isolationtester: append session name to application_name.
authorAndres Freund <andres@anarazel.de>
Mon, 13 Dec 2021 20:02:48 +0000 (12:02 -0800)
committerAndres Freund <andres@anarazel.de>
Mon, 13 Dec 2021 20:02:48 +0000 (12:02 -0800)
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 b1907d688
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.

src/test/isolation/isolationtester.c

index 72ef804ce300412a861b7d9e3518339110e33d56..549102303247d5df46496a8d387bcd1c32ea2e00 100644 (file)
@@ -155,10 +155,14 @@ main(int argc, char **argv)
 
    for (i = 0; i < nconns; i++)
    {
+       const char *sessionname;
+
        if (i == 0)
-           conns[i].sessionname = "control connection";
+           sessionname = "control connection";
        else
-           conns[i].sessionname = testspec->sessions[i - 1]->name;
+           sessionname = testspec->sessions[i - 1]->name;
+
+       conns[i].sessionname = sessionname;
 
        conns[i].conn = PQconnectdb(conninfo);
        if (PQstatus(conns[i].conn) != CONNECTION_OK)
@@ -183,6 +187,26 @@ main(int argc, char **argv)
                                 blackholeNoticeProcessor,
                                 NULL);
 
+       /*
+        * Similarly, append the session name to application_name to make it
+        * easier to map spec file sessions to log output and
+        * pg_stat_activity. The reason to append instead of just setting the
+        * name is that we don't know the name of the test currently running.
+        */
+       res = PQexecParams(conns[i].conn,
+                          "SELECT set_config('application_name',\n"
+                          "  current_setting('application_name') || '/' || $1,\n"
+                          "  false)",
+                          1, NULL,
+                          &sessionname,
+                          NULL, NULL, 0);
+       if (PQresultStatus(res) != PGRES_TUPLES_OK)
+       {
+           fprintf(stderr, "setting of application name failed: %s",
+                   PQerrorMessage(conns[i].conn));
+           exit(1);
+       }
+
        /* Save each connection's backend PID for subsequent use. */
        conns[i].backend_pid = PQbackendPID(conns[i].conn);
        conns[i].backend_pid_str = psprintf("%d", conns[i].backend_pid);