From 42bdaebf161841c8e248b197b7319779b8730323 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Wed, 15 Mar 2017 10:46:13 -0400 Subject: [PATCH] Add a regression test for snapshot too old with hash indexes. Amit Kapila, but I changed the comment not to be a copy-and-paste of an existing one, and instead referred to it. Discussion: http://postgr.es/m/CAA4eK1K0UJswCRf81WwJFO4H=+ZvbmKTNhAps-NkdmHRsq1GnQ@mail.gmail.com --- src/test/modules/snapshot_too_old/Makefile | 2 +- .../expected/sto_using_hash_index.out | 15 +++++++++ .../specs/sto_using_hash_index.spec | 31 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out create mode 100644 src/test/modules/snapshot_too_old/specs/sto_using_hash_index.spec diff --git a/src/test/modules/snapshot_too_old/Makefile b/src/test/modules/snapshot_too_old/Makefile index a72bfad43a..b6d998f320 100644 --- a/src/test/modules/snapshot_too_old/Makefile +++ b/src/test/modules/snapshot_too_old/Makefile @@ -4,7 +4,7 @@ # we have to clean those result files explicitly EXTRA_CLEAN = $(pg_regress_clean_files) -ISOLATIONCHECKS=sto_using_cursor sto_using_select +ISOLATIONCHECKS=sto_using_cursor sto_using_select sto_using_hash_index ifdef USE_PGXS PG_CONFIG = pg_config diff --git a/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out b/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out new file mode 100644 index 0000000000..bf94054790 --- /dev/null +++ b/src/test/modules/snapshot_too_old/expected/sto_using_hash_index.out @@ -0,0 +1,15 @@ +Parsed test spec with 2 sessions + +starting permutation: noseq s1f1 s2sleep s2u s1f2 +step noseq: SET enable_seqscan = false; +step s1f1: SELECT c FROM sto1 where c = 1000; +c + +1000 +step s2sleep: SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; +setting pg_sleep + +0 +step s2u: UPDATE sto1 SET c = 1001 WHERE c = 1000; +step s1f2: SELECT c FROM sto1 where c = 1001; +ERROR: snapshot too old diff --git a/src/test/modules/snapshot_too_old/specs/sto_using_hash_index.spec b/src/test/modules/snapshot_too_old/specs/sto_using_hash_index.spec new file mode 100644 index 0000000000..33d91ff852 --- /dev/null +++ b/src/test/modules/snapshot_too_old/specs/sto_using_hash_index.spec @@ -0,0 +1,31 @@ +# This test is like sto_using_select, except that we test access via a +# hash index. + +setup +{ + CREATE TABLE sto1 (c int NOT NULL); + INSERT INTO sto1 SELECT generate_series(1, 1000); + CREATE INDEX idx_sto1 ON sto1 USING HASH (c); +} +setup +{ + VACUUM ANALYZE sto1; +} + +teardown +{ + DROP TABLE sto1; +} + +session "s1" +setup { BEGIN ISOLATION LEVEL REPEATABLE READ; } +step "noseq" { SET enable_seqscan = false; } +step "s1f1" { SELECT c FROM sto1 where c = 1000; } +step "s1f2" { SELECT c FROM sto1 where c = 1001; } +teardown { ROLLBACK; } + +session "s2" +step "s2sleep" { SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; } +step "s2u" { UPDATE sto1 SET c = 1001 WHERE c = 1000; } + +permutation "noseq" "s1f1" "s2sleep" "s2u" "s1f2"