Now that we know last_statrequest > last_statwrite can be observed in the
authorTom Lane
Wed, 24 Mar 2010 16:07:10 +0000 (16:07 +0000)
committerTom Lane
Wed, 24 Mar 2010 16:07:10 +0000 (16:07 +0000)
buildfarm, expend a little more effort on the log message for it.

src/backend/postmaster/pgstat.c

index c00b87c8f3712f3b10684163554c1c6147388888..5c3d700d2908ec46a6393f55e92ee7b8e404a61d 100644 (file)
@@ -13,7 +13,7 @@
  *
  * Copyright (c) 2001-2010, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.202 2010/03/12 22:19:19 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.203 2010/03/24 16:07:10 tgl Exp $
  * ----------
  */
 #include "postgres.h"
@@ -3288,15 +3288,24 @@ pgstat_write_statsfile(bool permanent)
        last_statwrite = globalStats.stats_timestamp;
 
        /*
-        * It's not entirely clear whether there could be clock skew between
-        * backends and the collector; but just in case someone manages to
-        * send us a stats request time that's in the future, reset it.
-        * This ensures that no inquiry message can cause more than one stats
-        * file write to occur.
+        * If there is clock skew between backends and the collector, we
+        * could receive a stats request time that's in the future.  If so,
+        * complain and reset last_statrequest.  Resetting ensures that no
+        * inquiry message can cause more than one stats file write to occur.
         */
        if (last_statrequest > last_statwrite)
        {
-           elog(LOG, "last_statrequest is in the future, resetting");
+           char       *reqtime;
+           char       *mytime;
+
+           /* Copy because timestamptz_to_str returns a static buffer */
+           reqtime = pstrdup(timestamptz_to_str(last_statrequest));
+           mytime = pstrdup(timestamptz_to_str(last_statwrite));
+           elog(LOG, "last_statrequest %s is later than collector's time %s",
+                reqtime, mytime);
+           pfree(reqtime);
+           pfree(mytime);
+
            last_statrequest = last_statwrite;
        }
    }