summaryrefslogtreecommitdiff
path: root/src/bin/pg_resetwal/pg_resetwal.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_resetwal/pg_resetwal.c')
-rw-r--r--src/bin/pg_resetwal/pg_resetwal.c210
1 files changed, 60 insertions, 150 deletions
diff --git a/src/bin/pg_resetwal/pg_resetwal.c b/src/bin/pg_resetwal/pg_resetwal.c
index 1eb4509fcac..d4772a29650 100644
--- a/src/bin/pg_resetwal/pg_resetwal.c
+++ b/src/bin/pg_resetwal/pg_resetwal.c
@@ -161,14 +161,11 @@ main(int argc, char *argv[])
/*------
translator: the second %s is a command line argument (-e, etc) */
pg_log_error("invalid argument for option %s", "-e");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (set_xid_epoch == -1)
- {
- pg_log_error("transaction ID epoch (-e) must not be -1");
- exit(1);
- }
+ pg_fatal("transaction ID epoch (-e) must not be -1");
break;
case 'u':
@@ -177,14 +174,11 @@ main(int argc, char *argv[])
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-u");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (!TransactionIdIsNormal(set_oldest_xid))
- {
- pg_log_error("oldest transaction ID (-u) must be greater than or equal to %u", FirstNormalTransactionId);
- exit(1);
- }
+ pg_fatal("oldest transaction ID (-u) must be greater than or equal to %u", FirstNormalTransactionId);
break;
case 'x':
@@ -193,14 +187,11 @@ main(int argc, char *argv[])
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-x");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (!TransactionIdIsNormal(set_xid))
- {
- pg_log_error("transaction ID (-x) must be greater than or equal to %u", FirstNormalTransactionId);
- exit(1);
- }
+ pg_fatal("transaction ID (-x) must be greater than or equal to %u", FirstNormalTransactionId);
break;
case 'c':
@@ -209,30 +200,24 @@ main(int argc, char *argv[])
if (endptr == optarg || *endptr != ',' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-c");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
set_newest_commit_ts_xid = strtoul(endptr + 1, &endptr2, 0);
if (endptr2 == endptr + 1 || *endptr2 != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-c");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (set_oldest_commit_ts_xid < 2 &&
set_oldest_commit_ts_xid != 0)
- {
- pg_log_error("transaction ID (-c) must be either 0 or greater than or equal to 2");
- exit(1);
- }
+ pg_fatal("transaction ID (-c) must be either 0 or greater than or equal to 2");
if (set_newest_commit_ts_xid < 2 &&
set_newest_commit_ts_xid != 0)
- {
- pg_log_error("transaction ID (-c) must be either 0 or greater than or equal to 2");
- exit(1);
- }
+ pg_fatal("transaction ID (-c) must be either 0 or greater than or equal to 2");
break;
case 'o':
@@ -241,14 +226,11 @@ main(int argc, char *argv[])
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-o");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (set_oid == 0)
- {
- pg_log_error("OID (-o) must not be 0");
- exit(1);
- }
+ pg_fatal("OID (-o) must not be 0");
break;
case 'm':
@@ -257,7 +239,7 @@ main(int argc, char *argv[])
if (endptr == optarg || *endptr != ',' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-m");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
@@ -265,24 +247,18 @@ main(int argc, char *argv[])
if (endptr2 == endptr + 1 || *endptr2 != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-m");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (set_mxid == 0)
- {
- pg_log_error("multitransaction ID (-m) must not be 0");
- exit(1);
- }
+ pg_fatal("multitransaction ID (-m) must not be 0");
/*
* 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)
- {
- pg_log_error("oldest multitransaction ID (-m) must not be 0");
- exit(1);
- }
+ pg_fatal("oldest multitransaction ID (-m) must not be 0");
break;
case 'O':
@@ -291,21 +267,18 @@ main(int argc, char *argv[])
if (endptr == optarg || *endptr != '\0' || errno != 0)
{
pg_log_error("invalid argument for option %s", "-O");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (set_mxoff == -1)
- {
- pg_log_error("multitransaction offset (-O) must not be -1");
- exit(1);
- }
+ pg_fatal("multitransaction offset (-O) must not be -1");
break;
case 'l':
if (strspn(optarg, "01234567890ABCDEFabcdef") != XLOG_FNAME_LEN)
{
pg_log_error("invalid argument for option %s", "-l");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
@@ -320,19 +293,14 @@ main(int argc, char *argv[])
errno = 0;
set_wal_segsize = strtol(optarg, &endptr, 10) * 1024 * 1024;
if (endptr == optarg || *endptr != '\0' || errno != 0)
- {
- pg_log_error("argument of --wal-segsize must be a number");
- exit(1);
- }
+ pg_fatal("argument of --wal-segsize must be a number");
if (!IsValidWalSegSize(set_wal_segsize))
- {
- pg_log_error("argument of --wal-segsize must be a power of 2 between 1 and 1024");
- exit(1);
- }
+ pg_fatal("argument of --wal-segsize must be a power of 2 between 1 and 1024");
break;
default:
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ /* getopt_long already emitted a complaint */
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
}
@@ -345,15 +313,14 @@ main(int argc, char *argv[])
{
pg_log_error("too many command-line arguments (first is \"%s\")",
argv[optind]);
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
- progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
if (DataDir == NULL)
{
pg_log_error("no data directory specified");
- fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
+ pg_log_error_hint("Try \"%s --help\" for more information.", progname);
exit(1);
}
@@ -367,8 +334,8 @@ main(int argc, char *argv[])
if (geteuid() == 0)
{
pg_log_error("cannot be executed by \"root\"");
- pg_log_info("You must run %s as the PostgreSQL superuser.",
- progname);
+ pg_log_error_hint("You must run %s as the PostgreSQL superuser.",
+ progname);
exit(1);
}
#endif
@@ -377,20 +344,14 @@ main(int argc, char *argv[])
/* Set mask based on PGDATA permissions */
if (!GetDataDirectoryCreatePerm(DataDir))
- {
- pg_log_error("could not read permissions of directory \"%s\": %m",
- DataDir);
- exit(1);
- }
+ pg_fatal("could not read permissions of directory \"%s\": %m",
+ DataDir);
umask(pg_mode_mask);
if (chdir(DataDir) < 0)
- {
- pg_log_error("could not change directory to \"%s\": %m",
- DataDir);
- exit(1);
- }
+ pg_fatal("could not change directory to \"%s\": %m",
+ DataDir);
/* Check that data directory matches our server version */
CheckDataVersion();
@@ -402,16 +363,13 @@ main(int argc, char *argv[])
if ((fd = open("postmaster.pid", O_RDONLY, 0)) < 0)
{
if (errno != ENOENT)
- {
- pg_log_error("could not open file \"%s\" for reading: %m",
- "postmaster.pid");
- exit(1);
- }
+ pg_fatal("could not open file \"%s\" for reading: %m",
+ "postmaster.pid");
}
else
{
pg_log_error("lock file \"%s\" exists", "postmaster.pid");
- pg_log_info("Is a server running? If not, delete the lock file and try again.");
+ pg_log_error_hint("Is a server running? If not, delete the lock file and try again.");
exit(1);
}
@@ -557,20 +515,16 @@ CheckDataVersion(void)
char rawline[64];
if ((ver_fd = fopen(ver_file, "r")) == NULL)
- {
- pg_log_error("could not open file \"%s\" for reading: %m",
- ver_file);
- exit(1);
- }
+ pg_fatal("could not open file \"%s\" for reading: %m",
+ ver_file);
/* version number has to be the first line read */
if (!fgets(rawline, sizeof(rawline), ver_fd))
{
if (!ferror(ver_fd))
- pg_log_error("unexpected empty file \"%s\"", ver_file);
+ pg_fatal("unexpected empty file \"%s\"", ver_file);
else
- pg_log_error("could not read file \"%s\": %m", ver_file);
- exit(1);
+ pg_fatal("could not read file \"%s\": %m", ver_file);
}
/* strip trailing newline and carriage return */
@@ -579,8 +533,8 @@ CheckDataVersion(void)
if (strcmp(rawline, PG_MAJORVERSION) != 0)
{
pg_log_error("data directory is of wrong version");
- pg_log_info("File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\".",
- ver_file, rawline, PG_MAJORVERSION);
+ pg_log_error_detail("File \"%s\" contains \"%s\", which is not compatible with this program's version \"%s\".",
+ ver_file, rawline, PG_MAJORVERSION);
exit(1);
}
@@ -612,10 +566,10 @@ read_controlfile(void)
pg_log_error("could not open file \"%s\" for reading: %m",
XLOG_CONTROL_FILE);
if (errno == ENOENT)
- pg_log_info("If you are sure the data directory path is correct, execute\n"
- " touch %s\n"
- "and try again.",
- XLOG_CONTROL_FILE);
+ pg_log_error_hint("If you are sure the data directory path is correct, execute\n"
+ " touch %s\n"
+ "and try again.",
+ XLOG_CONTROL_FILE);
exit(1);
}
@@ -624,10 +578,7 @@ read_controlfile(void)
len = read(fd, buffer, PG_CONTROL_FILE_SIZE);
if (len < 0)
- {
- pg_log_error("could not read file \"%s\": %m", XLOG_CONTROL_FILE);
- exit(1);
- }
+ pg_fatal("could not read file \"%s\": %m", XLOG_CONTROL_FILE);
close(fd);
if (len >= sizeof(ControlFileData) &&
@@ -968,10 +919,7 @@ FindEndOfXLOG(void)
*/
xldir = opendir(XLOGDIR);
if (xldir == NULL)
- {
- pg_log_error("could not open directory \"%s\": %m", XLOGDIR);
- exit(1);
- }
+ pg_fatal("could not open directory \"%s\": %m", XLOGDIR);
while (errno = 0, (xlde = readdir(xldir)) != NULL)
{
@@ -1003,16 +951,10 @@ FindEndOfXLOG(void)
}
if (errno)
- {
- pg_log_error("could not read directory \"%s\": %m", XLOGDIR);
- exit(1);
- }
+ pg_fatal("could not read directory \"%s\": %m", XLOGDIR);
if (closedir(xldir))
- {
- pg_log_error("could not close directory \"%s\": %m", XLOGDIR);
- exit(1);
- }
+ pg_fatal("could not close directory \"%s\": %m", XLOGDIR);
/*
* Finally, convert to new xlog seg size, and advance by one to ensure we
@@ -1036,10 +978,7 @@ KillExistingXLOG(void)
xldir = opendir(XLOGDIR);
if (xldir == NULL)
- {
- pg_log_error("could not open directory \"%s\": %m", XLOGDIR);
- exit(1);
- }
+ pg_fatal("could not open directory \"%s\": %m", XLOGDIR);
while (errno = 0, (xlde = readdir(xldir)) != NULL)
{
@@ -1048,24 +987,15 @@ KillExistingXLOG(void)
{
snprintf(path, sizeof(path), "%s/%s", XLOGDIR, xlde->d_name);
if (unlink(path) < 0)
- {
- pg_log_error("could not delete file \"%s\": %m", path);
- exit(1);
- }
+ pg_fatal("could not delete file \"%s\": %m", path);
}
}
if (errno)
- {
- pg_log_error("could not read directory \"%s\": %m", XLOGDIR);
- exit(1);
- }
+ pg_fatal("could not read directory \"%s\": %m", XLOGDIR);
if (closedir(xldir))
- {
- pg_log_error("could not close directory \"%s\": %m", XLOGDIR);
- exit(1);
- }
+ pg_fatal("could not close directory \"%s\": %m", XLOGDIR);
}
@@ -1083,10 +1013,7 @@ KillExistingArchiveStatus(void)
xldir = opendir(ARCHSTATDIR);
if (xldir == NULL)
- {
- pg_log_error("could not open directory \"%s\": %m", ARCHSTATDIR);
- exit(1);
- }
+ pg_fatal("could not open directory \"%s\": %m", ARCHSTATDIR);
while (errno = 0, (xlde = readdir(xldir)) != NULL)
{
@@ -1098,24 +1025,15 @@ KillExistingArchiveStatus(void)
{
snprintf(path, sizeof(path), "%s/%s", ARCHSTATDIR, xlde->d_name);
if (unlink(path) < 0)
- {
- pg_log_error("could not delete file \"%s\": %m", path);
- exit(1);
- }
+ pg_fatal("could not delete file \"%s\": %m", path);
}
}
if (errno)
- {
- pg_log_error("could not read directory \"%s\": %m", ARCHSTATDIR);
- exit(1);
- }
+ pg_fatal("could not read directory \"%s\": %m", ARCHSTATDIR);
if (closedir(xldir))
- {
- pg_log_error("could not close directory \"%s\": %m", ARCHSTATDIR);
- exit(1);
- }
+ pg_fatal("could not close directory \"%s\": %m", ARCHSTATDIR);
}
@@ -1179,10 +1097,7 @@ WriteEmptyXLOG(void)
fd = open(path, O_RDWR | O_CREAT | O_EXCL | PG_BINARY,
pg_file_create_mode);
if (fd < 0)
- {
- pg_log_error("could not open file \"%s\": %m", path);
- exit(1);
- }
+ pg_fatal("could not open file \"%s\": %m", path);
errno = 0;
if (write(fd, buffer.data, XLOG_BLCKSZ) != XLOG_BLCKSZ)
@@ -1190,8 +1105,7 @@ WriteEmptyXLOG(void)
/* if write didn't set errno, assume problem is no disk space */
if (errno == 0)
errno = ENOSPC;
- pg_log_error("could not write file \"%s\": %m", path);
- exit(1);
+ pg_fatal("could not write file \"%s\": %m", path);
}
/* Fill the rest of the file with zeroes */
@@ -1203,16 +1117,12 @@ WriteEmptyXLOG(void)
{
if (errno == 0)
errno = ENOSPC;
- pg_log_error("could not write file \"%s\": %m", path);
- exit(1);
+ pg_fatal("could not write file \"%s\": %m", path);
}
}
if (fsync(fd) != 0)
- {
- pg_log_error("fsync error: %m");
- exit(1);
- }
+ pg_fatal("fsync error: %m");
close(fd);
}