mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
BRIN: mask BRIN_EVACUATE_PAGE for WAL consistency checking
That bit is unlogged and therefore it's wrong to consider it in WAL page
comparison.
Add a test that tickles the case, as branch testing technology allows.
This has been a problem ever since wal consistency checking was
introduced (commit a507b86900
for pg10), so backpatch to all supported
branches.
Author: 王海洋 (Haiyang Wang) <wanghaiyang.001@bytedance.com>
Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Discussion: https://postgr.es/m/CACciXAD2UvLMOhc4jX9VvOKt7DtYLr3OYRBhvOZ-jRxtzc_7Jg@mail.gmail.com
Discussion: https://postgr.es/m/CACciXADOfErX9Bx0nzE_SkdfXr6Bbpo5R=v_B6MUTEYW4ya+cg@mail.gmail.com
This commit is contained in:
@@ -541,7 +541,12 @@ 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:
|
||||
* BRIN_EVACUATE_PAGE informs br_page_get_freespace that this page
|
||||
* can no longer be used to add new tuples. Note that this flag
|
||||
* is not WAL-logged, except accidentally.
|
||||
*/
|
||||
BrinPageFlags(page) |= BRIN_EVACUATE_PAGE;
|
||||
MarkBufferDirtyHint(buf, true);
|
||||
|
||||
|
@@ -358,4 +358,10 @@ brin_mask(char *pagedata, BlockNumber blkno)
|
||||
{
|
||||
mask_unused_space(page);
|
||||
}
|
||||
|
||||
/*
|
||||
* BRIN_EVACUATE_PAGE is not WAL-logged, since it's of no use in recovery.
|
||||
* Mask it. See brin_start_evacuating_page() for details.
|
||||
*/
|
||||
BrinPageFlags(page) &= ~BRIN_EVACUATE_PAGE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user