From 52d1fc3c9021da35bfde3864b64dbcdf3c7bc434 Mon Sep 17 00:00:00 2001 From: "wanghaiyang.001" Date: Thu, 4 Aug 2022 18:19:12 +0800 Subject: [PATCH] mask un-logged hint bit BRIN_EVACUATE_PAGE before consistency-checking --- src/backend/access/brin/brin_pageops.c | 8 +++++++- src/backend/access/brin/brin_xlog.c | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/backend/access/brin/brin_pageops.c b/src/backend/access/brin/brin_pageops.c index df9ffc2fb8..0a4960232e 100644 --- a/src/backend/access/brin/brin_pageops.c +++ b/src/backend/access/brin/brin_pageops.c @@ -541,7 +541,13 @@ brin_start_evacuating_page(Relation idxRel, Buffer buf) lp = PageGetItemId(page, off); if (ItemIdIsUsed(lp)) { - /* prevent other backends from adding more stuff to this page */ + /* + * Prevent other backends from adding more stuff to this page. + * + * Note that BRIN_EVACUATE_PAGE is just an un-logged hint bit, + * which works on primary-node only. See br_page_get_freespace + * for details. + */ BrinPageFlags(page) |= BRIN_EVACUATE_PAGE; MarkBufferDirtyHint(buf, true); diff --git a/src/backend/access/brin/brin_xlog.c b/src/backend/access/brin/brin_xlog.c index 39dc130e16..e88c327090 100644 --- a/src/backend/access/brin/brin_xlog.c +++ b/src/backend/access/brin/brin_xlog.c @@ -358,4 +358,10 @@ brin_mask(char *pagedata, BlockNumber blkno) { mask_unused_space(page); } + + /* + * BRIN_EVACUATE_PAGE is an unlogged bit, which is never set during + * recovery. So, mask it. See brin_start_evacuating_page() for details. + */ + BrinPageFlags(page) &= ~BRIN_EVACUATE_PAGE; } -- 2.36.0.windows.1