v1-0002-Fix-the-mxid-and-mxoff-wraparound-issues-in-pg_up.patch
application/octet-stream
Filename: v1-0002-Fix-the-mxid-and-mxoff-wraparound-issues-in-pg_up.patch
Type: application/octet-stream
Part: 1
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v1-0002
Subject: Fix the mxid and mxoff wraparound issues in pg_upgrade.
| File | + | − |
|---|---|---|
| src/bin/pg_resetwal/pg_resetwal.c | 1 | 4 |
| src/bin/pg_upgrade/pg_upgrade.c | 10 | 1 |
From dd5775184a729c2b5cfff40ff5ab55eed936d2fb Mon Sep 17 00:00:00 2001
From: Maxim Orlov <orlovmg@gmail.com>
Date: Fri, 20 Jun 2025 17:21:08 +0300
Subject: [PATCH v1 2/2] Fix the mxid and mxoff wraparound issues in
pg_upgrade.
Per bags:
- BUG #18863: Multixact wraparound and pg_resetwal error "multitransaction ID (-m) must not be 0"
- BUG #18865: pg_resetwal error: multitransaction offset (-O) must not be -1
---
src/bin/pg_resetwal/pg_resetwal.c | 5 +----
src/bin/pg_upgrade/pg_upgrade.c | 11 ++++++++++-
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
index e876f35f38..3b984eeae0 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -273,8 +273,6 @@ main(int argc, char *argv[])
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- if (set_mxoff == -1)
- pg_fatal("multitransaction offset (-O) must not be -1");
break;
case 'l':
@@ -463,8 +461,7 @@ main(int argc, char *argv[])
ControlFile.checkPointCopy.oldestMultiDB = InvalidOid;
}
- if (set_mxoff != -1)
- ControlFile.checkPointCopy.nextMultiOffset = set_mxoff;
+ ControlFile.checkPointCopy.nextMultiOffset = set_mxoff;
if (minXlogTli > ControlFile.checkPointCopy.ThisTimeLineID)
{
diff --git a/src/bin/pg_upgrade/pg_upgrade.c b/src/bin/pg_upgrade/pg_upgrade.c
index 536e49d261..0bfca6865e 100644
--- a/src/bin/pg_upgrade/pg_upgrade.c
+++ b/src/bin/pg_upgrade/pg_upgrade.c
@@ -793,6 +793,15 @@ copy_xact_xlog_xid(void)
if (old_cluster.controldata.cat_ver >= MULTIXACT_FORMATCHANGE_CAT_VER &&
new_cluster.controldata.cat_ver >= MULTIXACT_FORMATCHANGE_CAT_VER)
{
+ uint32 old_chkpnt_nxtmulti = old_cluster.controldata.chkpnt_nxtmulti;
+
+ /*
+ * Beware of the possibility that chkpnt_nxtmulti is in the
+ * wrapped-around state in old cluster.
+ */
+ if (old_chkpnt_nxtmulti == 0)
+ old_chkpnt_nxtmulti = 1; /* FirstMultiXactId */
+
copy_subdir_files("pg_multixact/offsets", "pg_multixact/offsets");
copy_subdir_files("pg_multixact/members", "pg_multixact/members");
@@ -806,7 +815,7 @@ copy_xact_xlog_xid(void)
"\"%s/pg_resetwal\" -O %u -m %u,%u \"%s\"",
new_cluster.bindir,
old_cluster.controldata.chkpnt_nxtmxoff,
- old_cluster.controldata.chkpnt_nxtmulti,
+ old_chkpnt_nxtmulti,
old_cluster.controldata.chkpnt_oldstMulti,
new_cluster.pgdata);
check_ok();
--
2.43.0