Skip to content

Commit 973c011

Browse files
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.
1 parent a7c5309 commit 973c011

File tree

1 file changed

+8
-1
lines changed
  • src/backend/access/transam

1 file changed

+8
-1
lines changed

src/backend/access/transam/xlog.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7849,10 +7849,17 @@ CreateCheckPoint(int flags)
78497849
* If we are shutting down, or Startup process is completing crash
78507850
* recovery we don't need to write running xact data.
78517851
*
7852-
* Update checkPoint.nextXid since we have a later value
7852+
* Update checkPoint.nextXid since we may have a later value. If we
7853+
* do update the value, and we have wrapped, increment epoch also.
78537854
*/
78547855
if (!shutdown && XLogStandbyInfoActive())
7856+
{
7857+
TransactionId prevXid = checkPoint.nextXid;
7858+
78557859
LogStandbySnapshot(&checkPoint.nextXid);
7860+
if (checkPoint.nextXid < prevXid)
7861+
checkPoint.nextXidEpoch++;
7862+
}
78567863

78577864
START_CRIT_SECTION();
78587865

0 commit comments

Comments
 (0)