0002-Test-left-jumps-v18.patch
application/octet-stream
Filename: 0002-Test-left-jumps-v18.patch
Type: application/octet-stream
Part: 0
Message:
Re: GiST VACUUM
Patch
Format: format-patch
Series: patch v18-0002
Subject: Test left jumps v18
| File | + | − |
|---|---|---|
| insert.sql | 1 | 0 |
| rescantest.sh | 23 | 0 |
| src/backend/access/gist/gist.c | 1 | 1 |
| src/backend/access/gist/gistutil.c | 2 | 0 |
| src/backend/access/gist/gistvacuum.c | 4 | 0 |
| vacuum.sql | 2 | 0 |
From ee2b02e09bb4de148c8967bced924730750de744 Mon Sep 17 00:00:00 2001
From: Andrey <amborodin@acm.org>
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