From 031e17e9e5bf36e1f6ae5e9b1b3ae15b14f60088 Mon Sep 17 00:00:00 2001 From: Amul Sul Date: Mon, 17 Jun 2024 14:17:22 +0530 Subject: [PATCH v3 06/11] Refactor: split verify_backup_file() function. Separate the manifest entry verification code into a new function. --- src/bin/pg_verifybackup/pg_verifybackup.c | 37 ++++++++++++++++------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/bin/pg_verifybackup/pg_verifybackup.c b/src/bin/pg_verifybackup/pg_verifybackup.c index 134d575d738..bb732bf06ca 100644 --- a/src/bin/pg_verifybackup/pg_verifybackup.c +++ b/src/bin/pg_verifybackup/pg_verifybackup.c @@ -619,6 +619,27 @@ verify_backup_file(verifier_context *context, char *relpath, char *fullpath) return; } + /* Check the backup manifest entry for this file. */ + m = verify_manifest_entry(context, relpath, sb.st_size); + + /* + * Validate the manifest system identifier, not available in manifest + * version 1. + */ + if (context->manifest->version != 1 && + strcmp(relpath, "global/pg_control") == 0 && + m != NULL && m->matched && !m->bad) + verify_control_file(fullpath, context->manifest->system_identifier); +} + +/* + * Verify file and its size entry in the manifest. + */ +manifest_file * +verify_manifest_entry(verifier_context *context, char *relpath, size_t filesize) +{ + manifest_file *m; + /* Check whether there's an entry in the manifest hash. */ m = manifest_files_lookup(context->manifest->files, relpath); if (m == NULL) @@ -626,29 +647,21 @@ verify_backup_file(verifier_context *context, char *relpath, char *fullpath) report_backup_error(context, "\"%s\" is present on disk but not in the manifest", relpath); - return; + return NULL; } /* Flag this entry as having been encountered in the filesystem. */ m->matched = true; /* Check that the size matches. */ - if (m->size != sb.st_size) + if (m->size != filesize) { report_backup_error(context, "\"%s\" has size %lld on disk but size %zu in the manifest", - relpath, (long long int) sb.st_size, m->size); + relpath, (long long int) filesize, m->size); m->bad = true; } - /* - * Validate the manifest system identifier, not available in manifest - * version 1. - */ - if (context->manifest->version != 1 && - strcmp(relpath, "global/pg_control") == 0) - verify_control_file(fullpath, context->manifest->system_identifier); - /* Update statistics for progress report, if necessary */ if (context->show_progress && !context->skip_checksums && should_verify_checksum(m)) @@ -660,6 +673,8 @@ verify_backup_file(verifier_context *context, char *relpath, char *fullpath) * afterwards verify the checksums. That's because computing checksums may * take a while, and we'd like to report more obvious problems quickly. */ + + return m; } /* -- 2.18.0