35#define ESTIMATED_BYTES_PER_MANIFEST_LINE 100
41#define READ_CHUNK_SIZE (128 * 1024)
47#define SH_PREFIX manifest_files
48#define SH_ELEMENT_TYPE manifest_file
49#define SH_KEY_TYPE const char *
50#define SH_KEY pathname
51#define SH_HASH_KEY(tb, key) hash_string(key)
52#define SH_EQUAL(tb, a, b) (strcmp(a, b) == 0)
53#define SH_SCOPE extern
54#define SH_RAW_ALLOCATOR pg_malloc0
59 int manifest_version);
61 uint64 manifest_system_identifier);
63 const char *pathname,
uint64 size,
66 uint8 *checksum_payload);
128 pg_fatal(
"could not open file \"%s\": %m", pathname);
133 pg_fatal(
"could not stat file \"%s\": %m", pathname);
154 if (
statbuf.st_size <= chunk_size)
161 pg_fatal(
"could not read file \"%s\": %m", pathname);
163 pg_fatal(
"could not read file \"%s\": read %d of %lld",
164 pathname, rc, (
long long int)
statbuf.st_size);
199 pg_fatal(
"could not read file \"%s\": %m", pathname);
201 pg_fatal(
"could not read file \"%s\": read %lld of %lld",
204 (
long long int)
statbuf.st_size);
244 int manifest_version)
247 if (manifest_version == 1)
248 pg_fatal(
"backup manifest version 1 does not support incremental backup");
256 uint64 manifest_system_identifier)
261 manifest->system_identifier = manifest_system_identifier;
269 const char *pathname,
uint64 size,
271 int checksum_length,
uint8 *checksum_payload)
280 pg_fatal(
"duplicate path name in backup manifest: \"%s\"", pathname);
303 range->start_lsn = start_lsn;
304 range->end_lsn = end_lsn;
#define pg_attribute_printf(f, a)
void * pg_malloc(size_t size)
void * pg_malloc0(size_t size)
#define palloc_object(type)
#define ESTIMATED_BYTES_PER_MANIFEST_LINE
static pg_noreturn void manifest_data ** load_backup_manifests(int n_backups, char **backup_directories)
manifest_data * load_backup_manifest(char *backup_directory)
static void combinebackup_per_file_cb(JsonManifestParseContext *context, const char *pathname, uint64 size, pg_checksum_type checksum_type, int checksum_length, uint8 *checksum_payload)
static pg_noreturn void report_manifest_error(JsonManifestParseContext *context, const char *fmt,...) pg_attribute_printf(2
static void combinebackup_version_cb(JsonManifestParseContext *context, int manifest_version)
static void combinebackup_per_wal_range_cb(JsonManifestParseContext *context, TimeLineID tli, XLogRecPtr start_lsn, XLogRecPtr end_lsn)
static void combinebackup_system_identifier_cb(JsonManifestParseContext *context, uint64 manifest_system_identifier)
void pg_log_generic_v(enum pg_log_level level, enum pg_log_part part, const char *pg_restrict fmt, va_list ap)
void pfree(void *pointer)
void json_parse_manifest(JsonManifestParseContext *context, const char *buffer, size_t size)
JsonManifestParseIncrementalState * json_parse_manifest_incremental_init(JsonManifestParseContext *context)
void json_parse_manifest_incremental_shutdown(JsonManifestParseIncrementalState *incstate)
void json_parse_manifest_incremental_chunk(JsonManifestParseIncrementalState *incstate, const char *chunk, size_t size, bool is_last)
#define pg_log_warning(...)
static int fd(const char *x, int i)
static struct cvec * range(struct vars *v, chr a, chr b, int cases)
json_manifest_per_wal_range_callback per_wal_range_cb
json_manifest_system_identifier_callback system_identifier_cb
json_manifest_error_callback error_cb
json_manifest_per_file_callback per_file_cb
json_manifest_version_callback version_cb
manifest_files_hash * files
pg_checksum_type checksum_type