summaryrefslogtreecommitdiff
path: root/src/test/isolation/specs/timeouts.spec
diff options
context:
space:
mode:
authorTom Lane2013-03-17 03:22:17 +0000
committerTom Lane2013-03-17 03:22:57 +0000
commitd43837d03067487560af481474ae985df894f786 (patch)
tree7289d038a184fa3dc59195aaa27538714ea85ad9 /src/test/isolation/specs/timeouts.spec
parentd2bef5f7db5f3afdbbb3f58b8eff49f0bc7ef790 (diff)
Add lock_timeout configuration parameter.
This GUC allows limiting the time spent waiting to acquire any one heavyweight lock. In support of this, improve the recently-added timeout infrastructure to permit efficiently enabling or disabling multiple timeouts at once. That reduces the performance hit from turning on lock_timeout, though it's still not zero. Zoltán Böszörményi, reviewed by Tom Lane, Stephen Frost, and Hari Babu
Diffstat (limited to 'src/test/isolation/specs/timeouts.spec')
-rw-r--r--src/test/isolation/specs/timeouts.spec45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/test/isolation/specs/timeouts.spec b/src/test/isolation/specs/timeouts.spec
new file mode 100644
index 00000000000..000b50c9c92
--- /dev/null
+++ b/src/test/isolation/specs/timeouts.spec
@@ -0,0 +1,45 @@
+# Simple tests for statement_timeout and lock_timeout features
+
+setup
+{
+ CREATE TABLE accounts (accountid text PRIMARY KEY, balance numeric not null);
+ INSERT INTO accounts VALUES ('checking', 600), ('savings', 600);
+}
+
+teardown
+{
+ DROP TABLE accounts;
+}
+
+session "s1"
+setup { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step "rdtbl" { SELECT * FROM accounts; }
+step "wrtbl" { UPDATE accounts SET balance = balance + 100; }
+teardown { ABORT; }
+
+session "s2"
+setup { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step "sto" { SET statement_timeout = 1000; }
+step "lto" { SET lock_timeout = 1000; }
+step "lsto" { SET lock_timeout = 1000; SET statement_timeout = 2000; }
+step "slto" { SET lock_timeout = 2000; SET statement_timeout = 1000; }
+step "locktbl" { LOCK TABLE accounts; }
+step "update" { DELETE FROM accounts WHERE accountid = 'checking'; }
+teardown { ABORT; }
+
+# statement timeout, table-level lock
+permutation "rdtbl" "sto" "locktbl"
+# lock timeout, table-level lock
+permutation "rdtbl" "lto" "locktbl"
+# lock timeout expires first, table-level lock
+permutation "rdtbl" "lsto" "locktbl"
+# statement timeout expires first, table-level lock
+permutation "rdtbl" "slto" "locktbl"
+# statement timeout, row-level lock
+permutation "wrtbl" "sto" "update"
+# lock timeout, row-level lock
+permutation "wrtbl" "lto" "update"
+# lock timeout expires first, row-level lock
+permutation "wrtbl" "lsto" "update"
+# statement timeout expires first, row-level lock
+permutation "wrtbl" "slto" "update"