skewer.diff
text/x-diff
Filename: skewer.diff
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/test/isolation/expected/skewer.out | 0 | 0 |
| src/test/isolation/specs/skewer.spec | 74 | 0 |
diff --git c/src/test/isolation/expected/skewer.out i/src/test/isolation/expected/skewer.out
new file mode 100644
index 00000000000..e69de29bb2d
diff --git c/src/test/isolation/specs/skewer.spec i/src/test/isolation/specs/skewer.spec
new file mode 100644
index 00000000000..f9fa6ea8aa1
--- /dev/null
+++ i/src/test/isolation/specs/skewer.spec
@@ -0,0 +1,74 @@
+setup
+{
+ DROP TABLE IF EXISTS t;
+ DROP EXTENSION IF EXISTS amcheck;
+ DROP EXTENSION IF EXISTS pageinspect;
+
+ CREATE EXTENSION amcheck;
+ CREATE EXTENSION pageinspect;
+ CREATE TABLE t(key int, d int);
+}
+
+session s1
+step s1b {BEGIN; SELECT txid_current();}
+step s1u1 {UPDATE t SET d = d + 1 WHERE key = 1; }
+step s1i3 {INSERT INTO t VALUES (3, 1);}
+step s1c {COMMIT;}
+
+session s2
+step s2b {BEGIN; SELECT txid_current();}
+step s2c {COMMIT;}
+
+session s3
+step s3b {BEGIN; SELECT txid_current();}
+step s3i1 {INSERT INTO t VALUES (1, 1);}
+step s3i2 {INSERT INTO t VALUES (2, 1);}
+step s3c {COMMIT;}
+step s3a {ABORT;}
+step s3u1 {UPDATE t SET d = d + 1 WHERE key = 1; }
+step s3u2 {UPDATE t SET d = d + 1 WHERE key = 2; }
+
+step s3ci { CREATE INDEX ON t(d)}
+
+session s4
+step s4show { SELECT lp, lp_off, lp_flags, lp_len, t_xmin, t_xmax, t_field3, t_ctid, t_infomask2, t_infomask, mask.raw_flags, mask.combined_flags, t_hoff, t_bits FROM heap_page_items(get_raw_page('t', 0)), heap_tuple_infomask_flags(t_infomask, t_infomask2) AS mask;}
+step s4verify { SELECT * FROM verify_heapam('t'); SELECT pg_backend_pid();}
+step s4vac { VACUUM (VERBOSE) t; }
+step s4vacfreeze { VACUUM (VERBOSE, FREEZE) t; }
+
+session s5
+step s5pin { BEGIN; DECLARE foo CURSOR FOR SELECT * FROM t; FETCH FROM foo;}
+
+### triggers endless loop without recent_dead logic in heap_prune_chain()
+#permutation s1b s2b s3b
+# s3i1 s3u1 s3c s3u1 s1u1 s1c
+# s4show
+# s4verify
+# s4vac
+# s4show
+# s4verify
+# s2c
+
+### triggers:
+### updated version at offset 3 is also the updated version of tuple at offset 1
+### unfrozen tuple was updated to produce a tuple at offset 3 which is frozen
+permutation
+ #s3ci
+ s1b s2b s3b
+ s3i1 s3i2 s3c
+ s3b s3u1 s3a
+ s4show
+ s4vac
+ s4show
+ s3b s3u2 s3a
+ s4vac
+ s4show
+ s4vac
+ s4verify
+ s4show
+ s1i3
+ s1c
+ s4vacfreeze
+ s4show
+ s4verify
+ s2c