]> granicus.if.org Git - postgresql/commitdiff
Reset 'ps' display just once when resolving VXID conflicts.
authorRobert Haas <rhaas@postgresql.org>
Fri, 17 Dec 2010 13:30:57 +0000 (08:30 -0500)
committerRobert Haas <rhaas@postgresql.org>
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