pg_verifybackup: Move some declarations to new pg_verifybackup.h
authorRobert Haas <rhaas@postgresql.org>
Fri, 16 Aug 2024 19:09:42 +0000 (15:09 -0400)
committerRobert Haas <rhaas@postgresql.org>
Fri, 16 Aug 2024 19:09:42 +0000 (15:09 -0400)
This is in preparation for adding a second source file to this
directory.

Amul Sul, reviewed by Sravan Kumar and revised a bit by me.

Discussion: http://postgr.es/m/CAAJ_b95mcGjkfAf1qduOR97CokW8-_i-dWLm3v6x1w2-OW9M+A@mail.gmail.com

src/bin/pg_verifybackup/pg_verifybackup.c
src/bin/pg_verifybackup/pg_verifybackup.h [new file with mode: 0644]

index 4f19aea9d35e4396dc0da9adff4be70aa2556066..3fcfb1672175d3c96ab3a19a039db13d83c1eed1 100644 (file)
 #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"
 
 /*
  */
 #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            skip_checksums;
-       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);
@@ -151,13 +77,6 @@ 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);
 
@@ -980,7 +899,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;
@@ -997,7 +916,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;
@@ -1016,7 +935,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 (file)
index 0000000..c395217
--- /dev/null
@@ -0,0 +1,103 @@
+/*-------------------------------------------------------------------------
+ *
+ * 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"
+
+/*
+ * 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            skip_checksums;
+       bool            exit_on_error;
+       bool            saw_any_error;
+} verifier_context;
+
+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 */