aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2021-09-17 15:53:01 +0900
committerMichael Paquier <michael@paquier.xyz>2021-09-17 15:53:01 +0900
commitcddcf7842c31b4d07ca75439f6b4ddacaadbbd0d (patch)
tree000af02949f542a4391cc088952dbacfc8774e19 /src
parent5adb06732d7fac8171609392ea83f18bc8f285f4 (diff)
downloadpostgresql-cddcf7842c31b4d07ca75439f6b4ddacaadbbd0d.tar.gz
postgresql-cddcf7842c31b4d07ca75439f6b4ddacaadbbd0d.zip
Clarify some errors in pg_receivewal when closing WAL segments
A WAL segment closed during a WAL stream for pg_receivewal would generate incorrect error messages depending on the context, as the file name used when referring to a WAL segment ignored partial files or the compression method used. In such cases, the error message generated (failure on close, seek or rename) would not match a physical file name. The same code paths are used by pg_basebackup, but it uses no partial suffix so it is not impacted. 7fbe0c8 has introduced in walmethods.c a callback to get the exact physical file name used for a given context, this commit makes use of it to improve those error messages. This could be extended to more code paths of pg_basebackup/ in the future, if necessary. Extracted from a larger patch by the same author. Author: Georgios Kokolatos Discussion: https://postgr.es/m/ZCm1J5vfyQ2E6dYvXz8si39HQ2gwxSZ3IpYaVgYa3lUwY88SLapx9EEnOf5uEwrddhx2twG7zYKjVeuP5MwZXCNPybtsGouDsAD1o2L_I5E=@pm.me
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_basebackup/receivelog.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c
index 9601fd8d9cf..72b8d9e3153 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -185,20 +185,27 @@ open_walfile(StreamCtl *stream, XLogRecPtr startpoint)
static bool
close_walfile(StreamCtl *stream, XLogRecPtr pos)
{
+ char *fn;
off_t currpos;
int r;
if (walfile == NULL)
return true;
+ /* Note that this considers the compression used if necessary */
+ fn = stream->walmethod->get_file_name(current_walfile_name,
+ stream->partial_suffix);
+
currpos = stream->walmethod->get_current_pos(walfile);
+
if (currpos == -1)
{
pg_log_error("could not determine seek position in file \"%s\": %s",
- current_walfile_name, stream->walmethod->getlasterror());
+ fn, stream->walmethod->getlasterror());
stream->walmethod->close(walfile, CLOSE_UNLINK);
walfile = NULL;
+ pg_free(fn);
return false;
}
@@ -208,8 +215,7 @@ close_walfile(StreamCtl *stream, XLogRecPtr pos)
r = stream->walmethod->close(walfile, CLOSE_NORMAL);
else
{
- pg_log_info("not renaming \"%s%s\", segment is not complete",
- current_walfile_name, stream->partial_suffix);
+ pg_log_info("not renaming \"%s\", segment is not complete", fn);
r = stream->walmethod->close(walfile, CLOSE_NO_RENAME);
}
}
@@ -221,10 +227,14 @@ close_walfile(StreamCtl *stream, XLogRecPtr pos)
if (r != 0)
{
pg_log_error("could not close file \"%s\": %s",
- current_walfile_name, stream->walmethod->getlasterror());
+ fn, stream->walmethod->getlasterror());
+
+ pg_free(fn);
return false;
}
+ pg_free(fn);
+
/*
* Mark file as archived if requested by the caller - pg_basebackup needs
* to do so as files can otherwise get archived again after promotion of a