From 7bdaf0cb519c49000c7ed5df448a12a3ebbef599 Mon Sep 17 00:00:00 2001 From: wuyuechuan Date: Mon, 20 May 2024 16:35:44 +0800 Subject: [PATCH] 1. reset phdr->pd_lower before checksum 2. CalRealWriteSize return BLCKSZ when phdr->pd_lower & COMP_ASIGNMENT is true: COMP_ASIGNMENT means uncompressed page --- src/bin/pg_probackup/data.cpp | 6 ++++++ src/lib/page_compression/PageCompression.cpp | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/bin/pg_probackup/data.cpp b/src/bin/pg_probackup/data.cpp index 9d589ecfe..36b3d488f 100644 --- a/src/bin/pg_probackup/data.cpp +++ b/src/bin/pg_probackup/data.cpp @@ -114,9 +114,15 @@ uint16 pg_checksum_page(char* page, BlockNumber blkno) * the API of this function. */ save_checksum = phdr->pd_checksum; + uint16 lower = phdr->pd_lower; + phdr->pd_checksum = 0; + phdr->pd_lower &= (COMP_ASIGNMENT - 1); + checksum = pg_checksum_block(page, BLCKSZ); + phdr->pd_checksum = save_checksum; + phdr->pd_lower = lower; /* Mix in the block number to detect transposed pages */ checksum ^= blkno; diff --git a/src/lib/page_compression/PageCompression.cpp b/src/lib/page_compression/PageCompression.cpp index ef5be9520..9718795a3 100644 --- a/src/lib/page_compression/PageCompression.cpp +++ b/src/lib/page_compression/PageCompression.cpp @@ -302,7 +302,7 @@ size_t CalRealWriteSize(char *buffer) } /* check the assignment made during backup */ - if ((phdr->pd_lower & COMP_ASIGNMENT) == 0) { + if (phdr->pd_lower & COMP_ASIGNMENT) { return BLCKSZ; }