Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Reimplement nullification of walsender timestamp
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 8 Jan 2020 17:33:49 +0000 (14:33 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 8 Jan 2020 17:33:49 +0000 (14:33 -0300)
Make the value null only at pg_stat_activity-output time, as suggested
by Tom Lane, instead of messing with the internal state.  This should
appease buildfarm members with force_parallel_mode=regress, which are
running parallel queries on logical replication walsenders.

The fact that walsenders can run parallel queries should perhaps be
studied more carefully, but for the moment let's get rid of the red
blots in buildfarm.

Backpatch to pg10, like the previous commit.

Discussion: https://postgr.es/m/30804.1578438763@sss.pgh.pa.us

src/backend/access/transam/xact.c
src/backend/utils/adt/pgstatfuncs.c

index 0dd6b82f99a60f33b43a1ea5dea73425366793d9..9b252213d95137ba4b7b3a16386e670b6eb5a1e7 100644 (file)
@@ -758,13 +758,6 @@ GetCurrentTransactionStopTimestamp(void)
 void
 SetCurrentStatementStartTimestamp(void)
 {
-   /*
-    * Skip if on a walsender; this is not needed, and it confuses monitoring
-    * if we publish non-NULL values.
-    */
-   if (am_walsender)
-       return;
-
    if (!IsParallelWorker())
        stmtStartTimestamp = GetCurrentTimestamp();
    else
index 20ce48b2d8272ffa04b4df4a071cc467c88cefb4..b764251d8758295a7b551c11448b5517242084e1 100644 (file)
@@ -732,7 +732,13 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
            else
                nulls[7] = true;
 
-           if (beentry->st_xact_start_timestamp != 0)
+           /*
+            * Don't expose transaction time for walsenders; it confuses
+            * monitoring, particularly because we don't keep the time up-to-
+            * date.
+            */
+           if (beentry->st_xact_start_timestamp != 0 &&
+               beentry->st_backendType != B_WAL_SENDER)
                values[8] = TimestampTzGetDatum(beentry->st_xact_start_timestamp);
            else
                nulls[8] = true;