static XLogSegNo newXlogSegNo; /* new XLOG segment # */
static bool guessed = false; /* T if we had to guess at any values */
static const char *progname;
-static uint32 set_xid_epoch = (uint32) -1;
-static TransactionId set_oldest_xid = 0;
-static TransactionId set_xid = 0;
-static TransactionId set_oldest_commit_ts_xid = 0;
-static TransactionId set_newest_commit_ts_xid = 0;
-static Oid set_oid = 0;
-static bool mxid_given = false;
-static MultiXactId set_mxid = 0;
-static bool mxoff_given = false;
-static MultiXactOffset set_mxoff = 0;
+
+/*
+ * New values given on the command-line
+ */
+static bool next_xid_epoch_given = false;
+static uint32 next_xid_epoch_val;
+
+static bool oldest_xid_given = false;
+static TransactionId oldest_xid_val;
+
+static bool next_xid_given = false;
+static TransactionId next_xid_val;
+
+static bool commit_ts_xids_given = false;
+static TransactionId oldest_commit_ts_xid_val;
+static TransactionId newest_commit_ts_xid_val;
+
+static bool next_oid_given = false;
+static Oid next_oid_val;
+
+static bool mxids_given = false;
+static MultiXactId next_mxid_val;
+static MultiXactId oldest_mxid_val = 0;
+
+static bool next_mxoff_given = false;
+static MultiXactOffset next_mxoff_val;
+
+static bool wal_segsize_given = false;
+static int wal_segsize_val;
+
+static bool char_signedness_given = false;
+static bool char_signedness_val;
+
+
static TimeLineID minXlogTli = 0;
static XLogSegNo minXlogSegNo = 0;
static int WalSegSz;
-static int set_wal_segsize;
-static int set_char_signedness = -1;
static void CheckDataVersion(void);
static bool read_controlfile(void);
int c;
bool force = false;
bool noupdate = false;
- MultiXactId set_oldestmxid = 0;
char *endptr;
char *endptr2;
char *DataDir = NULL;
case 'e':
errno = 0;
- set_xid_epoch = strtouint32_strict(optarg, &endptr, 0);
+ next_xid_epoch_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
/*------
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- if (set_xid_epoch == -1)
- pg_fatal("transaction ID epoch (-e) must not be -1");
+ next_xid_epoch_given = true;
break;
case 'u':
errno = 0;
- set_oldest_xid = strtouint32_strict(optarg, &endptr, 0);
+ oldest_xid_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-u");
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- if (!TransactionIdIsNormal(set_oldest_xid))
+ if (!TransactionIdIsNormal(oldest_xid_val))
pg_fatal("oldest transaction ID (-u) must be greater than or equal to %u", FirstNormalTransactionId);
+ oldest_xid_given = true;
break;
case 'x':
errno = 0;
- set_xid = strtouint32_strict(optarg, &endptr, 0);
+ next_xid_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-x");
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- if (!TransactionIdIsNormal(set_xid))
+ if (!TransactionIdIsNormal(next_xid_val))
pg_fatal("transaction ID (-x) must be greater than or equal to %u", FirstNormalTransactionId);
+ next_xid_given = true;
break;
case 'c':
errno = 0;
- set_oldest_commit_ts_xid = strtouint32_strict(optarg, &endptr, 0);
+ oldest_commit_ts_xid_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != ',' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-c");
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- set_newest_commit_ts_xid = strtoul(endptr + 1, &endptr2, 0);
+ newest_commit_ts_xid_val = strtoul(endptr + 1, &endptr2, 0);
if (endptr2 == endptr + 1 || *endptr2 != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-c");
exit(1);
}
- if (set_oldest_commit_ts_xid < FirstNormalTransactionId &&
- set_oldest_commit_ts_xid != InvalidTransactionId)
+ if (oldest_commit_ts_xid_val < FirstNormalTransactionId &&
+ oldest_commit_ts_xid_val != InvalidTransactionId)
pg_fatal("transaction ID (-c) must be either %u or greater than or equal to %u", InvalidTransactionId, FirstNormalTransactionId);
- if (set_newest_commit_ts_xid < FirstNormalTransactionId &&
- set_newest_commit_ts_xid != InvalidTransactionId)
+ if (newest_commit_ts_xid_val < FirstNormalTransactionId &&
+ newest_commit_ts_xid_val != InvalidTransactionId)
pg_fatal("transaction ID (-c) must be either %u or greater than or equal to %u", InvalidTransactionId, FirstNormalTransactionId);
+ commit_ts_xids_given = true;
break;
case 'o':
errno = 0;
- set_oid = strtouint32_strict(optarg, &endptr, 0);
+ next_oid_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-o");
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- if (set_oid == 0)
+ if (next_oid_val == 0)
pg_fatal("OID (-o) must not be 0");
+ next_oid_given = true;
break;
case 'm':
errno = 0;
- set_mxid = strtouint32_strict(optarg, &endptr, 0);
+ next_mxid_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != ',' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-m");
exit(1);
}
- set_oldestmxid = strtouint32_strict(endptr + 1, &endptr2, 0);
+ oldest_mxid_val = strtouint32_strict(endptr + 1, &endptr2, 0);
if (endptr2 == endptr + 1 || *endptr2 != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-m");
* XXX It'd be nice to have more sanity checks here, e.g. so
* that oldest is not wrapped around w.r.t. nextMulti.
*/
- if (set_oldestmxid == 0)
+ if (oldest_mxid_val == 0)
pg_fatal("oldest multitransaction ID (-m) must not be 0");
- mxid_given = true;
+ mxids_given = true;
break;
case 'O':
errno = 0;
- set_mxoff = strtouint32_strict(optarg, &endptr, 0);
+ next_mxoff_val = strtouint32_strict(optarg, &endptr, 0);
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-O");
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
- mxoff_given = true;
+ next_mxoff_given = true;
break;
case 'l':
if (!option_parse_int(optarg, "--wal-segsize", 1, 1024, &wal_segsize_mb))
exit(1);
- set_wal_segsize = wal_segsize_mb * 1024 * 1024;
- if (!IsValidWalSegSize(set_wal_segsize))
+ wal_segsize_val = wal_segsize_mb * 1024 * 1024;
+ if (!IsValidWalSegSize(wal_segsize_val))
pg_fatal("argument of %s must be a power of two between 1 and 1024", "--wal-segsize");
+ wal_segsize_given = true;
break;
}
errno = 0;
if (pg_strcasecmp(optarg, "signed") == 0)
- set_char_signedness = 1;
+ char_signedness_val = true;
else if (pg_strcasecmp(optarg, "unsigned") == 0)
- set_char_signedness = 0;
+ char_signedness_val = false;
else
{
pg_log_error("invalid argument for option %s", "--char-signedness");
pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
+ char_signedness_given = true;
break;
}
/*
* If no new WAL segment size was specified, use the control file value.
*/
- if (set_wal_segsize != 0)
- WalSegSz = set_wal_segsize;
+ if (wal_segsize_given)
+ WalSegSz = wal_segsize_val;
else
WalSegSz = ControlFile.xlog_seg_size;
* Adjust fields if required by switches. (Do this now so that printout,
* if any, includes these values.)
*/
- if (set_xid_epoch != -1)
+ if (next_xid_epoch_given)
ControlFile.checkPointCopy.nextXid =
- FullTransactionIdFromEpochAndXid(set_xid_epoch,
+ FullTransactionIdFromEpochAndXid(next_xid_epoch_val,
XidFromFullTransactionId(ControlFile.checkPointCopy.nextXid));
- if (set_oldest_xid != 0)
+ if (oldest_xid_given)
{
- ControlFile.checkPointCopy.oldestXid = set_oldest_xid;
+ ControlFile.checkPointCopy.oldestXid = oldest_xid_val;
ControlFile.checkPointCopy.oldestXidDB = InvalidOid;
}
- if (set_xid != 0)
+ if (next_xid_given)
ControlFile.checkPointCopy.nextXid =
FullTransactionIdFromEpochAndXid(EpochFromFullTransactionId(ControlFile.checkPointCopy.nextXid),
- set_xid);
+ next_xid_val);
- if (set_oldest_commit_ts_xid != 0)
- ControlFile.checkPointCopy.oldestCommitTsXid = set_oldest_commit_ts_xid;
- if (set_newest_commit_ts_xid != 0)
- ControlFile.checkPointCopy.newestCommitTsXid = set_newest_commit_ts_xid;
+ if (commit_ts_xids_given)
+ {
+ ControlFile.checkPointCopy.oldestCommitTsXid = oldest_commit_ts_xid_val;
+ ControlFile.checkPointCopy.newestCommitTsXid = newest_commit_ts_xid_val;
+ }
- if (set_oid != 0)
- ControlFile.checkPointCopy.nextOid = set_oid;
+ if (next_oid_given)
+ ControlFile.checkPointCopy.nextOid = next_oid_val;
- if (mxid_given)
+ if (mxids_given)
{
- ControlFile.checkPointCopy.nextMulti = set_mxid;
+ ControlFile.checkPointCopy.nextMulti = next_mxid_val;
- ControlFile.checkPointCopy.oldestMulti = set_oldestmxid;
+ ControlFile.checkPointCopy.oldestMulti = oldest_mxid_val;
if (ControlFile.checkPointCopy.oldestMulti < FirstMultiXactId)
ControlFile.checkPointCopy.oldestMulti += FirstMultiXactId;
ControlFile.checkPointCopy.oldestMultiDB = InvalidOid;
}
- if (mxoff_given)
- ControlFile.checkPointCopy.nextMultiOffset = set_mxoff;
+ if (next_mxoff_given)
+ ControlFile.checkPointCopy.nextMultiOffset = next_mxoff_val;
if (minXlogTli > ControlFile.checkPointCopy.ThisTimeLineID)
{
ControlFile.checkPointCopy.PrevTimeLineID = minXlogTli;
}
- if (set_wal_segsize != 0)
+ if (wal_segsize_given)
ControlFile.xlog_seg_size = WalSegSz;
- if (set_char_signedness != -1)
- ControlFile.default_char_signedness = (set_char_signedness == 1);
+ if (char_signedness_given)
+ ControlFile.default_char_signedness = char_signedness_val;
if (minXlogSegNo > newXlogSegNo)
newXlogSegNo = minXlogSegNo;
newXlogSegNo, WalSegSz);
printf(_("First log segment after reset: %s\n"), fname);
- if (mxid_given)
+ if (mxids_given)
{
printf(_("NextMultiXactId: %u\n"),
ControlFile.checkPointCopy.nextMulti);
ControlFile.checkPointCopy.oldestMultiDB);
}
- if (mxoff_given)
+ if (next_mxoff_given)
{
printf(_("NextMultiOffset: %u\n"),
ControlFile.checkPointCopy.nextMultiOffset);
}
- if (set_oid != 0)
+ if (next_oid_given)
{
printf(_("NextOID: %u\n"),
ControlFile.checkPointCopy.nextOid);
}
- if (set_xid != 0)
+ if (next_xid_given)
{
printf(_("NextXID: %u\n"),
XidFromFullTransactionId(ControlFile.checkPointCopy.nextXid));
}
- if (set_oldest_xid != 0)
+ if (oldest_xid_given)
{
printf(_("OldestXID: %u\n"),
ControlFile.checkPointCopy.oldestXid);
ControlFile.checkPointCopy.oldestXidDB);
}
- if (set_xid_epoch != -1)
+ if (next_xid_epoch_given)
{
printf(_("NextXID epoch: %u\n"),
EpochFromFullTransactionId(ControlFile.checkPointCopy.nextXid));
}
- if (set_oldest_commit_ts_xid != 0)
+ if (commit_ts_xids_given)
{
printf(_("oldestCommitTsXid: %u\n"),
ControlFile.checkPointCopy.oldestCommitTsXid);
- }
- if (set_newest_commit_ts_xid != 0)
- {
printf(_("newestCommitTsXid: %u\n"),
ControlFile.checkPointCopy.newestCommitTsXid);
}
- if (set_wal_segsize != 0)
+ if (wal_segsize_given)
{
printf(_("Bytes per WAL segment: %u\n"),
ControlFile.xlog_seg_size);