Skip to content

Commit b386cd6

Browse files
authored
convert 2PC in TiDB sequence diagram from PNG to Mermaid code (pingcap#21423)
1 parent 72b5fb9 commit b386cd6

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

optimistic-transaction.md

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,56 @@ aliases: ['/docs-cn/dev/optimistic-transaction/','/docs-cn/dev/reference/transac
1818

1919
为支持分布式事务,TiDB 中乐观事务使用两阶段提交协议,流程如下:
2020

21-
![TiDB 中的两阶段提交](/media/2pc-in-tidb.png)
21+
```mermaid
22+
---
23+
title: 2PC in TiDB
24+
---
25+
sequenceDiagram
26+
participant client
27+
participant TiDB
28+
participant PD
29+
participant TiKV
30+
31+
client->>TiDB: begin
32+
TiDB->>PD: get ts as start_ts
33+
34+
loop excute SQL
35+
alt do read
36+
TiDB->>PD: get region from PD or cache
37+
TiDB->>TiKV: get data from TiKV or cache with start_ts
38+
TiDB-->>client: return read result
39+
end
40+
alt do write
41+
TiDB-->>TiDB: write in cache
42+
TiDB-->>client: return write result
43+
end
44+
end
45+
46+
client->>TiDB: commit
47+
48+
opt start 2PC
49+
TiDB-->>TiDB: for all keys need to write,choose first one as primary
50+
TiDB->>PD: locate each key
51+
TiDB-->>TiDB: group keys by region to [](region,keys)
52+
53+
opt prewrite with start_ts
54+
TiDB->>TiKV: prewrite(primary_key,start_ts)
55+
loop prewrite to each region in [](region,keys) parallelly
56+
TiDB->>TiKV: prewrite(keys,primary_key,start_ts)
57+
end
58+
end
59+
60+
opt commit
61+
TiDB-->>PD: get ts as commit_ts
62+
TiDB-->>TiKV: commit primary with commit_ts
63+
loop send commit to each region in [](region,keys) parallelly
64+
TiDB->>TiKV: commit(keys,commit_ts)
65+
end
66+
end
67+
end
68+
69+
TiDB-->>client: success
70+
```
2271

2372
1. 客户端开始一个事务。
2473

0 commit comments

Comments
 (0)