From a08dc711952081d63577fc182fcf955958f70add Mon Sep 17 00:00:00 2001 From: Magnus Hagander Date: Tue, 3 Apr 2018 13:57:49 +0200 Subject: [PATCH] Fix for checksum validation patch Reorder the check for non-BLCKSZ size reads to make sure we don't abort sending the file in this case. Missed in the previous commit. --- src/backend/replication/basebackup.c | 36 ++++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 300dbfbcd6..c5b83232fd 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1410,26 +1410,26 @@ sendFile(const char *readfilename, const char *tarfilename, struct stat *statbuf while ((cnt = fread(buf, 1, Min(sizeof(buf), statbuf->st_size - len), fp)) > 0) { - if (verify_checksum) + /* + * The checksums are verified at block level, so we iterate over + * the buffer in chunks of BLCKSZ, after making sure that + * TAR_SEND_SIZE/buf is divisible by BLCKSZ and we read a multiple + * of BLCKSZ bytes. + */ + Assert(TAR_SEND_SIZE % BLCKSZ == 0); + + if (verify_checksum && (cnt % BLCKSZ != 0)) { - /* - * The checksums are verified at block level, so we iterate over - * the buffer in chunks of BLCKSZ, after making sure that - * TAR_SEND_SIZE/buf is divisible by BLCKSZ and we read a multiple - * of BLCKSZ bytes. - */ - Assert(TAR_SEND_SIZE % BLCKSZ == 0); + ereport(WARNING, + (errmsg("cannot verify checksum in file \"%s\", block " + "%d: read buffer size %d and page size %d " + "differ", + readfilename, blkno, (int) cnt, BLCKSZ))); + verify_checksum = false; + } - if (cnt % BLCKSZ != 0) - { - ereport(WARNING, - (errmsg("cannot verify checksum in file \"%s\", block " - "%d: read buffer size %d and page size %d " - "differ", - readfilename, blkno, (int) cnt, BLCKSZ))); - verify_checksum = false; - continue; - } + if (verify_checksum) + { for (i = 0; i < cnt / BLCKSZ; i++) { page = buf + BLCKSZ * i; -- 2.30.2