mirror of https://github.com/postgres/postgres
This time, instead of using a core isolation test, put it on its own test module; this way it can require the pageinspect module to be present before running. The module's Makefile is loosely modeled after test_decoding's, so that it's easy to add further tests for either pg_regress or isolationtester later. Backpatch to 9.5.pull/7/head
parent
6a0779a397
commit
672e3ec0e9
@ -0,0 +1,3 @@ |
|||||||
|
# Generated subdirectories |
||||||
|
/isolation_output/ |
||||||
|
/tmp_check/ |
@ -0,0 +1,30 @@ |
|||||||
|
# src/test/modules/brin/Makefile
|
||||||
|
|
||||||
|
EXTRA_CLEAN = ./isolation_output
|
||||||
|
EXTRA_INSTALL=contrib/pageinspect
|
||||||
|
|
||||||
|
ISOLATIONCHECKS=summarization-and-inprogress-insertion
|
||||||
|
|
||||||
|
ifdef USE_PGXS |
||||||
|
PG_CONFIG = pg_config
|
||||||
|
PGXS := $(shell $(PG_CONFIG) --pgxs)
|
||||||
|
include $(PGXS) |
||||||
|
else |
||||||
|
subdir = src/test/modules/brin
|
||||||
|
top_builddir = ../../../..
|
||||||
|
include $(top_builddir)/src/Makefile.global |
||||||
|
include $(top_srcdir)/contrib/contrib-global.mk |
||||||
|
endif |
||||||
|
|
||||||
|
check: isolation-check |
||||||
|
|
||||||
|
isolation-check: | submake-isolation |
||||||
|
$(MKDIR_P) isolation_output
|
||||||
|
$(pg_isolation_regress_check) \
|
||||||
|
--outputdir=./isolation_output \
|
||||||
|
$(ISOLATIONCHECKS)
|
||||||
|
|
||||||
|
PHONY: check isolation-check |
||||||
|
|
||||||
|
submake-isolation: |
||||||
|
$(MAKE) -C $(top_builddir)/src/test/isolation all
|
@ -0,0 +1,39 @@ |
|||||||
|
Parsed test spec with 2 sessions |
||||||
|
|
||||||
|
starting permutation: s2check s1b s2b s1i s2summ s1c s2c s2check |
||||||
|
step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); |
||||||
|
itemoffset blknum attnum allnulls hasnulls placeholder value |
||||||
|
|
||||||
|
1 0 1 f f f {1 .. 1} |
||||||
|
step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; |
||||||
|
step s2b: BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; |
||||||
|
?column? |
||||||
|
|
||||||
|
1 |
||||||
|
step s1i: INSERT INTO brin_iso VALUES (1000); |
||||||
|
step s2summ: SELECT brin_summarize_new_values('brinidx'::regclass); |
||||||
|
brin_summarize_new_values |
||||||
|
|
||||||
|
1 |
||||||
|
step s1c: COMMIT; |
||||||
|
step s2c: COMMIT; |
||||||
|
step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); |
||||||
|
itemoffset blknum attnum allnulls hasnulls placeholder value |
||||||
|
|
||||||
|
1 0 1 f f f {1 .. 1} |
||||||
|
2 1 1 f f f {1 .. 1000} |
||||||
|
|
||||||
|
starting permutation: s2check s1b s1i s2vacuum s1c s2check |
||||||
|
step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); |
||||||
|
itemoffset blknum attnum allnulls hasnulls placeholder value |
||||||
|
|
||||||
|
1 0 1 f f f {1 .. 1} |
||||||
|
step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ; |
||||||
|
step s1i: INSERT INTO brin_iso VALUES (1000); |
||||||
|
step s2vacuum: VACUUM brin_iso; |
||||||
|
step s1c: COMMIT; |
||||||
|
step s2check: SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); |
||||||
|
itemoffset blknum attnum allnulls hasnulls placeholder value |
||||||
|
|
||||||
|
1 0 1 f f f {1 .. 1} |
||||||
|
2 1 1 f f f {1 .. 1000} |
@ -0,0 +1,44 @@ |
|||||||
|
# This test verifies that values inserted in transactions still in progress |
||||||
|
# are considered during concurrent range summarization (either using the |
||||||
|
# brin_summarize_new_values function or regular VACUUM). |
||||||
|
|
||||||
|
setup |
||||||
|
{ |
||||||
|
CREATE TABLE brin_iso ( |
||||||
|
value int |
||||||
|
) WITH (fillfactor=10); |
||||||
|
CREATE INDEX brinidx ON brin_iso USING brin (value) WITH (pages_per_range=1); |
||||||
|
-- this fills the first page |
||||||
|
DO $$ |
||||||
|
DECLARE curtid tid; |
||||||
|
BEGIN |
||||||
|
LOOP |
||||||
|
INSERT INTO brin_iso VALUES (1) RETURNING ctid INTO curtid; |
||||||
|
EXIT WHEN curtid > tid '(1, 0)'; |
||||||
|
END LOOP; |
||||||
|
END; |
||||||
|
$$; |
||||||
|
CREATE EXTENSION IF NOT EXISTS pageinspect; |
||||||
|
} |
||||||
|
|
||||||
|
teardown |
||||||
|
{ |
||||||
|
DROP TABLE brin_iso; |
||||||
|
} |
||||||
|
|
||||||
|
session "s1" |
||||||
|
step "s1b" { BEGIN ISOLATION LEVEL REPEATABLE READ; } |
||||||
|
step "s1i" { INSERT INTO brin_iso VALUES (1000); } |
||||||
|
step "s1c" { COMMIT; } |
||||||
|
|
||||||
|
session "s2" |
||||||
|
step "s2b" { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; } |
||||||
|
step "s2summ" { SELECT brin_summarize_new_values('brinidx'::regclass); } |
||||||
|
step "s2c" { COMMIT; } |
||||||
|
|
||||||
|
step "s2vacuum" { VACUUM brin_iso; } |
||||||
|
|
||||||
|
step "s2check" { SELECT * FROM brin_page_items(get_raw_page('brinidx', 2), 'brinidx'::regclass); } |
||||||
|
|
||||||
|
permutation "s2check" "s1b" "s2b" "s1i" "s2summ" "s1c" "s2c" "s2check" |
||||||
|
permutation "s2check" "s1b" "s1i" "s2vacuum" "s1c" "s2check" |
Loading…
Reference in new issue