From ee2b02e09bb4de148c8967bced924730750de744 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 3 Jan 2019 22:29:10 +0500 Subject: [PATCH 2/2] Test left jumps v18 --- insert.sql | 1 + rescantest.sh | 23 +++++++++++++++++++++++ src/backend/access/gist/gist.c | 2 +- src/backend/access/gist/gistutil.c | 2 ++ src/backend/access/gist/gistvacuum.c | 4 ++++ vacuum.sql | 2 ++ 6 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 insert.sql create mode 100755 rescantest.sh create mode 100644 vacuum.sql diff --git a/insert.sql b/insert.sql new file mode 100644 index 0000000000..3028aa336c --- /dev/null +++ b/insert.sql @@ -0,0 +1 @@ +insert into x select cube(random()) c from generate_series(1,10000) y; diff --git a/rescantest.sh b/rescantest.sh new file mode 100755 index 0000000000..2478599c70 --- /dev/null +++ b/rescantest.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -e +pkill -9 postgres || true +make -j 16 && make install + +DB=~/DemoDb +BINDIR=~/project/bin + +rm -rf $DB +cp *.sql $BINDIR +cd $BINDIR +./initdb $DB +./pg_ctl -D $DB start +./psql postgres -c "create extension cube;" + + +./psql postgres -c "create table x as select cube(random()) c from generate_series(1,10000) y; create index on x using gist(c);" +./psql postgres -c "delete from x where (c~>1)>0.1;" +./pgbench -f insert.sql postgres -T 30 & +./pgbench -f vacuum.sql postgres -T 30 + +./pg_ctl -D $DB stop diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 3f52b8f4dc..e034906e42 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -585,7 +585,7 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, * the child pages first, we wouldn't know the recptr of the WAL record * we're about to write. */ - if (BufferIsValid(leftchildbuf)) + if (BufferIsValid(leftchildbuf) && ((random()%20) != 0)) // REMOVE THIS LINE randoms { Page leftpg = BufferGetPage(leftchildbuf); diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c index 8d3dfad27b..f34dd03434 100644 --- a/src/backend/access/gist/gistutil.c +++ b/src/backend/access/gist/gistutil.c @@ -829,6 +829,8 @@ gistNewBuffer(Relation r) if (needLock) UnlockRelationForExtension(r, ExclusiveLock); + ReleaseBuffer(ReadBuffer(r, P_NEW));// REMOVE THIS LINE + return buffer; } diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index c4ed1b5402..7ce1099b62 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -256,6 +256,10 @@ restart: (opaque->rightlink != InvalidBlockNumber) && (opaque->rightlink < orig_blkno)) { + if (GistFollowRight(page)) // REMOVE THIS LINE + elog(WARNING,"RESCAN TRIGGERED BY FollowRight"); // REMOVE THIS LINE + if (vstate->startNSN < GistPageGetNSN(page)) // REMOVE THIS LINE + elog(WARNING,"RESCAN TRIGGERED BY NSN"); // REMOVE THIS LINE recurse_to = opaque->rightlink; } diff --git a/vacuum.sql b/vacuum.sql new file mode 100644 index 0000000000..f30150bf01 --- /dev/null +++ b/vacuum.sql @@ -0,0 +1,2 @@ +delete from x where (c~>1)>0.1; +vacuum x; -- 2.19.2