summaryrefslogtreecommitdiff
path: root/src/bin/pg_rewind/fetch.c
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-03-23 19:47:52 +0200
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2015-03-23 19:47:52 +0200
commit61081e75c6741024f7717ade0450090590e96c85 (patch)
tree9b4fde1d8bae566036df68eecdfd84b896e14b57 /src/bin/pg_rewind/fetch.c
parent87cec51d3ad1107f6f224ed7d773e70c8896e4c0 (diff)
downloadpostgresql-61081e75c6741024f7717ade0450090590e96c85.tar.gz
Add pg_rewind, for re-synchronizing a master server after failback.
Earlier versions of this tool were available (and still are) on github. Thanks to Michael Paquier, Alvaro Herrera, Peter Eisentraut, Amit Kapila, and Satoshi Nagayasu for review.
Diffstat (limited to 'src/bin/pg_rewind/fetch.c')
-rw-r--r--src/bin/pg_rewind/fetch.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/bin/pg_rewind/fetch.c b/src/bin/pg_rewind/fetch.c
new file mode 100644
index 0000000000..eb2dd24cf1
--- /dev/null
+++ b/src/bin/pg_rewind/fetch.c
@@ -0,0 +1,61 @@
+/*-------------------------------------------------------------------------
+ *
+ * fetch.c
+ * Functions for fetching files from a local or remote data dir
+ *
+ * This file forms an abstraction of getting files from the "source".
+ * There are two implementations of this interface: one for copying files
+ * from a data directory via normal filesystem operations (copy_fetch.c),
+ * and another for fetching files from a remote server via a libpq
+ * connection (libpq_fetch.c)
+ *
+ *
+ * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres_fe.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "pg_rewind.h"
+#include "fetch.h"
+#include "file_ops.h"
+#include "filemap.h"
+
+void
+fetchRemoteFileList(void)
+{
+ if (datadir_source)
+ traverse_datadir(datadir_source, &process_remote_file);
+ else
+ libpqProcessFileList();
+}
+
+/*
+ * Fetch all relation data files that are marked in the given data page map.
+ */
+void
+executeFileMap(void)
+{
+ if (datadir_source)
+ copy_executeFileMap(filemap);
+ else
+ libpq_executeFileMap(filemap);
+}
+
+/*
+ * Fetch a single file into a malloc'd buffer. The file size is returned
+ * in *filesize. The returned buffer is always zero-terminated, which is
+ * handy for text files.
+ */
+char *
+fetchFile(char *filename, size_t *filesize)
+{
+ if (datadir_source)
+ return slurpFile(datadir_source, filename, filesize);
+ else
+ return libpqGetFile(filename, filesize);
+}