summaryrefslogtreecommitdiff
path: root/src/test/isolation/specs/deadlock-soft-2.spec
blob: 46b73bc0823f95f7ad5bcaa00689aaff51047118 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Soft deadlock requiring reversal of multiple wait-edges.  s1 must
# jump over both s3 and s4 and acquire the lock on a2 immediately,
# since s3 and s4 are hard-blocked on a1.

# The expected output for this test assumes that isolationtester will
# detect step s1b as waiting before the deadlock detector runs and
# releases s1 from its blocked state.  To leave enough time for that
# to happen even in very slow (CLOBBER_CACHE_ALWAYS) cases, we must
# increase deadlock_timeout.

setup
{
  CREATE TABLE a1 ();
  CREATE TABLE a2 ();
}

teardown
{
  DROP TABLE a1, a2;
}

session "s1"
setup		{ BEGIN; SET deadlock_timeout = '5s'; }
step "s1a"	{ LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; }
step "s1b"	{ LOCK TABLE a2 IN SHARE UPDATE EXCLUSIVE MODE; }
step "s1c"	{ COMMIT; }

session "s2"
setup		{ BEGIN; SET deadlock_timeout = '100s'; }
step "s2a" 	{ LOCK TABLE a2 IN ACCESS SHARE MODE; }
step "s2b" 	{ LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; }
step "s2c"	{ COMMIT; }

session "s3"
setup		{ BEGIN; SET deadlock_timeout = '100s'; }
step "s3a"	{ LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
step "s3c"	{ COMMIT; }

session "s4"
setup		{ BEGIN; SET deadlock_timeout = '100s'; }
step "s4a"	{ LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
step "s4c"	{ COMMIT; }

permutation "s1a" "s2a" "s2b" "s3a" "s4a" "s1b" "s1c" "s2c" "s3c" "s4c"