diff options
| author | Tom Lane | 2013-03-17 03:22:17 +0000 |
|---|---|---|
| committer | Tom Lane | 2013-03-17 03:22:57 +0000 |
| commit | d43837d03067487560af481474ae985df894f786 (patch) | |
| tree | 7289d038a184fa3dc59195aaa27538714ea85ad9 /src/test/isolation/specs/timeouts.spec | |
| parent | d2bef5f7db5f3afdbbb3f58b8eff49f0bc7ef790 (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.spec | 45 |
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" |
