mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-08 22:12:56 +00:00
Reintialize page in allocNewBuffer only when buffer is returned (#12399)
## Problem See https://github.com/neondatabase/neon/issues/12387 `allocNewBuffer` initialise page with zeros but not always return it because of parity checks. In case of wrong parity the page is rejected and as a result we have dirty page with zero LSN, which cause assertion failure on neon_write when page is evicted from shared buffers. ## Summary of changes Perform, page initialisation in `allocNewBuffer` only when buffer is returned (parity check is passed). Postgres PRs: https://github.com/neondatabase/postgres/pull/661 https://github.com/neondatabase/postgres/pull/662 https://github.com/neondatabase/postgres/pull/663 https://github.com/neondatabase/postgres/pull/664 --------- Co-authored-by: Konstantin Knizhnik <knizhnik@neon.tech> Co-authored-by: Kosntantin Knizhnik <konstantin.knizhnik@databricks.com>
This commit is contained in:
committed by
GitHub
parent
b3844903e5
commit
b00a0096bf
9
test_runner/sql_regress/expected/neon-spgist.out
Normal file
9
test_runner/sql_regress/expected/neon-spgist.out
Normal file
@@ -0,0 +1,9 @@
|
||||
-- Test unlogged build of SPGIST index (no "Page evicted with zero LSN" error)
|
||||
create table spgist_point_tbl(id int4, p point);
|
||||
create index spgist_point_idx on spgist_point_tbl using spgist(p) with (fillfactor = 25);
|
||||
insert into spgist_point_tbl (id, p) select g, point(g*10, g*10) from generate_series(1, 10000) g;
|
||||
insert into spgist_point_tbl (id, p) select g, point(g*10, g*10) from generate_series(1, 10000) g;
|
||||
insert into spgist_point_tbl (id, p) select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g;
|
||||
vacuum spgist_point_tbl;
|
||||
insert into spgist_point_tbl (id, p) select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g;
|
||||
checkpoint;
|
||||
@@ -9,5 +9,6 @@ test: neon-rel-truncate
|
||||
test: neon-clog
|
||||
test: neon-test-utils
|
||||
test: neon-vacuum-full
|
||||
test: neon-event-triggers
|
||||
test: neon-subxacts
|
||||
test: neon-spgist
|
||||
test: neon-event-triggers
|
||||
|
||||
10
test_runner/sql_regress/sql/neon-spgist.sql
Normal file
10
test_runner/sql_regress/sql/neon-spgist.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
-- Test unlogged build of SPGIST index (no "Page evicted with zero LSN" error)
|
||||
create table spgist_point_tbl(id int4, p point);
|
||||
create index spgist_point_idx on spgist_point_tbl using spgist(p) with (fillfactor = 25);
|
||||
insert into spgist_point_tbl (id, p) select g, point(g*10, g*10) from generate_series(1, 10000) g;
|
||||
insert into spgist_point_tbl (id, p) select g, point(g*10, g*10) from generate_series(1, 10000) g;
|
||||
insert into spgist_point_tbl (id, p) select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g;
|
||||
|
||||
vacuum spgist_point_tbl;
|
||||
insert into spgist_point_tbl (id, p) select g+100000, point(g*10+1, g*10+1) from generate_series(1, 10000) g;
|
||||
checkpoint;
|
||||
Reference in New Issue
Block a user