mirror of
https://github.com/postgres/postgres.git
synced 2025-04-24 10:47:04 +03:00
pg_rewind: Move syncTargetDirectory() to file_ops.c
For consistency. All the other low-level functions that operate on the target directory are in file_ops.c. Reviewed-by: Michael Paquier Discussion: https://www.postgresql.org/message-id/0c5b3783-af52-3ee5-f8fa-6e794061f70d%40iki.fi
This commit is contained in:
parent
ac22929a26
commit
ffb4e27e9c
@ -19,6 +19,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "common/file_perm.h"
|
#include "common/file_perm.h"
|
||||||
|
#include "common/file_utils.h"
|
||||||
#include "file_ops.h"
|
#include "file_ops.h"
|
||||||
#include "filemap.h"
|
#include "filemap.h"
|
||||||
#include "pg_rewind.h"
|
#include "pg_rewind.h"
|
||||||
@ -266,6 +267,24 @@ remove_target_symlink(const char *path)
|
|||||||
dstpath);
|
dstpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sync target data directory to ensure that modifications are safely on disk.
|
||||||
|
*
|
||||||
|
* We do this once, for the whole data directory, for performance reasons. At
|
||||||
|
* the end of pg_rewind's run, the kernel is likely to already have flushed
|
||||||
|
* most dirty buffers to disk. Additionally fsync_pgdata uses a two-pass
|
||||||
|
* approach (only initiating writeback in the first pass), which often reduces
|
||||||
|
* the overall amount of IO noticeably.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
sync_target_dir(void)
|
||||||
|
{
|
||||||
|
if (!do_sync || dry_run)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fsync_pgdata(datadir_target, PG_VERSION_NUM);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read a file into memory. The file to be read is <datadir>/<path>.
|
* Read a file into memory. The file to be read is <datadir>/<path>.
|
||||||
|
@ -19,6 +19,7 @@ extern void remove_target_file(const char *path, bool missing_ok);
|
|||||||
extern void truncate_target_file(const char *path, off_t newsize);
|
extern void truncate_target_file(const char *path, off_t newsize);
|
||||||
extern void create_target(file_entry_t *t);
|
extern void create_target(file_entry_t *t);
|
||||||
extern void remove_target(file_entry_t *t);
|
extern void remove_target(file_entry_t *t);
|
||||||
|
extern void sync_target_dir(void);
|
||||||
|
|
||||||
extern char *slurpFile(const char *datadir, const char *path, size_t *filesize);
|
extern char *slurpFile(const char *datadir, const char *path, size_t *filesize);
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#include "catalog/pg_control.h"
|
#include "catalog/pg_control.h"
|
||||||
#include "common/controldata_utils.h"
|
#include "common/controldata_utils.h"
|
||||||
#include "common/file_perm.h"
|
#include "common/file_perm.h"
|
||||||
#include "common/file_utils.h"
|
|
||||||
#include "common/restricted_token.h"
|
#include "common/restricted_token.h"
|
||||||
#include "common/string.h"
|
#include "common/string.h"
|
||||||
#include "fe_utils/recovery_gen.h"
|
#include "fe_utils/recovery_gen.h"
|
||||||
@ -38,7 +37,6 @@ static void createBackupLabel(XLogRecPtr startpoint, TimeLineID starttli,
|
|||||||
|
|
||||||
static void digestControlFile(ControlFileData *ControlFile, char *source,
|
static void digestControlFile(ControlFileData *ControlFile, char *source,
|
||||||
size_t size);
|
size_t size);
|
||||||
static void syncTargetDirectory(void);
|
|
||||||
static void getRestoreCommand(const char *argv0);
|
static void getRestoreCommand(const char *argv0);
|
||||||
static void sanityChecks(void);
|
static void sanityChecks(void);
|
||||||
static void findCommonAncestorTimeline(XLogRecPtr *recptr, int *tliIndex);
|
static void findCommonAncestorTimeline(XLogRecPtr *recptr, int *tliIndex);
|
||||||
@ -455,7 +453,7 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
if (showprogress)
|
if (showprogress)
|
||||||
pg_log_info("syncing target data directory");
|
pg_log_info("syncing target data directory");
|
||||||
syncTargetDirectory();
|
sync_target_dir();
|
||||||
|
|
||||||
if (writerecoveryconf && !dry_run)
|
if (writerecoveryconf && !dry_run)
|
||||||
WriteRecoveryConfig(conn, datadir_target,
|
WriteRecoveryConfig(conn, datadir_target,
|
||||||
@ -803,24 +801,6 @@ digestControlFile(ControlFileData *ControlFile, char *src, size_t size)
|
|||||||
checkControlFile(ControlFile);
|
checkControlFile(ControlFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Sync target data directory to ensure that modifications are safely on disk.
|
|
||||||
*
|
|
||||||
* We do this once, for the whole data directory, for performance reasons. At
|
|
||||||
* the end of pg_rewind's run, the kernel is likely to already have flushed
|
|
||||||
* most dirty buffers to disk. Additionally fsync_pgdata uses a two-pass
|
|
||||||
* approach (only initiating writeback in the first pass), which often reduces
|
|
||||||
* the overall amount of IO noticeably.
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
syncTargetDirectory(void)
|
|
||||||
{
|
|
||||||
if (!do_sync || dry_run)
|
|
||||||
return;
|
|
||||||
|
|
||||||
fsync_pgdata(datadir_target, PG_VERSION_NUM);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get value of GUC parameter restore_command from the target cluster.
|
* Get value of GUC parameter restore_command from the target cluster.
|
||||||
*
|
*
|
||||||
|
@ -24,6 +24,7 @@ extern char *datadir_source;
|
|||||||
extern char *connstr_source;
|
extern char *connstr_source;
|
||||||
extern bool showprogress;
|
extern bool showprogress;
|
||||||
extern bool dry_run;
|
extern bool dry_run;
|
||||||
|
extern bool do_sync;
|
||||||
extern int WalSegSz;
|
extern int WalSegSz;
|
||||||
|
|
||||||
/* Target history */
|
/* Target history */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user