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
This commit is contained in:
parent
5adb06732d
commit
cddcf7842c
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user