Fix for checksum validation patch
authorMagnus Hagander
Tue, 3 Apr 2018 11:57:49 +0000 (13:57 +0200)
committerMagnus Hagander
Tue, 3 Apr 2018 11:57:49 +0000 (13:57 +0200)
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

index 300dbfbcd6a54d59617722b1292e7361eb5aac75..c5b83232fdfca3d15d7da34d552ac95f38399371 100644 (file)
@@ -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;