diff options
Diffstat (limited to 'src/bin/pg_basebackup')
| -rw-r--r-- | src/bin/pg_basebackup/nls.mk | 5 | ||||
| -rw-r--r-- | src/bin/pg_basebackup/pg_basebackup.c | 412 | ||||
| -rw-r--r-- | src/bin/pg_basebackup/pg_receivewal.c | 122 | ||||
| -rw-r--r-- | src/bin/pg_basebackup/pg_recvlogical.c | 147 | ||||
| -rw-r--r-- | src/bin/pg_basebackup/receivelog.c | 204 | ||||
| -rw-r--r-- | src/bin/pg_basebackup/streamutil.c | 97 | ||||
| -rw-r--r-- | src/bin/pg_basebackup/walmethods.c | 16 |
7 files changed, 396 insertions, 607 deletions
diff --git a/src/bin/pg_basebackup/nls.mk b/src/bin/pg_basebackup/nls.mk index f7694343fc7..fece5551bda 100644 --- a/src/bin/pg_basebackup/nls.mk +++ b/src/bin/pg_basebackup/nls.mk @@ -1,5 +1,6 @@ # src/bin/pg_basebackup/nls.mk CATALOG_NAME = pg_basebackup AVAIL_LANGUAGES = de es fr he it ja ko pl pt_BR ru sv tr vi zh_CN -GETTEXT_FILES = pg_basebackup.c pg_receivewal.c pg_recvlogical.c receivelog.c streamutil.c walmethods.c ../../common/fe_memutils.c ../../common/file_utils.c -GETTEXT_TRIGGERS = simple_prompt tar_set_error +GETTEXT_FILES = $(FRONTEND_COMMON_GETTEXT_FILES) pg_basebackup.c pg_receivewal.c pg_recvlogical.c receivelog.c streamutil.c walmethods.c ../../common/fe_memutils.c ../../common/file_utils.c +GETTEXT_TRIGGERS = $(FRONTEND_COMMON_GETTEXT_TRIGGERS) simple_prompt tar_set_error +GETTEXT_FLAGS = $(FRONTEND_COMMON_GETTEXT_FLAGS) diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 916371232bf..1a735b80467 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -30,6 +30,7 @@ #include "common/file_perm.h" #include "common/file_utils.h" #include "common/string.h" +#include "fe_utils/logging.h" #include "fe_utils/string_utils.h" #include "getopt_long.h" #include "libpq-fe.h" @@ -167,57 +168,41 @@ cleanup_directories_atexit(void) { if (made_new_pgdata) { - fprintf(stderr, _("%s: removing data directory \"%s\"\n"), - progname, basedir); + pg_log_info("removing data directory \"%s\"", basedir); if (!rmtree(basedir, true)) - fprintf(stderr, _("%s: failed to remove data directory\n"), - progname); + pg_log_error("failed to remove data directory"); } else if (found_existing_pgdata) { - fprintf(stderr, - _("%s: removing contents of data directory \"%s\"\n"), - progname, basedir); + pg_log_info("removing contents of data directory \"%s\"", basedir); if (!rmtree(basedir, false)) - fprintf(stderr, _("%s: failed to remove contents of data directory\n"), - progname); + pg_log_error("failed to remove contents of data directory"); } if (made_new_xlogdir) { - fprintf(stderr, _("%s: removing WAL directory \"%s\"\n"), - progname, xlog_dir); + pg_log_info("removing WAL directory \"%s\"", xlog_dir); if (!rmtree(xlog_dir, true)) - fprintf(stderr, _("%s: failed to remove WAL directory\n"), - progname); + pg_log_error("failed to remove WAL directory"); } else if (found_existing_xlogdir) { - fprintf(stderr, - _("%s: removing contents of WAL directory \"%s\"\n"), - progname, xlog_dir); + pg_log_info("removing contents of WAL directory \"%s\"", xlog_dir); if (!rmtree(xlog_dir, false)) - fprintf(stderr, _("%s: failed to remove contents of WAL directory\n"), - progname); + pg_log_error("failed to remove contents of WAL directory"); } } else { if ((made_new_pgdata || found_existing_pgdata) && !checksum_failure) - fprintf(stderr, - _("%s: data directory \"%s\" not removed at user's request\n"), - progname, basedir); + pg_log_info("data directory \"%s\" not removed at user's request", basedir); if (made_new_xlogdir || found_existing_xlogdir) - fprintf(stderr, - _("%s: WAL directory \"%s\" not removed at user's request\n"), - progname, xlog_dir); + pg_log_info("WAL directory \"%s\" not removed at user's request", xlog_dir); } if ((made_tablespace_dirs || found_tablespace_dirs) && !checksum_failure) - fprintf(stderr, - _("%s: changes to tablespace directories will not be undone\n"), - progname); + pg_log_info("changes to tablespace directories will not be undone"); } static void @@ -258,7 +243,7 @@ tablespace_list_append(const char *arg) { if (dst_ptr - dst >= MAXPGPATH) { - fprintf(stderr, _("%s: directory name too long\n"), progname); + pg_log_error("directory name too long"); exit(1); } @@ -268,7 +253,7 @@ tablespace_list_append(const char *arg) { if (*cell->new_dir) { - fprintf(stderr, _("%s: multiple \"=\" signs in tablespace mapping\n"), progname); + pg_log_error("multiple \"=\" signs in tablespace mapping"); exit(1); } else @@ -280,9 +265,7 @@ tablespace_list_append(const char *arg) if (!*cell->old_dir || !*cell->new_dir) { - fprintf(stderr, - _("%s: invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"\n"), - progname, arg); + pg_log_error("invalid tablespace mapping format \"%s\", must be \"OLDDIR=NEWDIR\"", arg); exit(1); } @@ -294,15 +277,15 @@ tablespace_list_append(const char *arg) */ if (!is_absolute_path(cell->old_dir)) { - fprintf(stderr, _("%s: old directory is not an absolute path in tablespace mapping: %s\n"), - progname, cell->old_dir); + pg_log_error("old directory is not an absolute path in tablespace mapping: %s", + cell->old_dir); exit(1); } if (!is_absolute_path(cell->new_dir)) { - fprintf(stderr, _("%s: new directory is not an absolute path in tablespace mapping: %s\n"), - progname, cell->new_dir); + pg_log_error("new directory is not an absolute path in tablespace mapping: %s", + cell->new_dir); exit(1); } @@ -425,16 +408,14 @@ reached_end_position(XLogRecPtr segendpos, uint32 timeline, r = read(bgpipe[0], xlogend, sizeof(xlogend) - 1); if (r < 0) { - fprintf(stderr, _("%s: could not read from ready pipe: %s\n"), - progname, strerror(errno)); + pg_log_error("could not read from ready pipe: %m"); exit(1); } if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse write-ahead log location \"%s\"\n"), - progname, xlogend); + pg_log_error("could not parse write-ahead log location \"%s\"", + xlogend); exit(1); } xlogendptr = ((uint64) hi) << 32 | lo; @@ -526,9 +507,7 @@ LogStreamerMain(logstreamer_param *param) if (!stream.walmethod->finish()) { - fprintf(stderr, - _("%s: could not finish writing WAL files: %s\n"), - progname, strerror(errno)); + pg_log_error("could not finish writing WAL files: %m"); return 1; } @@ -563,9 +542,8 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) /* Convert the starting position */ if (sscanf(startpos, "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse write-ahead log location \"%s\"\n"), - progname, startpos); + pg_log_error("could not parse write-ahead log location \"%s\"", + startpos); exit(1); } param->startptr = ((uint64) hi) << 32 | lo; @@ -576,9 +554,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) /* Create our background pipe */ if (pipe(bgpipe) < 0) { - fprintf(stderr, - _("%s: could not create pipe for background process: %s\n"), - progname, strerror(errno)); + pg_log_error("could not create pipe for background process: %m"); exit(1); } #endif @@ -613,11 +589,11 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) if (verbose) { if (temp_replication_slot) - fprintf(stderr, _("%s: created temporary replication slot \"%s\"\n"), - progname, replication_slot); + pg_log_info("created temporary replication slot \"%s\"", + replication_slot); else - fprintf(stderr, _("%s: created replication slot \"%s\"\n"), - progname, replication_slot); + pg_log_info("created replication slot \"%s\"", + replication_slot); } } @@ -636,9 +612,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) if (pg_mkdir_p(statusdir, pg_dir_create_mode) != 0 && errno != EEXIST) { - fprintf(stderr, - _("%s: could not create directory \"%s\": %s\n"), - progname, statusdir, strerror(errno)); + pg_log_error("could not create directory \"%s\": %m", statusdir); exit(1); } } @@ -656,8 +630,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) } else if (bgchild < 0) { - fprintf(stderr, _("%s: could not create background process: %s\n"), - progname, strerror(errno)); + pg_log_error("could not create background process: %m"); exit(1); } @@ -669,8 +642,7 @@ StartLogStreamer(char *startpos, uint32 timeline, char *sysidentifier) bgchild = _beginthreadex(NULL, 0, (void *) LogStreamerMain, param, 0, NULL); if (bgchild == 0) { - fprintf(stderr, _("%s: could not create background thread: %s\n"), - progname, strerror(errno)); + pg_log_error("could not create background thread: %m"); exit(1); } #endif @@ -693,9 +665,7 @@ verify_dir_is_empty_or_create(char *dirname, bool *created, bool *found) */ if (pg_mkdir_p(dirname, pg_dir_create_mode) == -1) { - fprintf(stderr, - _("%s: could not create directory \"%s\": %s\n"), - progname, dirname, strerror(errno)); + pg_log_error("could not create directory \"%s\": %m", dirname); exit(1); } if (created) @@ -716,17 +686,14 @@ verify_dir_is_empty_or_create(char *dirname, bool *created, bool *found) /* * Exists, not empty */ - fprintf(stderr, - _("%s: directory \"%s\" exists but is not empty\n"), - progname, dirname); + pg_log_error("directory \"%s\" exists but is not empty", dirname); exit(1); case -1: /* * Access problem */ - fprintf(stderr, _("%s: could not access directory \"%s\": %s\n"), - progname, dirname, strerror(errno)); + pg_log_error("could not access directory \"%s\": %m", dirname); exit(1); } } @@ -839,16 +806,12 @@ parse_max_rate(char *src) result = strtod(src, &after_num); if (src == after_num) { - fprintf(stderr, - _("%s: transfer rate \"%s\" is not a valid value\n"), - progname, src); + pg_log_error("transfer rate \"%s\" is not a valid value", src); exit(1); } if (errno != 0) { - fprintf(stderr, - _("%s: invalid transfer rate \"%s\": %s\n"), - progname, src, strerror(errno)); + pg_log_error("invalid transfer rate \"%s\": %m", src); exit(1); } @@ -857,8 +820,7 @@ parse_max_rate(char *src) /* * Reject obviously wrong values here. */ - fprintf(stderr, _("%s: transfer rate must be greater than zero\n"), - progname); + pg_log_error("transfer rate must be greater than zero"); exit(1); } @@ -890,18 +852,14 @@ parse_max_rate(char *src) if (*after_num != '\0') { - fprintf(stderr, - _("%s: invalid --max-rate unit: \"%s\"\n"), - progname, suffix); + pg_log_error("invalid --max-rate unit: \"%s\"", suffix); exit(1); } /* Valid integer? */ if ((uint64) result != (uint64) ((uint32) result)) { - fprintf(stderr, - _("%s: transfer rate \"%s\" exceeds integer range\n"), - progname, src); + pg_log_error("transfer rate \"%s\" exceeds integer range", src); exit(1); } @@ -911,9 +869,7 @@ parse_max_rate(char *src) */ if (result < MAX_RATE_LOWER || result > MAX_RATE_UPPER) { - fprintf(stderr, - _("%s: transfer rate \"%s\" is out of range\n"), - progname, src); + pg_log_error("transfer rate \"%s\" is out of range", src); exit(1); } @@ -935,9 +891,8 @@ writeTarData( { if (gzwrite(ztarfile, buf, r) != r) { - fprintf(stderr, - _("%s: could not write to compressed file \"%s\": %s\n"), - progname, current_file, get_gz_error(ztarfile)); + pg_log_error("could not write to compressed file \"%s\": %s", + current_file, get_gz_error(ztarfile)); exit(1); } } @@ -946,8 +901,7 @@ writeTarData( { if (fwrite(buf, r, 1, tarfile) != 1) { - fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"), - progname, current_file, strerror(errno)); + pg_log_error("could not write to file \"%s\": %m", current_file); exit(1); } } @@ -1012,9 +966,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) if (gzsetparams(ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK) { - fprintf(stderr, - _("%s: could not set compression level %d: %s\n"), - progname, compresslevel, get_gz_error(ztarfile)); + pg_log_error("could not set compression level %d: %s", + compresslevel, get_gz_error(ztarfile)); exit(1); } } @@ -1033,9 +986,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) if (gzsetparams(ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK) { - fprintf(stderr, - _("%s: could not set compression level %d: %s\n"), - progname, compresslevel, get_gz_error(ztarfile)); + pg_log_error("could not set compression level %d: %s", + compresslevel, get_gz_error(ztarfile)); exit(1); } } @@ -1061,9 +1013,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) if (gzsetparams(ztarfile, compresslevel, Z_DEFAULT_STRATEGY) != Z_OK) { - fprintf(stderr, - _("%s: could not set compression level %d: %s\n"), - progname, compresslevel, get_gz_error(ztarfile)); + pg_log_error("could not set compression level %d: %s", + compresslevel, get_gz_error(ztarfile)); exit(1); } } @@ -1082,9 +1033,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) if (!ztarfile) { /* Compression is in use */ - fprintf(stderr, - _("%s: could not create compressed file \"%s\": %s\n"), - progname, filename, get_gz_error(ztarfile)); + pg_log_error("could not create compressed file \"%s\": %s", + filename, get_gz_error(ztarfile)); exit(1); } } @@ -1094,8 +1044,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) /* Either no zlib support, or zlib support but compresslevel = 0 */ if (!tarfile) { - fprintf(stderr, _("%s: could not create file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not create file \"%s\": %m", filename); exit(1); } } @@ -1106,8 +1055,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) res = PQgetResult(conn); if (PQresultStatus(res) != PGRES_COPY_OUT) { - fprintf(stderr, _("%s: could not get COPY data stream: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not get COPY data stream: %s", + PQerrorMessage(conn)); exit(1); } @@ -1191,9 +1140,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) { if (gzclose(ztarfile) != 0) { - fprintf(stderr, - _("%s: could not close compressed file \"%s\": %s\n"), - progname, filename, get_gz_error(ztarfile)); + pg_log_error("could not close compressed file \"%s\": %s", + filename, get_gz_error(ztarfile)); exit(1); } } @@ -1204,9 +1152,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) { if (fclose(tarfile) != 0) { - fprintf(stderr, - _("%s: could not close file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not close file \"%s\": %m", + filename); exit(1); } } @@ -1216,8 +1163,8 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) } else if (r == -2) { - fprintf(stderr, _("%s: could not read COPY data: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not read COPY data: %s", + PQerrorMessage(conn)); exit(1); } @@ -1401,7 +1348,7 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) /* sync the resulting tar file, errors are not considered fatal */ if (do_sync && strcmp(basedir, "-") != 0) - (void) fsync_fname(filename, false, progname); + (void) fsync_fname(filename, false); } @@ -1462,8 +1409,8 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) res = PQgetResult(conn); if (PQresultStatus(res) != PGRES_COPY_OUT) { - fprintf(stderr, _("%s: could not get COPY data stream: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not get COPY data stream: %s", + PQerrorMessage(conn)); exit(1); } @@ -1491,8 +1438,8 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) } else if (r == -2) { - fprintf(stderr, _("%s: could not read COPY data: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not read COPY data: %s", + PQerrorMessage(conn)); exit(1); } @@ -1505,8 +1452,7 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) */ if (r != 512) { - fprintf(stderr, _("%s: invalid tar block header size: %d\n"), - progname, r); + pg_log_error("invalid tar block header size: %d", r); exit(1); } totaldone += 512; @@ -1554,17 +1500,15 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) pg_str_endswith(filename, "/archive_status")) && errno == EEXIST)) { - fprintf(stderr, - _("%s: could not create directory \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not create directory \"%s\": %m", + filename); exit(1); } } #ifndef WIN32 if (chmod(filename, (mode_t) filemode)) - fprintf(stderr, - _("%s: could not set permissions on directory \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not set permissions on directory \"%s\": %m", + filename); #endif } else if (copybuf[156] == '2') @@ -1586,18 +1530,15 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) mapped_tblspc_path = get_tablespace_mapping(©buf[157]); if (symlink(mapped_tblspc_path, filename) != 0) { - fprintf(stderr, - _("%s: could not create symbolic link from \"%s\" to \"%s\": %s\n"), - progname, filename, mapped_tblspc_path, - strerror(errno)); + pg_log_error("could not create symbolic link from \"%s\" to \"%s\": %m", + filename, mapped_tblspc_path); exit(1); } } else { - fprintf(stderr, - _("%s: unrecognized link indicator \"%c\"\n"), - progname, copybuf[156]); + pg_log_error("unrecognized link indicator \"%c\"", + copybuf[156]); exit(1); } continue; /* directory or link handled */ @@ -1609,15 +1550,14 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) file = fopen(filename, "wb"); if (!file) { - fprintf(stderr, _("%s: could not create file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not create file \"%s\": %m", filename); exit(1); } #ifndef WIN32 if (chmod(filename, (mode_t) filemode)) - fprintf(stderr, _("%s: could not set permissions on file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not set permissions on file \"%s\": %m", + filename); #endif if (current_len_left == 0) @@ -1649,8 +1589,7 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) if (fwrite(copybuf, r, 1, file) != 1) { - fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not write to file \"%s\": %m", filename); exit(1); } totaldone += r; @@ -1674,9 +1613,7 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) if (file != NULL) { - fprintf(stderr, - _("%s: COPY stream ended before last file was finished\n"), - progname); + pg_log_error("COPY stream ended before last file was finished"); exit(1); } @@ -1703,7 +1640,7 @@ escape_quotes(const char *src) if (!result) { - fprintf(stderr, _("%s: out of memory\n"), progname); + pg_log_error("out of memory"); exit(1); } return result; @@ -1723,7 +1660,7 @@ GenerateRecoveryConf(PGconn *conn) recoveryconfcontents = createPQExpBuffer(); if (!recoveryconfcontents) { - fprintf(stderr, _("%s: out of memory\n"), progname); + pg_log_error("out of memory"); exit(1); } @@ -1737,7 +1674,7 @@ GenerateRecoveryConf(PGconn *conn) connOptions = PQconninfo(conn); if (connOptions == NULL) { - fprintf(stderr, _("%s: out of memory\n"), progname); + pg_log_error("out of memory"); exit(1); } @@ -1788,7 +1725,7 @@ GenerateRecoveryConf(PGconn *conn) if (PQExpBufferBroken(recoveryconfcontents) || PQExpBufferDataBroken(conninfo_buf)) { - fprintf(stderr, _("%s: out of memory\n"), progname); + pg_log_error("out of memory"); exit(1); } @@ -1821,16 +1758,13 @@ WriteRecoveryConf(void) cf = fopen(filename, is_recovery_guc_supported ? "a" : "w"); if (cf == NULL) { - fprintf(stderr, _("%s: could not open file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not open file \"%s\": %m", filename); exit(1); } if (fwrite(recoveryconfcontents->data, recoveryconfcontents->len, 1, cf) != 1) { - fprintf(stderr, - _("%s: could not write to file \"%s\": %s\n"), - progname, filename, strerror(errno)); + pg_log_error("could not write to file \"%s\": %m", filename); exit(1); } @@ -1842,7 +1776,7 @@ WriteRecoveryConf(void) cf = fopen(filename, "w"); if (cf == NULL) { - fprintf(stderr, _("%s: could not create file \"%s\": %s\n"), progname, filename, strerror(errno)); + pg_log_error("could not create file \"%s\": %m", filename); exit(1); } @@ -1883,8 +1817,8 @@ BaseBackup(void) { const char *serverver = PQparameterStatus(conn, "server_version"); - fprintf(stderr, _("%s: incompatible server version %s\n"), - progname, serverver ? serverver : "'unknown'"); + pg_log_error("incompatible server version %s", + serverver ? serverver : "'unknown'"); exit(1); } @@ -1898,7 +1832,7 @@ BaseBackup(void) * Error message already written in CheckServerVersionForStreaming(), * but add a hint about using -X none. */ - fprintf(stderr, _("HINT: use -X none or -X fetch to disable log streaming\n")); + pg_log_info("HINT: use -X none or -X fetch to disable log streaming"); exit(1); } @@ -1923,9 +1857,7 @@ BaseBackup(void) maxrate_clause = psprintf("MAX_RATE %u", maxrate); if (verbose) - fprintf(stderr, - _("%s: initiating base backup, waiting for checkpoint to complete\n"), - progname); + pg_log_info("initiating base backup, waiting for checkpoint to complete"); if (showprogress && !verbose) { @@ -1949,8 +1881,8 @@ BaseBackup(void) if (PQsendQuery(conn, basebkp) == 0) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, "BASE_BACKUP", PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + "BASE_BACKUP", PQerrorMessage(conn)); exit(1); } @@ -1960,22 +1892,21 @@ BaseBackup(void) res = PQgetResult(conn); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not initiate base backup: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not initiate base backup: %s", + PQerrorMessage(conn)); exit(1); } if (PQntuples(res) != 1) { - fprintf(stderr, - _("%s: server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 2); + pg_log_error("server returned unexpected response to BASE_BACKUP command; got %d rows and %d fields, expected %d rows and %d fields", + PQntuples(res), PQnfields(res), 1, 2); exit(1); } strlcpy(xlogstart, PQgetvalue(res, 0, 0), sizeof(xlogstart)); if (verbose) - fprintf(stderr, _("%s: checkpoint completed\n"), progname); + pg_log_info("checkpoint completed"); /* * 9.3 and later sends the TLI of the starting point. With older servers, @@ -1990,8 +1921,8 @@ BaseBackup(void) MemSet(xlogend, 0, sizeof(xlogend)); if (verbose && includewal != NO_WAL) - fprintf(stderr, _("%s: write-ahead log start point: %s on timeline %u\n"), - progname, xlogstart, starttli); + pg_log_info("write-ahead log start point: %s on timeline %u", + xlogstart, starttli); /* * Get the header @@ -1999,13 +1930,13 @@ BaseBackup(void) res = PQgetResult(conn); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not get backup header: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not get backup header: %s", + PQerrorMessage(conn)); exit(1); } if (PQntuples(res) < 1) { - fprintf(stderr, _("%s: no data returned from server\n"), progname); + pg_log_error("no data returned from server"); exit(1); } @@ -2036,9 +1967,8 @@ BaseBackup(void) */ if (format == 't' && strcmp(basedir, "-") == 0 && PQntuples(res) > 1) { - fprintf(stderr, - _("%s: can only write single tablespace to stdout, database has %d\n"), - progname, PQntuples(res)); + pg_log_error("can only write single tablespace to stdout, database has %d", + PQntuples(res)); exit(1); } @@ -2049,8 +1979,7 @@ BaseBackup(void) if (includewal == STREAM_WAL) { if (verbose) - fprintf(stderr, _("%s: starting background WAL receiver\n"), - progname); + pg_log_info("starting background WAL receiver"); StartLogStreamer(xlogstart, starttli, sysidentifier); } @@ -2080,21 +2009,18 @@ BaseBackup(void) res = PQgetResult(conn); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, - _("%s: could not get write-ahead log end position from server: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not get write-ahead log end position from server: %s", + PQerrorMessage(conn)); exit(1); } if (PQntuples(res) != 1) { - fprintf(stderr, - _("%s: no write-ahead log end position returned from server\n"), - progname); + pg_log_error("no write-ahead log end position returned from server"); exit(1); } strlcpy(xlogend, PQgetvalue(res, 0, 0), sizeof(xlogend)); if (verbose && includewal != NO_WAL) - fprintf(stderr, _("%s: write-ahead log end point: %s\n"), progname, xlogend); + pg_log_info("write-ahead log end point: %s", xlogend); PQclear(res); res = PQgetResult(conn); @@ -2105,14 +2031,13 @@ BaseBackup(void) if (sqlstate && strcmp(sqlstate, ERRCODE_DATA_CORRUPTED) == 0) { - fprintf(stderr, _("%s: checksum error occurred\n"), - progname); + pg_log_error("checksum error occurred"); checksum_failure = true; } else { - fprintf(stderr, _("%s: final receive failed: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("final receive failed: %s", + PQerrorMessage(conn)); } exit(1); } @@ -2135,15 +2060,12 @@ BaseBackup(void) #endif if (verbose) - fprintf(stderr, - _("%s: waiting for background process to finish streaming ...\n"), progname); + pg_log_info("waiting for background process to finish streaming ..."); #ifndef WIN32 if (write(bgpipe[1], xlogend, strlen(xlogend)) != strlen(xlogend)) { - fprintf(stderr, - _("%s: could not send command to background pipe: %s\n"), - progname, strerror(errno)); + pg_log_info("could not send command to background pipe: %m"); exit(1); } @@ -2151,20 +2073,17 @@ BaseBackup(void) r = waitpid(bgchild, &status, 0); if (r == (pid_t) -1) { - fprintf(stderr, _("%s: could not wait for child process: %s\n"), - progname, strerror(errno)); + pg_log_error("could not wait for child process: %m"); exit(1); } if (r != bgchild) { - fprintf(stderr, _("%s: child %d died, expected %d\n"), - progname, (int) r, (int) bgchild); + pg_log_error("child %d died, expected %d", (int) r, (int) bgchild); exit(1); } if (status != 0) { - fprintf(stderr, "%s: %s\n", - progname, wait_result_to_str(status)); + pg_log_error("%s", wait_result_to_str(status)); exit(1); } /* Exited normally, we're happy! */ @@ -2177,9 +2096,8 @@ BaseBackup(void) */ if (sscanf(xlogend, "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse write-ahead log location \"%s\"\n"), - progname, xlogend); + pg_log_error("could not parse write-ahead log location \"%s\"", + xlogend); exit(1); } xlogendptr = ((uint64) hi) << 32 | lo; @@ -2190,21 +2108,19 @@ BaseBackup(void) WAIT_OBJECT_0) { _dosmaperr(GetLastError()); - fprintf(stderr, _("%s: could not wait for child thread: %s\n"), - progname, strerror(errno)); + pg_log_error("could not wait for child thread: %m"); exit(1); } if (GetExitCodeThread((HANDLE) bgchild_handle, &status) == 0) { _dosmaperr(GetLastError()); - fprintf(stderr, _("%s: could not get child thread exit status: %s\n"), - progname, strerror(errno)); + pg_log_error("could not get child thread exit status: %m"); exit(1); } if (status != 0) { - fprintf(stderr, _("%s: child thread exited with error %u\n"), - progname, (unsigned int) status); + pg_log_error("child thread exited with error %u", + (unsigned int) status); exit(1); } /* Exited normally, we're happy */ @@ -2231,21 +2147,20 @@ BaseBackup(void) if (do_sync) { if (verbose) - fprintf(stderr, - _("%s: syncing data to disk ...\n"), progname); + pg_log_info("syncing data to disk ..."); if (format == 't') { if (strcmp(basedir, "-") != 0) - (void) fsync_fname(basedir, true, progname); + (void) fsync_fname(basedir, true); } else { - (void) fsync_pgdata(basedir, progname, serverVersion); + (void) fsync_pgdata(basedir, serverVersion); } } if (verbose) - fprintf(stderr, _("%s: base backup completed\n"), progname); + pg_log_info("base backup completed"); } @@ -2287,6 +2202,7 @@ main(int argc, char **argv) int option_index; + pg_logging_init(argv[0]); progname = get_progname(argv[0]); set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_basebackup")); @@ -2325,9 +2241,8 @@ main(int argc, char **argv) format = 't'; else { - fprintf(stderr, - _("%s: invalid output format \"%s\", must be \"plain\" or \"tar\"\n"), - progname, optarg); + pg_log_error("invalid output format \"%s\", must be \"plain\" or \"tar\"\n", + optarg); exit(1); } break; @@ -2370,9 +2285,8 @@ main(int argc, char **argv) } else { - fprintf(stderr, - _("%s: invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"\n"), - progname, optarg); + pg_log_error("invalid wal-method option \"%s\", must be \"fetch\", \"stream\", or \"none\"", + optarg); exit(1); } break; @@ -2399,8 +2313,7 @@ main(int argc, char **argv) compresslevel = atoi(optarg); if (compresslevel < 0 || compresslevel > 9) { - fprintf(stderr, _("%s: invalid compression level \"%s\"\n"), - progname, optarg); + pg_log_error("invalid compression level \"%s\"\n", optarg); exit(1); } break; @@ -2411,8 +2324,8 @@ main(int argc, char **argv) fastcheckpoint = false; else { - fprintf(stderr, _("%s: invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"\n"), - progname, optarg); + pg_log_error("invalid checkpoint argument \"%s\", must be \"fast\" or \"spread\"", + optarg); exit(1); } break; @@ -2438,8 +2351,7 @@ main(int argc, char **argv) standby_message_timeout = atoi(optarg) * 1000; if (standby_message_timeout < 0) { - fprintf(stderr, _("%s: invalid status interval \"%s\"\n"), - progname, optarg); + pg_log_error("invalid status interval \"%s\"", optarg); exit(1); } break; @@ -2468,9 +2380,8 @@ main(int argc, char **argv) */ if (optind < argc) { - fprintf(stderr, - _("%s: too many command-line arguments (first is \"%s\")\n"), - progname, argv[optind]); + pg_log_error("too many command-line arguments (first is \"%s\")", + argv[optind]); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2481,7 +2392,7 @@ main(int argc, char **argv) */ if (basedir == NULL) { - fprintf(stderr, _("%s: no target directory specified\n"), progname); + pg_log_error("no target directory specified"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2492,9 +2403,7 @@ main(int argc, char **argv) */ if (format == 'p' && compresslevel != 0) { - fprintf(stderr, - _("%s: only tar mode backups can be compressed\n"), - progname); + pg_log_error("only tar mode backups can be compressed"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2502,9 +2411,7 @@ main(int argc, char **argv) if (format == 't' && includewal == STREAM_WAL && strcmp(basedir, "-") == 0) { - fprintf(stderr, - _("%s: cannot stream write-ahead logs in tar mode to stdout\n"), - progname); + pg_log_error("cannot stream write-ahead logs in tar mode to stdout"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2512,9 +2419,7 @@ main(int argc, char **argv) if (replication_slot && includewal != STREAM_WAL) { - fprintf(stderr, - _("%s: replication slots can only be used with WAL streaming\n"), - progname); + pg_log_error("replication slots can only be used with WAL streaming"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2524,9 +2429,7 @@ main(int argc, char **argv) { if (replication_slot) { - fprintf(stderr, - _("%s: --no-slot cannot be used with slot name\n"), - progname); + pg_log_error("--no-slot cannot be used with slot name"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2538,9 +2441,8 @@ main(int argc, char **argv) { if (!replication_slot) { - fprintf(stderr, - _("%s: %s needs a slot to be specified using --slot\n"), - progname, "--create-slot"); + pg_log_error("%s needs a slot to be specified using --slot", + "--create-slot"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2548,9 +2450,7 @@ main(int argc, char **argv) if (no_slot) { - fprintf(stderr, - _("%s: --create-slot and --no-slot are incompatible options\n"), - progname); + pg_log_error("--create-slot and --no-slot are incompatible options"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2561,9 +2461,7 @@ main(int argc, char **argv) { if (format != 'p') { - fprintf(stderr, - _("%s: WAL directory location can only be specified in plain mode\n"), - progname); + pg_log_error("WAL directory location can only be specified in plain mode"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2573,8 +2471,7 @@ main(int argc, char **argv) canonicalize_path(xlog_dir); if (!is_absolute_path(xlog_dir)) { - fprintf(stderr, _("%s: WAL directory location must be " - "an absolute path\n"), progname); + pg_log_error("WAL directory location must be an absolute path"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -2584,9 +2481,7 @@ main(int argc, char **argv) #ifndef HAVE_LIBZ if (compresslevel != 0) { - fprintf(stderr, - _("%s: this build does not support compression\n"), - progname); + pg_log_error("this build does not support compression"); exit(1); } #endif @@ -2640,12 +2535,11 @@ main(int argc, char **argv) #ifdef HAVE_SYMLINK if (symlink(xlog_dir, linkloc) != 0) { - fprintf(stderr, _("%s: could not create symbolic link \"%s\": %s\n"), - progname, linkloc, strerror(errno)); + pg_log_error("could not create symbolic link \"%s\": %m", linkloc); exit(1); } #else - fprintf(stderr, _("%s: symlinks are not supported on this platform\n"), progname); + pg_log_error("symlinks are not supported on this platform"); exit(1); #endif free(linkloc); diff --git a/src/bin/pg_basebackup/pg_receivewal.c b/src/bin/pg_basebackup/pg_receivewal.c index aa114f1563d..9e4d296129c 100644 --- a/src/bin/pg_basebackup/pg_receivewal.c +++ b/src/bin/pg_basebackup/pg_receivewal.c @@ -20,6 +20,7 @@ #include <unistd.h> #include "common/file_perm.h" +#include "fe_utils/logging.h" #include "libpq-fe.h" #include "access/xlog_internal.h" #include "getopt_long.h" @@ -114,16 +115,16 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished) /* we assume that we get called once at the end of each segment */ if (verbose && segment_finished) - fprintf(stderr, _("%s: finished segment at %X/%X (timeline %u)\n"), - progname, (uint32) (xlogpos >> 32), (uint32) xlogpos, - timeline); + pg_log_info("finished segment at %X/%X (timeline %u)", + (uint32) (xlogpos >> 32), (uint32) xlogpos, + timeline); if (!XLogRecPtrIsInvalid(endpos) && endpos < xlogpos) { if (verbose) - fprintf(stderr, _("%s: stopped log streaming at %X/%X (timeline %u)\n"), - progname, (uint32) (xlogpos >> 32), (uint32) xlogpos, - timeline); + pg_log_info("stopped log streaming at %X/%X (timeline %u)", + (uint32) (xlogpos >> 32), (uint32) xlogpos, + timeline); time_to_stop = true; return true; } @@ -137,9 +138,9 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished) * timeline, but it's close enough for reporting purposes. */ if (verbose && prevtimeline != 0 && prevtimeline != timeline) - fprintf(stderr, _("%s: switched to timeline %u at %X/%X\n"), - progname, timeline, - (uint32) (prevpos >> 32), (uint32) prevpos); + pg_log_info("switched to timeline %u at %X/%X", + timeline, + (uint32) (prevpos >> 32), (uint32) prevpos); prevtimeline = timeline; prevpos = xlogpos; @@ -147,8 +148,7 @@ stop_streaming(XLogRecPtr xlogpos, uint32 timeline, bool segment_finished) if (time_to_stop) { if (verbose) - fprintf(stderr, _("%s: received interrupt signal, exiting\n"), - progname); + pg_log_info("received interrupt signal, exiting"); return true; } return false; @@ -167,8 +167,7 @@ get_destination_dir(char *dest_folder) dir = opendir(dest_folder); if (dir == NULL) { - fprintf(stderr, _("%s: could not open directory \"%s\": %s\n"), - progname, basedir, strerror(errno)); + pg_log_error("could not open directory \"%s\": %m", basedir); exit(1); } @@ -185,8 +184,7 @@ close_destination_dir(DIR *dest_dir, char *dest_folder) Assert(dest_dir != NULL && dest_folder != NULL); if (closedir(dest_dir)) { - fprintf(stderr, _("%s: could not close directory \"%s\": %s\n"), - progname, dest_folder, strerror(errno)); + pg_log_error("could not close directory \"%s\": %m", dest_folder); exit(1); } } @@ -266,16 +264,14 @@ FindStreamingStart(uint32 *tli) snprintf(fullpath, sizeof(fullpath), "%s/%s", basedir, dirent->d_name); if (stat(fullpath, &statbuf) != 0) { - fprintf(stderr, _("%s: could not stat file \"%s\": %s\n"), - progname, fullpath, strerror(errno)); + pg_log_error("could not stat file \"%s\": %m", fullpath); exit(1); } if (statbuf.st_size != WalSegSz) { - fprintf(stderr, - _("%s: segment file \"%s\" has incorrect size %d, skipping\n"), - progname, dirent->d_name, (int) statbuf.st_size); + pg_log_warning("segment file \"%s\" has incorrect size %d, skipping", + dirent->d_name, (int) statbuf.st_size); continue; } } @@ -292,25 +288,25 @@ FindStreamingStart(uint32 *tli) fd = open(fullpath, O_RDONLY | PG_BINARY, 0); if (fd < 0) { - fprintf(stderr, _("%s: could not open compressed file \"%s\": %s\n"), - progname, fullpath, strerror(errno)); + pg_log_error("could not open compressed file \"%s\": %m", + fullpath); exit(1); } if (lseek(fd, (off_t) (-4), SEEK_END) < 0) { - fprintf(stderr, _("%s: could not seek in compressed file \"%s\": %s\n"), - progname, fullpath, strerror(errno)); + pg_log_error("could not seek in compressed file \"%s\": %m", + fullpath); exit(1); } r = read(fd, (char *) buf, sizeof(buf)); if (r != sizeof(buf)) { if (r < 0) - fprintf(stderr, _("%s: could not read compressed file \"%s\": %s\n"), - progname, fullpath, strerror(errno)); + pg_log_error("could not read compressed file \"%s\": %m", + fullpath); else - fprintf(stderr, _("%s: could not read compressed file \"%s\": read %d of %zu\n"), - progname, fullpath, r, sizeof(buf)); + pg_log_error("could not read compressed file \"%s\": read %d of %zu", + fullpath, r, sizeof(buf)); exit(1); } @@ -320,9 +316,8 @@ FindStreamingStart(uint32 *tli) if (bytes_out != WalSegSz) { - fprintf(stderr, - _("%s: compressed segment file \"%s\" has incorrect uncompressed size %d, skipping\n"), - progname, dirent->d_name, bytes_out); + pg_log_warning("compressed segment file \"%s\" has incorrect uncompressed size %d, skipping", + dirent->d_name, bytes_out); continue; } } @@ -340,8 +335,7 @@ FindStreamingStart(uint32 *tli) if (errno) { - fprintf(stderr, _("%s: could not read directory \"%s\": %s\n"), - progname, basedir, strerror(errno)); + pg_log_error("could not read directory \"%s\": %m", basedir); exit(1); } @@ -426,10 +420,9 @@ StreamLog(void) * Start the replication */ if (verbose) - fprintf(stderr, - _("%s: starting log streaming at %X/%X (timeline %u)\n"), - progname, (uint32) (stream.startpos >> 32), (uint32) stream.startpos, - stream.timeline); + pg_log_info("starting log streaming at %X/%X (timeline %u)", + (uint32) (stream.startpos >> 32), (uint32) stream.startpos, + stream.timeline); stream.stream_stop = stop_streaming; stream.stop_socket = PGINVALID_SOCKET; @@ -446,9 +439,7 @@ StreamLog(void) if (!stream.walmethod->finish()) { - fprintf(stderr, - _("%s: could not finish writing WAL files: %s\n"), - progname, strerror(errno)); + pg_log_info("could not finish writing WAL files: %m"); return; } @@ -508,6 +499,7 @@ main(int argc, char **argv) uint32 hi, lo; + pg_logging_init(argv[0]); progname = get_progname(argv[0]); set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_basebackup")); @@ -543,8 +535,7 @@ main(int argc, char **argv) case 'p': if (atoi(optarg) <= 0) { - fprintf(stderr, _("%s: invalid port number \"%s\"\n"), - progname, optarg); + pg_log_error("invalid port number \"%s\"", optarg); exit(1); } dbport = pg_strdup(optarg); @@ -562,8 +553,7 @@ main(int argc, char **argv) standby_message_timeout = atoi(optarg) * 1000; if (standby_message_timeout < 0) { - fprintf(stderr, _("%s: invalid status interval \"%s\"\n"), - progname, optarg); + pg_log_error("invalid status interval \"%s\"", optarg); exit(1); } break; @@ -573,9 +563,7 @@ main(int argc, char **argv) case 'E': if (sscanf(optarg, "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse end position \"%s\"\n"), - progname, optarg); + pg_log_error("could not parse end position \"%s\"", optarg); exit(1); } endpos = ((uint64) hi) << 32 | lo; @@ -590,8 +578,7 @@ main(int argc, char **argv) compresslevel = atoi(optarg); if (compresslevel < 0 || compresslevel > 9) { - fprintf(stderr, _("%s: invalid compression level \"%s\"\n"), - progname, optarg); + pg_log_error("invalid compression level \"%s\"", optarg); exit(1); } break; @@ -627,9 +614,8 @@ main(int argc, char **argv) */ if (optind < argc) { - fprintf(stderr, - _("%s: too many command-line arguments (first is \"%s\")\n"), - progname, argv[optind]); + pg_log_error("too many command-line arguments (first is \"%s\")", + argv[optind]); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -637,7 +623,7 @@ main(int argc, char **argv) if (do_drop_slot && do_create_slot) { - fprintf(stderr, _("%s: cannot use --create-slot together with --drop-slot\n"), progname); + pg_log_error("cannot use --create-slot together with --drop-slot"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -646,7 +632,7 @@ main(int argc, char **argv) if (replication_slot == NULL && (do_drop_slot || do_create_slot)) { /* translator: second %s is an option name */ - fprintf(stderr, _("%s: %s needs a slot to be specified using --slot\n"), progname, + pg_log_error("%s needs a slot to be specified using --slot", do_drop_slot ? "--drop-slot" : "--create-slot"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); @@ -655,7 +641,7 @@ main(int argc, char **argv) if (synchronous && !do_sync) { - fprintf(stderr, _("%s: cannot use --synchronous together with --no-sync\n"), progname); + pg_log_error("cannot use --synchronous together with --no-sync"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -666,7 +652,7 @@ main(int argc, char **argv) */ if (basedir == NULL && !do_drop_slot && !do_create_slot) { - fprintf(stderr, _("%s: no target directory specified\n"), progname); + pg_log_error("no target directory specified"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -675,9 +661,7 @@ main(int argc, char **argv) #ifndef HAVE_LIBZ if (compresslevel != 0) { - fprintf(stderr, - _("%s: this build does not support compression\n"), - progname); + pg_log_error("this build does not support compression"); exit(1); } #endif @@ -733,9 +717,8 @@ main(int argc, char **argv) */ if (db_name) { - fprintf(stderr, - _("%s: replication connection using slot \"%s\" is unexpectedly database specific\n"), - progname, replication_slot); + pg_log_error("replication connection using slot \"%s\" is unexpectedly database specific", + replication_slot); exit(1); } @@ -745,9 +728,7 @@ main(int argc, char **argv) if (do_drop_slot) { if (verbose) - fprintf(stderr, - _("%s: dropping replication slot \"%s\"\n"), - progname, replication_slot); + pg_log_info("dropping replication slot \"%s\"", replication_slot); if (!DropReplicationSlot(conn, replication_slot)) exit(1); @@ -758,9 +739,7 @@ main(int argc, char **argv) if (do_create_slot) { if (verbose) - fprintf(stderr, - _("%s: creating replication slot \"%s\"\n"), - progname, replication_slot); + pg_log_info("creating replication slot \"%s\"", replication_slot); if (!CreateReplicationSlot(conn, replication_slot, NULL, false, true, false, slot_exists_ok)) @@ -786,15 +765,14 @@ main(int argc, char **argv) } else if (noloop) { - fprintf(stderr, _("%s: disconnected\n"), progname); + pg_log_error("disconnected"); exit(1); } else { - fprintf(stderr, /* translator: check source for value for %d */ - _("%s: disconnected; waiting %d seconds to try again\n"), - progname, RECONNECT_SLEEP_TIME); + pg_log_info("disconnected; waiting %d seconds to try again", + RECONNECT_SLEEP_TIME); pg_usleep(RECONNECT_SLEEP_TIME * 1000000); } } diff --git a/src/bin/pg_basebackup/pg_recvlogical.c b/src/bin/pg_basebackup/pg_recvlogical.c index 10429a529d9..3c95f231a2a 100644 --- a/src/bin/pg_basebackup/pg_recvlogical.c +++ b/src/bin/pg_basebackup/pg_recvlogical.c @@ -25,6 +25,7 @@ #include "access/xlog_internal.h" #include "common/file_perm.h" #include "common/fe_memutils.h" +#include "fe_utils/logging.h" #include "getopt_long.h" #include "libpq-fe.h" #include "libpq/pqsignal.h" @@ -131,9 +132,7 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested) return true; if (verbose) - fprintf(stderr, - _("%s: confirming write up to %X/%X, flush to %X/%X (slot %s)\n"), - progname, + pg_log_info("confirming write up to %X/%X, flush to %X/%X (slot %s)", (uint32) (output_written_lsn >> 32), (uint32) output_written_lsn, (uint32) (output_fsync_lsn >> 32), (uint32) output_fsync_lsn, replication_slot); @@ -157,8 +156,8 @@ sendFeedback(PGconn *conn, TimestampTz now, bool force, bool replyRequested) if (PQputCopyData(conn, replybuf, len) <= 0 || PQflush(conn)) { - fprintf(stderr, _("%s: could not send feedback packet: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not send feedback packet: %s", + PQerrorMessage(conn)); return false; } @@ -193,9 +192,7 @@ OutputFsync(TimestampTz now) if (fsync(outfd) != 0) { - fprintf(stderr, - _("%s: could not fsync file \"%s\": %s\n"), - progname, outfile, strerror(errno)); + pg_log_error("could not fsync file \"%s\": %m", outfile); return false; } @@ -232,10 +229,9 @@ StreamLogicalLog(void) * Start the replication */ if (verbose) - fprintf(stderr, - _("%s: starting log streaming at %X/%X (slot %s)\n"), - progname, (uint32) (startpos >> 32), (uint32) startpos, - replication_slot); + pg_log_info("starting log streaming at %X/%X (slot %s)", + (uint32) (startpos >> 32), (uint32) startpos, + replication_slot); /* Initiate the replication stream at specified location */ appendPQExpBuffer(query, "START_REPLICATION SLOT \"%s\" LOGICAL %X/%X", @@ -265,8 +261,8 @@ StreamLogicalLog(void) res = PQexec(conn, query->data); if (PQresultStatus(res) != PGRES_COPY_BOTH) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, query->data, PQresultErrorMessage(res)); + pg_log_error("could not send replication command \"%s\": %s", + query->data, PQresultErrorMessage(res)); PQclear(res); goto error; } @@ -274,9 +270,7 @@ StreamLogicalLog(void) resetPQExpBuffer(query); if (verbose) - fprintf(stderr, - _("%s: streaming initiated\n"), - progname); + pg_log_info("streaming initiated"); while (!time_to_abort) { @@ -340,16 +334,12 @@ StreamLogicalLog(void) S_IRUSR | S_IWUSR); if (outfd == -1) { - fprintf(stderr, - _("%s: could not open log file \"%s\": %s\n"), - progname, outfile, strerror(errno)); + pg_log_error("could not open log file \"%s\": %m", outfile); goto error; } if (fstat(outfd, &statbuf) != 0) - fprintf(stderr, - _("%s: could not stat file \"%s\": %s\n"), - progname, outfile, strerror(errno)); + pg_log_error("could not stat file \"%s\": %m", outfile); output_isfile = S_ISREG(statbuf.st_mode) && !isatty(outfd); } @@ -370,9 +360,7 @@ StreamLogicalLog(void) if (PQsocket(conn) < 0) { - fprintf(stderr, - _("%s: invalid socket: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("invalid socket: %s", PQerrorMessage(conn)); goto error; } @@ -425,17 +413,15 @@ StreamLogicalLog(void) } else if (r < 0) { - fprintf(stderr, _("%s: select() failed: %s\n"), - progname, strerror(errno)); + pg_log_error("select() failed: %m"); goto error; } /* Else there is actually data on the socket */ if (PQconsumeInput(conn) == 0) { - fprintf(stderr, - _("%s: could not receive data from WAL stream: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not receive data from WAL stream: %s", + PQerrorMessage(conn)); goto error; } continue; @@ -448,8 +434,8 @@ StreamLogicalLog(void) /* Failure while reading the copy stream */ if (r == -2) { - fprintf(stderr, _("%s: could not read COPY data: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not read COPY data: %s", + PQerrorMessage(conn)); goto error; } @@ -476,8 +462,7 @@ StreamLogicalLog(void) if (r < pos + 1) { - fprintf(stderr, _("%s: streaming header too small: %d\n"), - progname, r); + pg_log_error("streaming header too small: %d", r); goto error; } replyRequested = copybuf[pos]; @@ -512,8 +497,8 @@ StreamLogicalLog(void) } else if (copybuf[0] != 'w') { - fprintf(stderr, _("%s: unrecognized streaming header: \"%c\"\n"), - progname, copybuf[0]); + pg_log_error("unrecognized streaming header: \"%c\"", + copybuf[0]); goto error; } @@ -528,8 +513,7 @@ StreamLogicalLog(void) hdr_len += 8; /* sendTime */ if (r < hdr_len + 1) { - fprintf(stderr, _("%s: streaming header too small: %d\n"), - progname, r); + pg_log_error("streaming header too small: %d", r); goto error; } @@ -567,10 +551,8 @@ StreamLogicalLog(void) if (ret < 0) { - fprintf(stderr, - _("%s: could not write %u bytes to log file \"%s\": %s\n"), - progname, bytes_left, outfile, - strerror(errno)); + pg_log_error("could not write %u bytes to log file \"%s\": %m", + bytes_left, outfile); goto error; } @@ -581,10 +563,8 @@ StreamLogicalLog(void) if (write(outfd, "\n", 1) != 1) { - fprintf(stderr, - _("%s: could not write %u bytes to log file \"%s\": %s\n"), - progname, 1, outfile, - strerror(errno)); + pg_log_error("could not write %u bytes to log file \"%s\": %m", + 1, outfile); goto error; } @@ -611,9 +591,8 @@ StreamLogicalLog(void) } else if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, - _("%s: unexpected termination of replication stream: %s"), - progname, PQresultErrorMessage(res)); + pg_log_error("unexpected termination of replication stream: %s", + PQresultErrorMessage(res)); goto error; } PQclear(res); @@ -626,8 +605,7 @@ StreamLogicalLog(void) OutputFsync(t); if (close(outfd) != 0) - fprintf(stderr, _("%s: could not close file \"%s\": %s\n"), - progname, outfile, strerror(errno)); + pg_log_error("could not close file \"%s\": %m", outfile); } outfd = -1; error: @@ -705,6 +683,7 @@ main(int argc, char **argv) lo; char *db_name; + pg_logging_init(argv[0]); progname = get_progname(argv[0]); set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_basebackup")); @@ -736,8 +715,7 @@ main(int argc, char **argv) fsync_interval = atoi(optarg) * 1000; if (fsync_interval < 0) { - fprintf(stderr, _("%s: invalid fsync interval \"%s\"\n"), - progname, optarg); + pg_log_error("invalid fsync interval \"%s\"", optarg); exit(1); } break; @@ -757,8 +735,7 @@ main(int argc, char **argv) case 'p': if (atoi(optarg) <= 0) { - fprintf(stderr, _("%s: invalid port number \"%s\"\n"), - progname, optarg); + pg_log_error("invalid port number \"%s\"", optarg); exit(1); } dbport = pg_strdup(optarg); @@ -776,9 +753,7 @@ main(int argc, char **argv) case 'I': if (sscanf(optarg, "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse start position \"%s\"\n"), - progname, optarg); + pg_log_error("could not parse start position \"%s\"", optarg); exit(1); } startpos = ((uint64) hi) << 32 | lo; @@ -786,9 +761,7 @@ main(int argc, char **argv) case 'E': if (sscanf(optarg, "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse end position \"%s\"\n"), - progname, optarg); + pg_log_error("could not parse end position \"%s\"", optarg); exit(1); } endpos = ((uint64) hi) << 32 | lo; @@ -820,8 +793,7 @@ main(int argc, char **argv) standby_message_timeout = atoi(optarg) * 1000; if (standby_message_timeout < 0) { - fprintf(stderr, _("%s: invalid status interval \"%s\"\n"), - progname, optarg); + pg_log_error("invalid status interval \"%s\"", optarg); exit(1); } break; @@ -858,9 +830,8 @@ main(int argc, char **argv) */ if (optind < argc) { - fprintf(stderr, - _("%s: too many command-line arguments (first is \"%s\")\n"), - progname, argv[optind]); + pg_log_error("too many command-line arguments (first is \"%s\")", + argv[optind]); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -871,7 +842,7 @@ main(int argc, char **argv) */ if (replication_slot == NULL) { - fprintf(stderr, _("%s: no slot specified\n"), progname); + pg_log_error("no slot specified"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -879,7 +850,7 @@ main(int argc, char **argv) if (do_start_slot && outfile == NULL) { - fprintf(stderr, _("%s: no target file specified\n"), progname); + pg_log_error("no target file specified"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -887,7 +858,7 @@ main(int argc, char **argv) if (!do_drop_slot && dbname == NULL) { - fprintf(stderr, _("%s: no database specified\n"), progname); + pg_log_error("no database specified"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -895,7 +866,7 @@ main(int argc, char **argv) if (!do_drop_slot && !do_create_slot && !do_start_slot) { - fprintf(stderr, _("%s: at least one action needs to be specified\n"), progname); + pg_log_error("at least one action needs to be specified"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -903,7 +874,7 @@ main(int argc, char **argv) if (do_drop_slot && (do_create_slot || do_start_slot)) { - fprintf(stderr, _("%s: cannot use --create-slot or --start together with --drop-slot\n"), progname); + pg_log_error("cannot use --create-slot or --start together with --drop-slot"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -911,7 +882,7 @@ main(int argc, char **argv) if (startpos != InvalidXLogRecPtr && (do_create_slot || do_drop_slot)) { - fprintf(stderr, _("%s: cannot use --create-slot or --drop-slot together with --startpos\n"), progname); + pg_log_error("cannot use --create-slot or --drop-slot together with --startpos"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -919,9 +890,7 @@ main(int argc, char **argv) if (endpos != InvalidXLogRecPtr && !do_start_slot) { - fprintf(stderr, - _("%s: --endpos may only be specified with --start\n"), - progname); + pg_log_error("--endpos may only be specified with --start"); fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname); exit(1); @@ -952,9 +921,7 @@ main(int argc, char **argv) if (db_name == NULL) { - fprintf(stderr, - _("%s: could not establish database-specific replication connection\n"), - progname); + pg_log_error("could not establish database-specific replication connection"); exit(1); } @@ -972,9 +939,7 @@ main(int argc, char **argv) if (do_drop_slot) { if (verbose) - fprintf(stderr, - _("%s: dropping replication slot \"%s\"\n"), - progname, replication_slot); + pg_log_info("dropping replication slot \"%s\"", replication_slot); if (!DropReplicationSlot(conn, replication_slot)) exit(1); @@ -984,9 +949,7 @@ main(int argc, char **argv) if (do_create_slot) { if (verbose) - fprintf(stderr, - _("%s: creating replication slot \"%s\"\n"), - progname, replication_slot); + pg_log_info("creating replication slot \"%s\"", replication_slot); if (!CreateReplicationSlot(conn, replication_slot, plugin, false, false, false, slot_exists_ok)) @@ -1011,15 +974,14 @@ main(int argc, char **argv) } else if (noloop) { - fprintf(stderr, _("%s: disconnected\n"), progname); + pg_log_error("disconnected"); exit(1); } else { - fprintf(stderr, /* translator: check source for value for %d */ - _("%s: disconnected; waiting %d seconds to try again\n"), - progname, RECONNECT_SLEEP_TIME); + pg_log_info("disconnected; waiting %d seconds to try again", + RECONNECT_SLEEP_TIME); pg_usleep(RECONNECT_SLEEP_TIME * 1000000); } } @@ -1058,12 +1020,11 @@ prepareToTerminate(PGconn *conn, XLogRecPtr endpos, bool keepalive, XLogRecPtr l if (verbose) { if (keepalive) - fprintf(stderr, "%s: endpos %X/%X reached by keepalive\n", - progname, + pg_log_info("endpos %X/%X reached by keepalive", (uint32) (endpos >> 32), (uint32) endpos); else - fprintf(stderr, "%s: endpos %X/%X reached by record at %X/%X\n", - progname, (uint32) (endpos >> 32), (uint32) (endpos), + pg_log_info("endpos %X/%X reached by record at %X/%X", + (uint32) (endpos >> 32), (uint32) (endpos), (uint32) (lsn >> 32), (uint32) lsn); } diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 692d13716e4..0ff9aa19a9e 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -27,6 +27,7 @@ #include "libpq-fe.h" #include "access/xlog_internal.h" #include "common/file_utils.h" +#include "fe_utils/logging.h" /* fd and filename for currently open WAL file */ @@ -68,8 +69,8 @@ mark_file_as_archived(StreamCtl *stream, const char *fname) f = stream->walmethod->open_for_write(tmppath, NULL, 0); if (f == NULL) { - fprintf(stderr, _("%s: could not create archive status file \"%s\": %s\n"), - progname, tmppath, stream->walmethod->getlasterror()); + pg_log_error("could not create archive status file \"%s\": %s", + tmppath, stream->walmethod->getlasterror()); return false; } @@ -115,9 +116,8 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint) size = stream->walmethod->get_file_size(fn); if (size < 0) { - fprintf(stderr, - _("%s: could not get size of write-ahead log file \"%s\": %s\n"), - progname, fn, stream->walmethod->getlasterror()); + pg_log_error("could not get size of write-ahead log file \"%s\": %s", + fn, stream->walmethod->getlasterror()); return false; } if (size == WalSegSz) @@ -126,18 +126,16 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint) f = stream->walmethod->open_for_write(current_walfile_name, stream->partial_suffix, 0); if (f == NULL) { - fprintf(stderr, - _("%s: could not open existing write-ahead log file \"%s\": %s\n"), - progname, fn, stream->walmethod->getlasterror()); + pg_log_error("could not open existing write-ahead log file \"%s\": %s", + fn, stream->walmethod->getlasterror()); return false; } /* fsync file in case of a previous crash */ if (stream->walmethod->sync(f) != 0) { - fprintf(stderr, - _("%s: could not fsync existing write-ahead log file \"%s\": %s\n"), - progname, fn, stream->walmethod->getlasterror()); + pg_log_error("could not fsync existing write-ahead log file \"%s\": %s", + fn, stream->walmethod->getlasterror()); stream->walmethod->close(f, CLOSE_UNLINK); return false; } @@ -150,11 +148,10 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint) /* if write didn't set errno, assume problem is no disk space */ if (errno == 0) errno = ENOSPC; - fprintf(stderr, - ngettext("%s: write-ahead log file \"%s\" has %d byte, should be 0 or %d\n", - "%s: write-ahead log file \"%s\" has %d bytes, should be 0 or %d\n", - size), - progname, fn, (int) size, WalSegSz); + pg_log_error(ngettext("write-ahead log file \"%s\" has %d byte, should be 0 or %d", + "write-ahead log file \"%s\" has %d bytes, should be 0 or %d", + size), + fn, (int) size, WalSegSz); return false; } /* File existed and was empty, so fall through and open */ @@ -166,9 +163,8 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint) stream->partial_suffix, WalSegSz); if (f == NULL) { - fprintf(stderr, - _("%s: could not open write-ahead log file \"%s\": %s\n"), - progname, fn, stream->walmethod->getlasterror()); + pg_log_error("could not open write-ahead log file \"%s\": %s", + fn, stream->walmethod->getlasterror()); return false; } @@ -193,9 +189,8 @@ close_walfile(StreamCtl *stream, XLogRecPtr pos) currpos = stream->walmethod->get_current_pos(walfile); if (currpos == -1) { - fprintf(stderr, - _("%s: could not determine seek position in file \"%s\": %s\n"), - progname, current_walfile_name, stream->walmethod->getlasterror()); + pg_log_error("could not determine seek position in file \"%s\": %s", + current_walfile_name, stream->walmethod->getlasterror()); stream->walmethod->close(walfile, CLOSE_UNLINK); walfile = NULL; @@ -208,9 +203,8 @@ close_walfile(StreamCtl *stream, XLogRecPtr pos) r = stream->walmethod->close(walfile, CLOSE_NORMAL); else { - fprintf(stderr, - _("%s: not renaming \"%s%s\", segment is not complete\n"), - progname, current_walfile_name, stream->partial_suffix); + pg_log_info("not renaming \"%s%s\", segment is not complete", + current_walfile_name, stream->partial_suffix); r = stream->walmethod->close(walfile, CLOSE_NO_RENAME); } } @@ -221,8 +215,8 @@ close_walfile(StreamCtl *stream, XLogRecPtr pos) if (r != 0) { - fprintf(stderr, _("%s: could not close file \"%s\": %s\n"), - progname, current_walfile_name, stream->walmethod->getlasterror()); + pg_log_error("could not close file \"%s\": %s", + current_walfile_name, stream->walmethod->getlasterror()); return false; } @@ -278,23 +272,23 @@ writeTimeLineHistoryFile(StreamCtl *stream, char *filename, char *content) TLHistoryFileName(histfname, stream->timeline); if (strcmp(histfname, filename) != 0) { - fprintf(stderr, _("%s: server reported unexpected history file name for timeline %u: %s\n"), - progname, stream->timeline, filename); + pg_log_error("server reported unexpected history file name for timeline %u: %s", + stream->timeline, filename); return false; } f = stream->walmethod->open_for_write(histfname, ".tmp", 0); if (f == NULL) { - fprintf(stderr, _("%s: could not create timeline history file \"%s\": %s\n"), - progname, histfname, stream->walmethod->getlasterror()); + pg_log_error("could not create timeline history file \"%s\": %s", + histfname, stream->walmethod->getlasterror()); return false; } if ((int) stream->walmethod->write(f, content, size) != size) { - fprintf(stderr, _("%s: could not write timeline history file \"%s\": %s\n"), - progname, histfname, stream->walmethod->getlasterror()); + pg_log_error("could not write timeline history file \"%s\": %s", + histfname, stream->walmethod->getlasterror()); /* * If we fail to make the file, delete it to release disk space @@ -306,8 +300,8 @@ writeTimeLineHistoryFile(StreamCtl *stream, char *filename, char *content) if (stream->walmethod->close(f, CLOSE_NORMAL) != 0) { - fprintf(stderr, _("%s: could not close file \"%s\": %s\n"), - progname, histfname, stream->walmethod->getlasterror()); + pg_log_error("could not close file \"%s\": %s", + histfname, stream->walmethod->getlasterror()); return false; } @@ -349,8 +343,8 @@ sendFeedback(PGconn *conn, XLogRecPtr blockpos, TimestampTz now, bool replyReque if (PQputCopyData(conn, replybuf, len) <= 0 || PQflush(conn)) { - fprintf(stderr, _("%s: could not send feedback packet: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not send feedback packet: %s", + PQerrorMessage(conn)); return false; } @@ -383,8 +377,7 @@ CheckServerVersionForStreaming(PGconn *conn) { const char *serverver = PQparameterStatus(conn, "server_version"); - fprintf(stderr, _("%s: incompatible server version %s; client does not support streaming from server versions older than %s\n"), - progname, + pg_log_error("incompatible server version %s; client does not support streaming from server versions older than %s", serverver ? serverver : "'unknown'", "9.3"); return false; @@ -393,8 +386,7 @@ CheckServerVersionForStreaming(PGconn *conn) { const char *serverver = PQparameterStatus(conn, "server_version"); - fprintf(stderr, _("%s: incompatible server version %s; client does not support streaming from server versions newer than %s\n"), - progname, + pg_log_error("incompatible server version %s; client does not support streaming from server versions newer than %s", serverver ? serverver : "'unknown'", PG_VERSION); return false; @@ -489,33 +481,28 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) res = PQexec(conn, "IDENTIFY_SYSTEM"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, - _("%s: could not send replication command \"%s\": %s"), - progname, "IDENTIFY_SYSTEM", PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + "IDENTIFY_SYSTEM", PQerrorMessage(conn)); PQclear(res); return false; } if (PQntuples(res) != 1 || PQnfields(res) < 3) { - fprintf(stderr, - _("%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 3); + pg_log_error("could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields", + PQntuples(res), PQnfields(res), 1, 3); PQclear(res); return false; } if (strcmp(stream->sysidentifier, PQgetvalue(res, 0, 0)) != 0) { - fprintf(stderr, - _("%s: system identifier does not match between base backup and streaming connection\n"), - progname); + pg_log_error("system identifier does not match between base backup and streaming connection"); PQclear(res); return false; } if (stream->timeline > atoi(PQgetvalue(res, 0, 1))) { - fprintf(stderr, - _("%s: starting timeline %u is not present in the server\n"), - progname, stream->timeline); + pg_log_error("starting timeline %u is not present in the server", + stream->timeline); PQclear(res); return false; } @@ -543,8 +530,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) if (PQresultStatus(res) != PGRES_TUPLES_OK) { /* FIXME: we might send it ok, but get an error */ - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, "TIMELINE_HISTORY", PQresultErrorMessage(res)); + pg_log_error("could not send replication command \"%s\": %s", + "TIMELINE_HISTORY", PQresultErrorMessage(res)); PQclear(res); return false; } @@ -555,9 +542,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) */ if (PQnfields(res) != 2 || PQntuples(res) != 1) { - fprintf(stderr, - _("%s: unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 2); + pg_log_warning("unexpected response to TIMELINE_HISTORY command: got %d rows and %d fields, expected %d rows and %d fields", + PQntuples(res), PQnfields(res), 1, 2); } /* Write the history file to disk */ @@ -583,8 +569,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) res = PQexec(conn, query); if (PQresultStatus(res) != PGRES_COPY_BOTH) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, "START_REPLICATION", PQresultErrorMessage(res)); + pg_log_error("could not send replication command \"%s\": %s", + "START_REPLICATION", PQresultErrorMessage(res)); PQclear(res); return false; } @@ -627,16 +613,13 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) /* Sanity check the values the server gave us */ if (newtimeline <= stream->timeline) { - fprintf(stderr, - _("%s: server reported unexpected next timeline %u, following timeline %u\n"), - progname, newtimeline, stream->timeline); + pg_log_error("server reported unexpected next timeline %u, following timeline %u", + newtimeline, stream->timeline); goto error; } if (stream->startpos > stoppos) { - fprintf(stderr, - _("%s: server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X\n"), - progname, + pg_log_error("server stopped streaming timeline %u at %X/%X, but reported next timeline %u to begin at %X/%X", stream->timeline, (uint32) (stoppos >> 32), (uint32) stoppos, newtimeline, (uint32) (stream->startpos >> 32), (uint32) stream->startpos); goto error; @@ -646,9 +629,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) res = PQgetResult(conn); if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, - _("%s: unexpected termination of replication stream: %s"), - progname, PQresultErrorMessage(res)); + pg_log_error("unexpected termination of replication stream: %s", + PQresultErrorMessage(res)); PQclear(res); goto error; } @@ -677,17 +659,15 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) return true; else { - fprintf(stderr, _("%s: replication stream was terminated before stop point\n"), - progname); + pg_log_error("replication stream was terminated before stop point"); goto error; } } else { /* Server returned an error. */ - fprintf(stderr, - _("%s: unexpected termination of replication stream: %s"), - progname, PQresultErrorMessage(res)); + pg_log_error("unexpected termination of replication stream: %s", + PQresultErrorMessage(res)); PQclear(res); goto error; } @@ -695,8 +675,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream) error: if (walfile != NULL && stream->walmethod->close(walfile, CLOSE_NO_RENAME) != 0) - fprintf(stderr, _("%s: could not close file \"%s\": %s\n"), - progname, current_walfile_name, stream->walmethod->getlasterror()); + pg_log_error("could not close file \"%s\": %s", + current_walfile_name, stream->walmethod->getlasterror()); walfile = NULL; return false; } @@ -725,9 +705,8 @@ ReadEndOfStreamingResult(PGresult *res, XLogRecPtr *startpos, uint32 *timeline) */ if (PQnfields(res) < 2 || PQntuples(res) != 1) { - fprintf(stderr, - _("%s: unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 2); + pg_log_error("unexpected result set after end-of-timeline: got %d rows and %d fields, expected %d rows and %d fields", + PQntuples(res), PQnfields(res), 1, 2); return false; } @@ -735,9 +714,8 @@ ReadEndOfStreamingResult(PGresult *res, XLogRecPtr *startpos, uint32 *timeline) if (sscanf(PQgetvalue(res, 0, 1), "%X/%X", &startpos_xlogid, &startpos_xrecoff) != 2) { - fprintf(stderr, - _("%s: could not parse next timeline's starting point \"%s\"\n"), - progname, PQgetvalue(res, 0, 1)); + pg_log_error("could not parse next timeline's starting point \"%s\"", + PQgetvalue(res, 0, 1)); return false; } *startpos = ((uint64) startpos_xlogid << 32) | startpos_xrecoff; @@ -785,8 +763,8 @@ HandleCopyStream(PGconn *conn, StreamCtl *stream, { if (stream->walmethod->sync(walfile) != 0) { - fprintf(stderr, _("%s: could not fsync file \"%s\": %s\n"), - progname, current_walfile_name, stream->walmethod->getlasterror()); + pg_log_error("could not fsync file \"%s\": %s", + current_walfile_name, stream->walmethod->getlasterror()); goto error; } lastFlushPosition = blockpos; @@ -855,8 +833,8 @@ HandleCopyStream(PGconn *conn, StreamCtl *stream, } else { - fprintf(stderr, _("%s: unrecognized streaming header: \"%c\"\n"), - progname, copybuf[0]); + pg_log_error("unrecognized streaming header: \"%c\"", + copybuf[0]); goto error; } @@ -895,8 +873,7 @@ CopyStreamPoll(PGconn *conn, long timeout_ms, pgsocket stop_socket) connsocket = PQsocket(conn); if (connsocket < 0) { - fprintf(stderr, _("%s: invalid socket: %s"), progname, - PQerrorMessage(conn)); + pg_log_error("invalid socket: %s", PQerrorMessage(conn)); return -1; } @@ -924,8 +901,7 @@ CopyStreamPoll(PGconn *conn, long timeout_ms, pgsocket stop_socket) { if (errno == EINTR) return 0; /* Got a signal, so not an error */ - fprintf(stderr, _("%s: select() failed: %s\n"), - progname, strerror(errno)); + pg_log_error("select() failed: %m"); return -1; } if (ret > 0 && FD_ISSET(connsocket, &input_mask)) @@ -975,9 +951,8 @@ CopyStreamReceive(PGconn *conn, long timeout, pgsocket stop_socket, /* Now there is actually data on the socket */ if (PQconsumeInput(conn) == 0) { - fprintf(stderr, - _("%s: could not receive data from WAL stream: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not receive data from WAL stream: %s", + PQerrorMessage(conn)); return -1; } @@ -990,8 +965,7 @@ CopyStreamReceive(PGconn *conn, long timeout, pgsocket stop_socket, return -2; if (rawlen == -2) { - fprintf(stderr, _("%s: could not read COPY data: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not read COPY data: %s", PQerrorMessage(conn)); return -1; } @@ -1021,8 +995,7 @@ ProcessKeepaliveMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, if (len < pos + 1) { - fprintf(stderr, _("%s: streaming header too small: %d\n"), - progname, len); + pg_log_error("streaming header too small: %d", len); return false; } replyRequested = copybuf[pos]; @@ -1042,8 +1015,8 @@ ProcessKeepaliveMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, */ if (stream->walmethod->sync(walfile) != 0) { - fprintf(stderr, _("%s: could not fsync file \"%s\": %s\n"), - progname, current_walfile_name, stream->walmethod->getlasterror()); + pg_log_error("could not fsync file \"%s\": %s", + current_walfile_name, stream->walmethod->getlasterror()); return false; } lastFlushPosition = blockpos; @@ -1088,8 +1061,7 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, hdr_len += 8; /* sendTime */ if (len < hdr_len) { - fprintf(stderr, _("%s: streaming header too small: %d\n"), - progname, len); + pg_log_error("streaming header too small: %d", len); return false; } *blockpos = fe_recvint64(©buf[1]); @@ -1106,9 +1078,8 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, /* No file open yet */ if (xlogoff != 0) { - fprintf(stderr, - _("%s: received write-ahead log record for offset %u with no file open\n"), - progname, xlogoff); + pg_log_error("received write-ahead log record for offset %u with no file open", + xlogoff); return false; } } @@ -1117,9 +1088,8 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, /* More data in existing segment */ if (stream->walmethod->get_current_pos(walfile) != xlogoff) { - fprintf(stderr, - _("%s: got WAL data offset %08x, expected %08x\n"), - progname, xlogoff, (int) stream->walmethod->get_current_pos(walfile)); + pg_log_error("got WAL data offset %08x, expected %08x", + xlogoff, (int) stream->walmethod->get_current_pos(walfile)); return false; } } @@ -1152,10 +1122,9 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, if (stream->walmethod->write(walfile, copybuf + hdr_len + bytes_written, bytes_to_write) != bytes_to_write) { - fprintf(stderr, - _("%s: could not write %u bytes to WAL file \"%s\": %s\n"), - progname, bytes_to_write, current_walfile_name, - stream->walmethod->getlasterror()); + pg_log_error("could not write %u bytes to WAL file \"%s\": %s", + bytes_to_write, current_walfile_name, + stream->walmethod->getlasterror()); return false; } @@ -1178,8 +1147,8 @@ ProcessXLogDataMsg(PGconn *conn, StreamCtl *stream, char *copybuf, int len, { if (PQputCopyEnd(conn, NULL) <= 0 || PQflush(conn)) { - fprintf(stderr, _("%s: could not send copy-end packet: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not send copy-end packet: %s", + PQerrorMessage(conn)); return false; } still_sending = false; @@ -1218,9 +1187,8 @@ HandleEndOfCopyStream(PGconn *conn, StreamCtl *stream, char *copybuf, { if (PQputCopyEnd(conn, NULL) <= 0 || PQflush(conn)) { - fprintf(stderr, - _("%s: could not send copy-end packet: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not send copy-end packet: %s", + PQerrorMessage(conn)); PQclear(res); return NULL; } @@ -1250,8 +1218,8 @@ CheckCopyStreamStop(PGconn *conn, StreamCtl *stream, XLogRecPtr blockpos, } if (PQputCopyEnd(conn, NULL) <= 0 || PQflush(conn)) { - fprintf(stderr, _("%s: could not send copy-end packet: %s"), - progname, PQerrorMessage(conn)); + pg_log_error("could not send copy-end packet: %s", + PQerrorMessage(conn)); return false; } still_sending = false; diff --git a/src/bin/pg_basebackup/streamutil.c b/src/bin/pg_basebackup/streamutil.c index 7e86830ad88..ab2e55d6950 100644 --- a/src/bin/pg_basebackup/streamutil.c +++ b/src/bin/pg_basebackup/streamutil.c @@ -26,6 +26,7 @@ #include "common/file_perm.h" #include "datatype/timestamp.h" #include "fe_utils/connect.h" +#include "fe_utils/logging.h" #include "port/pg_bswap.h" #include "pqexpbuffer.h" @@ -90,7 +91,7 @@ GetConnection(void) conn_opts = PQconninfoParse(connection_string, &err_msg); if (conn_opts == NULL) { - fprintf(stderr, "%s: %s", progname, err_msg); + pg_log_error("%s", err_msg); exit(1); } @@ -183,8 +184,7 @@ GetConnection(void) */ if (!tmpconn) { - fprintf(stderr, _("%s: could not connect to server\n"), - progname); + pg_log_error("could not connect to server"); exit(1); } @@ -201,8 +201,8 @@ GetConnection(void) if (PQstatus(tmpconn) != CONNECTION_OK) { - fprintf(stderr, _("%s: could not connect to server: %s"), - progname, PQerrorMessage(tmpconn)); + pg_log_error("could not connect to server: %s", + PQerrorMessage(tmpconn)); PQfinish(tmpconn); free(values); free(keywords); @@ -230,8 +230,8 @@ GetConnection(void) res = PQexec(tmpconn, ALWAYS_SECURE_SEARCH_PATH_SQL); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not clear search_path: %s"), - progname, PQerrorMessage(tmpconn)); + pg_log_error("could not clear search_path: %s", + PQerrorMessage(tmpconn)); PQclear(res); PQfinish(tmpconn); exit(1); @@ -246,18 +246,14 @@ GetConnection(void) tmpparam = PQparameterStatus(tmpconn, "integer_datetimes"); if (!tmpparam) { - fprintf(stderr, - _("%s: could not determine server setting for integer_datetimes\n"), - progname); + pg_log_error("could not determine server setting for integer_datetimes"); PQfinish(tmpconn); exit(1); } if (strcmp(tmpparam, "on") != 0) { - fprintf(stderr, - _("%s: integer_datetimes compile flag does not match server\n"), - progname); + pg_log_error("integer_datetimes compile flag does not match server"); PQfinish(tmpconn); exit(1); } @@ -300,17 +296,16 @@ RetrieveWalSegSize(PGconn *conn) res = PQexec(conn, "SHOW wal_segment_size"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, "SHOW wal_segment_size", PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + "SHOW wal_segment_size", PQerrorMessage(conn)); PQclear(res); return false; } if (PQntuples(res) != 1 || PQnfields(res) < 1) { - fprintf(stderr, - _("%s: could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 1); + pg_log_error("could not fetch WAL segment size: got %d rows and %d fields, expected %d rows and %d or more fields", + PQntuples(res), PQnfields(res), 1, 1); PQclear(res); return false; @@ -319,8 +314,7 @@ RetrieveWalSegSize(PGconn *conn) /* fetch xlog value and unit from the result */ if (sscanf(PQgetvalue(res, 0, 0), "%d%s", &xlog_val, xlog_unit) != 2) { - fprintf(stderr, _("%s: WAL segment size could not be parsed\n"), - progname); + pg_log_error("WAL segment size could not be parsed"); return false; } @@ -335,11 +329,10 @@ RetrieveWalSegSize(PGconn *conn) if (!IsValidWalSegSize(WalSegSz)) { - fprintf(stderr, - ngettext("%s: WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte\n", - "%s: WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes\n", - WalSegSz), - progname, WalSegSz); + pg_log_error(ngettext("WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d byte", + "WAL segment size must be a power of two between 1 MB and 1 GB, but the remote server reported a value of %d bytes", + WalSegSz), + WalSegSz); return false; } @@ -374,17 +367,16 @@ RetrieveDataDirCreatePerm(PGconn *conn) res = PQexec(conn, "SHOW data_directory_mode"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, "SHOW data_directory_mode", PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + "SHOW data_directory_mode", PQerrorMessage(conn)); PQclear(res); return false; } if (PQntuples(res) != 1 || PQnfields(res) < 1) { - fprintf(stderr, - _("%s: could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 1); + pg_log_error("could not fetch group access flag: got %d rows and %d fields, expected %d rows and %d or more fields", + PQntuples(res), PQnfields(res), 1, 1); PQclear(res); return false; @@ -392,8 +384,8 @@ RetrieveDataDirCreatePerm(PGconn *conn) if (sscanf(PQgetvalue(res, 0, 0), "%o", &data_directory_mode) != 1) { - fprintf(stderr, _("%s: group access flag could not be parsed: %s\n"), - progname, PQgetvalue(res, 0, 0)); + pg_log_error("group access flag could not be parsed: %s", + PQgetvalue(res, 0, 0)); PQclear(res); return false; @@ -427,17 +419,16 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, res = PQexec(conn, "IDENTIFY_SYSTEM"); if (PQresultStatus(res) != PGRES_TUPLES_OK) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, "IDENTIFY_SYSTEM", PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + "IDENTIFY_SYSTEM", PQerrorMessage(conn)); PQclear(res); return false; } if (PQntuples(res) != 1 || PQnfields(res) < 3) { - fprintf(stderr, - _("%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 3); + pg_log_error("could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields", + PQntuples(res), PQnfields(res), 1, 3); PQclear(res); return false; @@ -456,9 +447,8 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, { if (sscanf(PQgetvalue(res, 0, 2), "%X/%X", &hi, &lo) != 2) { - fprintf(stderr, - _("%s: could not parse write-ahead log location \"%s\"\n"), - progname, PQgetvalue(res, 0, 2)); + pg_log_error("could not parse write-ahead log location \"%s\"", + PQgetvalue(res, 0, 2)); PQclear(res); return false; @@ -474,9 +464,8 @@ RunIdentifySystem(PGconn *conn, char **sysid, TimeLineID *starttli, { if (PQnfields(res) < 4) { - fprintf(stderr, - _("%s: could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields\n"), - progname, PQntuples(res), PQnfields(res), 1, 4); + pg_log_error("could not identify system: got %d rows and %d fields, expected %d rows and %d or more fields", + PQntuples(res), PQnfields(res), 1, 4); PQclear(res); return false; @@ -541,8 +530,8 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, } else { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, query->data, PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + query->data, PQerrorMessage(conn)); destroyPQExpBuffer(query); PQclear(res); @@ -552,10 +541,9 @@ CreateReplicationSlot(PGconn *conn, const char *slot_name, const char *plugin, if (PQntuples(res) != 1 || PQnfields(res) != 4) { - fprintf(stderr, - _("%s: could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n"), - progname, slot_name, - PQntuples(res), PQnfields(res), 1, 4); + pg_log_error("could not create replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields", + slot_name, + PQntuples(res), PQnfields(res), 1, 4); destroyPQExpBuffer(query); PQclear(res); @@ -587,8 +575,8 @@ DropReplicationSlot(PGconn *conn, const char *slot_name) res = PQexec(conn, query->data); if (PQresultStatus(res) != PGRES_COMMAND_OK) { - fprintf(stderr, _("%s: could not send replication command \"%s\": %s"), - progname, query->data, PQerrorMessage(conn)); + pg_log_error("could not send replication command \"%s\": %s", + query->data, PQerrorMessage(conn)); destroyPQExpBuffer(query); PQclear(res); @@ -597,10 +585,9 @@ DropReplicationSlot(PGconn *conn, const char *slot_name) if (PQntuples(res) != 0 || PQnfields(res) != 0) { - fprintf(stderr, - _("%s: could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields\n"), - progname, slot_name, - PQntuples(res), PQnfields(res), 0, 0); + pg_log_error("could not drop replication slot \"%s\": got %d rows and %d fields, expected %d rows and %d fields", + slot_name, + PQntuples(res), PQnfields(res), 0, 0); destroyPQExpBuffer(query); PQclear(res); diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index 165b3a1e896..83b520898be 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -155,8 +155,8 @@ dir_open_for_write(const char *pathname, const char *temp_suffix, size_t pad_to_ */ if (dir_data->sync) { - if (fsync_fname(tmppath, false, progname) != 0 || - fsync_parent_path(tmppath, progname) != 0) + if (fsync_fname(tmppath, false) != 0 || + fsync_parent_path(tmppath) != 0) { #ifdef HAVE_LIBZ if (dir_data->compression > 0) @@ -244,7 +244,7 @@ dir_close(Walfile f, WalCloseMethod method) snprintf(tmppath2, sizeof(tmppath2), "%s/%s%s", dir_data->basedir, df->pathname, dir_data->compression > 0 ? ".gz" : ""); - r = durable_rename(tmppath, tmppath2, progname); + r = durable_rename(tmppath, tmppath2); } else if (method == CLOSE_UNLINK) { @@ -264,9 +264,9 @@ dir_close(Walfile f, WalCloseMethod method) */ if (dir_data->sync) { - r = fsync_fname(df->fullpath, false, progname); + r = fsync_fname(df->fullpath, false); if (r == 0) - r = fsync_parent_path(df->fullpath, progname); + r = fsync_parent_path(df->fullpath); } } } @@ -339,7 +339,7 @@ dir_finish(void) * Files are fsynced when they are closed, but we need to fsync the * directory entry here as well. */ - if (fsync_fname(dir_data->basedir, true, progname) != 0) + if (fsync_fname(dir_data->basedir, true) != 0) return false; } return true; @@ -970,9 +970,9 @@ tar_finish(void) if (tar_data->sync) { - if (fsync_fname(tar_data->tarfilename, false, progname) != 0) + if (fsync_fname(tar_data->tarfilename, false) != 0) return false; - if (fsync_parent_path(tar_data->tarfilename, progname) != 0) + if (fsync_parent_path(tar_data->tarfilename) != 0) return false; } |
