pg_basebackup: Skip a few more fsyncs if --no-sync is specified.

This is mostly interesting for running the regression tests on machines with
slow / overloaded IO.

Discussion: https://postgr.es/m/20220119041646.rhuo3youiqxqjmo2@alap3.anarazel.de
This commit is contained in:
Andres Freund 2022-01-23 13:59:23 -08:00
parent ac7df108cf
commit 9c86d9337e
2 changed files with 26 additions and 4 deletions

View File

@ -2201,9 +2201,21 @@ BaseBackup(void)
snprintf(tmp_filename, MAXPGPATH, "%s/backup_manifest.tmp", basedir);
snprintf(filename, MAXPGPATH, "%s/backup_manifest", basedir);
/* durable_rename emits its own log message in case of failure */
if (durable_rename(tmp_filename, filename) != 0)
exit(1);
if (do_sync)
{
/* durable_rename emits its own log message in case of failure */
if (durable_rename(tmp_filename, filename) != 0)
exit(1);
}
else
{
if (rename(tmp_filename, filename) != 0)
{
pg_log_error("could not rename file \"%s\" to \"%s\": %m",
tmp_filename, filename);
exit(1);
}
}
}
if (verbose)

View File

@ -445,7 +445,17 @@ dir_close(Walfile f, WalCloseMethod method)
snprintf(tmppath2, sizeof(tmppath2), "%s/%s",
dir_data->basedir, filename2);
pg_free(filename2);
r = durable_rename(tmppath, tmppath2);
if (dir_data->sync)
r = durable_rename(tmppath, tmppath2);
else
{
if (rename(tmppath, tmppath2) != 0)
{
pg_log_error("could not rename file \"%s\" to \"%s\": %m",
tmppath, tmppath2);
r = -1;
}
}
}
else if (method == CLOSE_UNLINK)
{