-
Notifications
You must be signed in to change notification settings - Fork 3.9k
/
Copy pathskip_locked
132 lines (108 loc) · 3.17 KB
/
skip_locked
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
new-lock-table maxlocks=10000
----
new-txn txn=txn1 ts=10,1 epoch=0
----
new-txn txn=txn2 ts=11,1 epoch=0
----
# keyspace:
# a: unlocked
# b: locked by txn1
# c: locked by txn2
# d: locked by txn1
# e: unlocked
new-request r=req1 txn=txn1 ts=10,1 spans=w@b,d
----
scan r=req1
----
start-waiting: false
should-wait r=req1
----
false
acquire r=req1 k=b durability=u
----
global: num=1
lock: "b"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
local: num=0
acquire r=req1 k=d durability=u
----
global: num=2
lock: "b"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "d"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
local: num=0
dequeue r=req1
----
global: num=2
lock: "b"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "d"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
local: num=0
new-request r=req2 txn=txn2 ts=11,1 spans=w@c
----
scan r=req2
----
start-waiting: false
should-wait r=req2
----
false
acquire r=req2 k=c durability=u
----
global: num=3
lock: "b"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "c"
holder: txn: 00000000-0000-0000-0000-000000000002, ts: 11.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "d"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
local: num=0
dequeue r=req2
----
global: num=3
lock: "b"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "c"
holder: txn: 00000000-0000-0000-0000-000000000002, ts: 11.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "d"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
local: num=0
# ---------------------------------------------------------------------------------
# req2 will scan the lock table with a Skip wait policy. It will not need to wait.
# Once it begins evaluating, it will probe into the lock table to determine which
# keys to skip.
# ---------------------------------------------------------------------------------
new-request r=req3 txn=txn2 ts=11,1 spans=r@a,f skip-locked
----
scan r=req3
----
start-waiting: false
should-wait r=req3
----
false
is-key-locked r=req3 k=a
----
locked: false
is-key-locked r=req3 k=b
----
locked: true, holder: 00000000-0000-0000-0000-000000000001
is-key-locked r=req3 k=c
----
locked: false
is-key-locked r=req3 k=d
----
locked: true, holder: 00000000-0000-0000-0000-000000000001
is-key-locked r=req3 k=e
----
locked: false
dequeue r=req3
----
global: num=3
lock: "b"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "c"
holder: txn: 00000000-0000-0000-0000-000000000002, ts: 11.000000000,1, info: unrepl epoch: 0, seqs: [0]
lock: "d"
holder: txn: 00000000-0000-0000-0000-000000000001, ts: 10.000000000,1, info: unrepl epoch: 0, seqs: [0]
local: num=0