v1-0004-Refactor-move-some-part-of-pg_verifybackup.c-to-p.patch
application/x-patch
Filename: v1-0004-Refactor-move-some-part-of-pg_verifybackup.c-to-p.patch
Type: application/x-patch
Part: 6
Patch
Format: format-patch
Series: patch v1-0004
Subject: Refactor: move some part of pg_verifybackup.c to pg_verifybackup.h
| File | + | − |
|---|---|---|
| src/bin/pg_basebackup/astreamer_inject.h | 0 | 1 |
| src/bin/pg_verifybackup/pg_verifybackup.c | 7 | 92 |
| src/bin/pg_verifybackup/pg_verifybackup.h | 112 | 0 |
| src/include/fe_utils/astreamer.h | 1 | 0 |
From f8ba9bfef39c908ab26db90167ea9aae97ce6287 Mon Sep 17 00:00:00 2001
From: Amul Sul <amul.sul@enterprisedb.com>
Date: Tue, 2 Jul 2024 10:32:11 +0530
Subject: [PATCH v1 04/10] Refactor: move some part of pg_verifybackup.c to
pg_verifybackup.h
---
src/bin/pg_basebackup/astreamer_inject.h | 1 -
src/bin/pg_verifybackup/pg_verifybackup.c | 99 ++-----------------
src/bin/pg_verifybackup/pg_verifybackup.h | 112 ++++++++++++++++++++++
src/include/fe_utils/astreamer.h | 1 +
4 files changed, 120 insertions(+), 93 deletions(-)
create mode 100644 src/bin/pg_verifybackup/pg_verifybackup.h
diff --git a/src/bin/pg_basebackup/astreamer_inject.h b/src/bin/pg_basebackup/astreamer_inject.h
index aeed533862b..21023b6cc47 100644
--- a/src/bin/pg_basebackup/astreamer_inject.h
+++ b/src/bin/pg_basebackup/astreamer_inject.h
@@ -13,7 +13,6 @@
#define ASTREAMER_INJECT_H
#include "fe_utils/astreamer.h"
-#include "pqexpbuffer.h"
extern astreamer *astreamer_recovery_injector_new(astreamer *next,
bool is_recovery_guc_supported,
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c
index d77e70fbe38..a248db1b28a 100644
--- a/src/bin/pg_verifybackup/pg_verifybackup.c
+++ b/src/bin/pg_verifybackup/pg_verifybackup.c
@@ -18,12 +18,11 @@
#include <sys/stat.h>
#include <time.h>
-#include "common/controldata_utils.h"
-#include "common/hashfn_unstable.h"
#include "common/logging.h"
#include "common/parse_manifest.h"
#include "fe_utils/simple_list.h"
#include "getopt_long.h"
+#include "pg_verifybackup.h"
#include "pgtime.h"
/*
@@ -40,83 +39,6 @@
*/
#define ESTIMATED_BYTES_PER_MANIFEST_LINE 100
-/*
- * How many bytes should we try to read from a file at once?
- */
-#define READ_CHUNK_SIZE (128 * 1024)
-
-/*
- * Each file described by the manifest file is parsed to produce an object
- * like this.
- */
-typedef struct manifest_file
-{
- uint32 status; /* hash status */
- const char *pathname;
- size_t size;
- pg_checksum_type checksum_type;
- int checksum_length;
- uint8 *checksum_payload;
- bool matched;
- bool bad;
-} manifest_file;
-
-#define should_verify_checksum(m) \
- (((m)->matched) && !((m)->bad) && (((m)->checksum_type) != CHECKSUM_TYPE_NONE))
-
-/*
- * Define a hash table which we can use to store information about the files
- * mentioned in the backup manifest.
- */
-#define SH_PREFIX manifest_files
-#define SH_ELEMENT_TYPE manifest_file
-#define SH_KEY_TYPE const char *
-#define SH_KEY pathname
-#define SH_HASH_KEY(tb, key) hash_string(key)
-#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
-#define SH_SCOPE static inline
-#define SH_RAW_ALLOCATOR pg_malloc0
-#define SH_DECLARE
-#define SH_DEFINE
-#include "lib/simplehash.h"
-
-/*
- * Each WAL range described by the manifest file is parsed to produce an
- * object like this.
- */
-typedef struct manifest_wal_range
-{
- TimeLineID tli;
- XLogRecPtr start_lsn;
- XLogRecPtr end_lsn;
- struct manifest_wal_range *next;
- struct manifest_wal_range *prev;
-} manifest_wal_range;
-
-/*
- * All the data parsed from a backup_manifest file.
- */
-typedef struct manifest_data
-{
- int version;
- uint64 system_identifier;
- manifest_files_hash *files;
- manifest_wal_range *first_wal_range;
- manifest_wal_range *last_wal_range;
-} manifest_data;
-
-/*
- * All of the context information we need while checking a backup manifest.
- */
-typedef struct verifier_context
-{
- manifest_data *manifest;
- char *backup_directory;
- SimpleStringList ignore_list;
- bool exit_on_error;
- bool saw_any_error;
-} verifier_context;
-
static manifest_data *parse_manifest_file(char *manifest_path);
static void verifybackup_version_cb(JsonManifestParseContext *context,
int manifest_version);
@@ -150,21 +72,14 @@ static void parse_required_wal(verifier_context *context,
char *pg_waldump_path,
char *wal_directory);
-static void report_backup_error(verifier_context *context,
- const char *pg_restrict fmt,...)
- pg_attribute_printf(2, 3);
-static void report_fatal_error(const char *pg_restrict fmt,...)
- pg_attribute_printf(1, 2) pg_attribute_noreturn();
-static bool should_ignore_relpath(verifier_context *context, const char *relpath);
-
static void progress_report(bool finished);
static void usage(void);
static const char *progname;
/* options */
-static bool show_progress = false;
-static bool skip_checksums = false;
+bool show_progress = false;
+bool skip_checksums = false;
/* Progress indicators */
static uint64 total_size = 0;
@@ -556,7 +471,7 @@ verifybackup_per_file_cb(JsonManifestParseContext *context,
bool found;
/* Make a new entry in the hash table for this file. */
- m = manifest_files_insert(ht, pathname, &found);
+ m = manifest_files_insert(ht, (char *) pathname, &found);
if (found)
report_fatal_error("duplicate path name in backup manifest: \"%s\"",
pathname);
@@ -979,7 +894,7 @@ parse_required_wal(verifier_context *context, char *pg_waldump_path,
* Update the context to indicate that we saw an error, and exit if the
* context says we should.
*/
-static void
+void
report_backup_error(verifier_context *context, const char *pg_restrict fmt,...)
{
va_list ap;
@@ -996,7 +911,7 @@ report_backup_error(verifier_context *context, const char *pg_restrict fmt,...)
/*
* Report a fatal error and exit
*/
-static void
+void
report_fatal_error(const char *pg_restrict fmt,...)
{
va_list ap;
@@ -1015,7 +930,7 @@ report_fatal_error(const char *pg_restrict fmt,...)
* Note that by "prefix" we mean a parent directory; for this purpose,
* "aa/bb" is not a prefix of "aa/bbb", but it is a prefix of "aa/bb/cc".
*/
-static bool
+bool
should_ignore_relpath(verifier_context *context, const char *relpath)
{
SimpleStringListCell *cell;
diff --git a/src/bin/pg_verifybackup/pg_verifybackup.h b/src/bin/pg_verifybackup/pg_verifybackup.h
new file mode 100644
index 00000000000..c11ff33a100
--- /dev/null
+++ b/src/bin/pg_verifybackup/pg_verifybackup.h
@@ -0,0 +1,112 @@
+/*-------------------------------------------------------------------------
+ *
+ * pg_verifybackup.h
+ * Verify a backup against a backup manifest.
+ *
+ * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ *
+ * src/bin/pg_verifybackup/pg_verifybackup.h
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef PG_VERIFYBACKUP_H
+#define PG_VERIFYBACKUP_H
+
+#include "common/controldata_utils.h"
+#include "common/hashfn_unstable.h"
+#include "common/parse_manifest.h"
+#include "fe_utils/simple_list.h"
+
+extern bool show_progress;
+extern bool skip_checksums;
+
+/*
+ * How many bytes should we try to read from a file at once?
+ */
+#define READ_CHUNK_SIZE (128 * 1024)
+
+/*
+ * Each file described by the manifest file is parsed to produce an object
+ * like this.
+ */
+typedef struct manifest_file
+{
+ uint32 status; /* hash status */
+ char *pathname;
+ size_t size;
+ pg_checksum_type checksum_type;
+ int checksum_length;
+ uint8 *checksum_payload;
+ bool matched;
+ bool bad;
+} manifest_file;
+
+#define should_verify_checksum(m) \
+ (((m)->matched) && !((m)->bad) && (((m)->checksum_type) != CHECKSUM_TYPE_NONE))
+
+/*
+ * Define a hash table which we can use to store information about the files
+ * mentioned in the backup manifest.
+ */
+#define SH_PREFIX manifest_files
+#define SH_ELEMENT_TYPE manifest_file
+#define SH_KEY_TYPE char *
+#define SH_KEY pathname
+#define SH_HASH_KEY(tb, key) hash_string(key)
+#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
+#define SH_SCOPE static inline
+#define SH_RAW_ALLOCATOR pg_malloc0
+#define SH_DECLARE
+#define SH_DEFINE
+#include "lib/simplehash.h"
+
+/*
+ * Each WAL range described by the manifest file is parsed to produce an
+ * object like this.
+ */
+typedef struct manifest_wal_range
+{
+ TimeLineID tli;
+ XLogRecPtr start_lsn;
+ XLogRecPtr end_lsn;
+ struct manifest_wal_range *next;
+ struct manifest_wal_range *prev;
+} manifest_wal_range;
+
+/*
+ * All the data parsed from a backup_manifest file.
+ */
+typedef struct manifest_data
+{
+ int version;
+ uint64 system_identifier;
+ manifest_files_hash *files;
+ manifest_wal_range *first_wal_range;
+ manifest_wal_range *last_wal_range;
+} manifest_data;
+
+/*
+ * All of the context information we need while checking a backup manifest.
+ */
+typedef struct verifier_context
+{
+ manifest_data *manifest;
+ char *backup_directory;
+ SimpleStringList ignore_list;
+ bool exit_on_error;
+ bool saw_any_error;
+} verifier_context;
+
+extern manifest_file *verify_manifest_entry(verifier_context *context,
+ char *relpath, size_t filesize);
+
+extern void report_backup_error(verifier_context *context,
+ const char *pg_restrict fmt,...)
+ pg_attribute_printf(2, 3);
+extern void report_fatal_error(const char *pg_restrict fmt,...)
+ pg_attribute_printf(1, 2) pg_attribute_noreturn();
+extern bool should_ignore_relpath(verifier_context *context, const char *relpath);
+
+#endif /* PG_VERIFYBACKUP_H */
diff --git a/src/include/fe_utils/astreamer.h b/src/include/fe_utils/astreamer.h
index b4b9e381900..9d0a8c4d0c2 100644
--- a/src/include/fe_utils/astreamer.h
+++ b/src/include/fe_utils/astreamer.h
@@ -24,6 +24,7 @@
#include "common/compression.h"
#include "lib/stringinfo.h"
+#include "pqexpbuffer.h"
struct astreamer;
struct astreamer_ops;
--
2.18.0