Reset 'ps' display just once when resolving VXID conflicts.
authorRobert Haas <[email protected]>
Fri, 17 Dec 2010 13:30:57 +0000 (08:30 -0500)
committerRobert Haas <[email protected]>
Fri, 17 Dec 2010 13:30:57 +0000 (08:30 -0500)
This prevents the word "waiting" from briefly disappearing from the ps
status line when ResolveRecoveryConflictWithVirtualXIDs begins a new
iteration of the outer loop.

Along the way, remove some useless pgstat_report_waiting() calls;
the startup process doesn't appear in pg_stat_activity.

Fujii Masao

src/backend/storage/ipc/standby.c

index adf87a44c3d2478db5cfcb89e0f3bcf8dfd20480..4f209eab68896f2006e8a8459ad11ba6cfc7ebf5 100644 (file)
@@ -21,7 +21,6 @@
 #include "access/xact.h"
 #include "access/xlog.h"
 #include "miscadmin.h"
-#include "pgstat.h"
 #include "storage/bufmgr.h"
 #include "storage/lmgr.h"
 #include "storage/proc.h"
@@ -191,16 +190,14 @@ static void
 ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
                                       ProcSignalReason reason)
 {
-   while (VirtualTransactionIdIsValid(*waitlist))
-   {
-       TimestampTz waitStart;
-       char       *new_status;
-
-       pgstat_report_waiting(true);
+   TimestampTz waitStart;
+   char       *new_status;
 
-       waitStart = GetCurrentTimestamp();
-       new_status = NULL;      /* we haven't changed the ps display */
+   waitStart = GetCurrentTimestamp();
+   new_status = NULL;      /* we haven't changed the ps display */
 
+   while (VirtualTransactionIdIsValid(*waitlist))
+   {
        /* reset standbyWait_us for each xact we wait for */
        standbyWait_us = STANDBY_INITIAL_WAIT_US;
 
@@ -246,17 +243,16 @@ ResolveRecoveryConflictWithVirtualXIDs(VirtualTransactionId *waitlist,
            }
        }
 
-       /* Reset ps display if we changed it */
-       if (new_status)
-       {
-           set_ps_display(new_status, false);
-           pfree(new_status);
-       }
-       pgstat_report_waiting(false);
-
        /* The virtual transaction is gone now, wait for the next one */
        waitlist++;
    }
+
+   /* Reset ps display if we changed it */
+   if (new_status)
+   {
+       set_ps_display(new_status, false);
+       pfree(new_status);
+   }
 }
 
 void