aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFujii Masao <fujii@postgresql.org>2021-04-03 00:07:00 +0900
committerFujii Masao <fujii@postgresql.org>2021-04-03 00:07:00 +0900
commit2eb1fc8b1ae8b974007e85636fc7336a9b5d7222 (patch)
tree161d2e54319d1411b6b3e8ef98f02ac47583d929
parent53aafdb9ff6a561c7dea0f428a7c168f2b7e0f16 (diff)
downloadpostgresql-2eb1fc8b1ae8b974007e85636fc7336a9b5d7222.tar.gz
postgresql-2eb1fc8b1ae8b974007e85636fc7336a9b5d7222.zip
pg_checksums: Fix progress reporting.
pg_checksums uses two counters, total size and current size, to calculate the progress. Previously the progress that pg_checksums reported could not reach 100% at the end. The cause of this issue was that the sizes of only pages excluding new ones in each file were counted as the current size while the size of each file is counted as the total size. That is, the total size of all new pages could be reported as the difference between the total size and current size. This commit fixes this issue by making pg_checksums count the sizes of all pages including new ones in each file as the current size. Back-patch to v12 where progress reporting was added to pg_checksums. Reported-by: Shinya Kato Author: Shinya Kato Reviewed-by: Fujii Masao Discussion: https://postgr.es/m/TYAPR01MB289656B1ACA0A5E7CAD07BE3C47A9@TYAPR01MB2896.jpnprd01.prod.outlook.com
-rw-r--r--src/bin/pg_checksums/pg_checksums.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/bin/pg_checksums/pg_checksums.c b/src/bin/pg_checksums/pg_checksums.c
index 0223ee44082..831cf42d3ad 100644
--- a/src/bin/pg_checksums/pg_checksums.c
+++ b/src/bin/pg_checksums/pg_checksums.c
@@ -229,12 +229,19 @@ scan_file(const char *fn, BlockNumber segmentno)
}
blocks++;
+ /*
+ * Since the file size is counted as total_size for progress status
+ * information, the sizes of all pages including new ones in the file
+ * should be counted as current_size. Otherwise the progress reporting
+ * calculated using those counters may not reach 100%.
+ */
+ current_size += r;
+
/* New pages have no checksum yet */
if (PageIsNew(header))
continue;
csum = pg_checksum_page(buf.data, blockno + segmentno * RELSEG_SIZE);
- current_size += r;
if (mode == PG_MODE_CHECK)
{
if (csum != header->pd_checksum)