mirror of https://github.com/postgres/postgres
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.compull/175/head
parent
af99d44a88
commit
aa2d6b15d6
@ -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 */ |
||||
Loading…
Reference in new issue