diff options
Diffstat (limited to 'contrib/pg_upgrade/controldata.c')
-rw-r--r-- | contrib/pg_upgrade/controldata.c | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/contrib/pg_upgrade/controldata.c b/contrib/pg_upgrade/controldata.c index 9218f65abc3..7c80c873153 100644 --- a/contrib/pg_upgrade/controldata.c +++ b/contrib/pg_upgrade/controldata.c @@ -40,6 +40,9 @@ get_control_data(ClusterInfo *cluster, bool live_check) bool got_xid = false; bool got_oid = false; bool got_nextxlogfile = false; + bool got_multi = false; + bool got_mxoff = false; + bool got_oldestmulti = false; bool got_log_id = false; bool got_log_seg = false; bool got_tli = false; @@ -246,6 +249,39 @@ get_control_data(ClusterInfo *cluster, bool live_check) cluster->controldata.chkpnt_nxtoid = str2uint(p); got_oid = true; } + else if ((p = strstr(bufin, "Latest checkpoint's NextMultiXactId:")) != NULL) + { + p = strchr(p, ':'); + + if (p == NULL || strlen(p) <= 1) + pg_log(PG_FATAL, "%d: controldata retrieval problem\n", __LINE__); + + p++; /* removing ':' char */ + cluster->controldata.chkpnt_nxtmulti = str2uint(p); + got_multi = true; + } + else if ((p = strstr(bufin, "Latest checkpoint's oldestMultiXid:")) != NULL) + { + p = strchr(p, ':'); + + if (p == NULL || strlen(p) <= 1) + pg_log(PG_FATAL, "%d: controldata retrieval problem\n", __LINE__); + + p++; /* removing ':' char */ + cluster->controldata.chkpnt_oldstMulti = str2uint(p); + got_oldestmulti = true; + } + else if ((p = strstr(bufin, "Latest checkpoint's NextMultiOffset:")) != NULL) + { + p = strchr(p, ':'); + + if (p == NULL || strlen(p) <= 1) + pg_log(PG_FATAL, "%d: controldata retrieval problem\n", __LINE__); + + p++; /* removing ':' char */ + cluster->controldata.chkpnt_nxtmxoff = str2uint(p); + got_mxoff = true; + } else if ((p = strstr(bufin, "Maximum data alignment:")) != NULL) { p = strchr(p, ':'); @@ -433,6 +469,7 @@ get_control_data(ClusterInfo *cluster, bool live_check) /* verify that we got all the mandatory pg_control data */ if (!got_xid || !got_oid || + !got_multi || !got_mxoff || !got_oldestmulti || (!live_check && !got_nextxlogfile) || !got_tli || !got_align || !got_blocksz || !got_largesz || !got_walsz || @@ -448,6 +485,15 @@ get_control_data(ClusterInfo *cluster, bool live_check) if (!got_oid) pg_log(PG_REPORT, " latest checkpoint next OID\n"); + if (!got_multi) + pg_log(PG_REPORT, " latest checkpoint next MultiXactId\n"); + + if (!got_mxoff) + pg_log(PG_REPORT, " latest checkpoint next MultiXactOffset\n"); + + if (!got_oldestmulti) + pg_log(PG_REPORT, " latest checkpoint oldest MultiXactId\n"); + if (!live_check && !got_nextxlogfile) pg_log(PG_REPORT, " first WAL segment after reset\n"); |