aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Riggs <simon@2ndQuadrant.com>2012-12-02 15:00:53 +0000
committerSimon Riggs <simon@2ndQuadrant.com>2012-12-02 15:00:53 +0000
commitc3f64adef829ea41d3761822b8a043aec3d651f2 (patch)
treeb11201f1ffbd468ece1d8d87ead3f376835d1675
parent530cbf6b10af156276d45687d14ca05cd4e39d16 (diff)
downloadpostgresql-c3f64adef829ea41d3761822b8a043aec3d651f2.tar.gz
postgresql-c3f64adef829ea41d3761822b8a043aec3d651f2.zip
XidEpoch++ if wraparound during checkpoint.
If wal_level = hot_standby we update the checkpoint nextxid, though in the case where a wraparound occurred half-way through a checkpoint we would neglect updating the epoch also. Updating the nextxid is arguably the wrong thing to do, but changing that may introduce subtle bugs into hot standby startup, while updating the value doesn't cause any known bugs yet. Minimal fix now to HEAD and backbranches, wider fix later in HEAD. Bug reported in #6291 by Daniel Farina and slightly differently in Cause analysis and recommended fixes from Tom Lane and Andres Freund. Applied patch is minimal version of Andres Freund's work.
-rw-r--r--src/backend/access/transam/xlog.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 9328ad38f4d..5a06ae2a4a3 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -8020,10 +8020,17 @@ CreateCheckPoint(int flags)
* If we are shutting down, or Startup process is completing crash
* recovery we don't need to write running xact data.
*
- * Update checkPoint.nextXid since we have a later value
+ * Update checkPoint.nextXid since we may have a later value. If we
+ * do update the value, and we have wrapped, increment epoch also.
*/
if (!shutdown && XLogStandbyInfoActive())
+ {
+ TransactionId prevXid = checkPoint.nextXid;
+
LogStandbySnapshot(&checkPoint.nextXid);
+ if (checkPoint.nextXid < prevXid)
+ checkPoint.nextXidEpoch++;
+ }
START_CRIT_SECTION();