Skip to content

Commit 9829387

Browse files
authored
refactor: update global session status, branch session status in txn (#120)
* refactor: branch transaction commit rollback logic * refactor: update global session status, branch session status in txn
1 parent 3be1d59 commit 9829387

4 files changed

Lines changed: 73 additions & 66 deletions

File tree

go.mod

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,6 @@ require (
4949
github.com/gorilla/mux v1.8.0
5050
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 // indirect
5151
github.com/jonboulle/clockwork v0.2.2 // indirect
52-
github.com/mattn/go-colorable v0.1.12 // indirect
53-
github.com/mattn/go-runewidth v0.0.13 // indirect
54-
github.com/mgechev/revive v1.2.1 // indirect
5552
github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5 // indirect
5653
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect
5754
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect

go.sum

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,6 @@ github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tj
119119
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
120120
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
121121
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
122-
github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4 h1:tFXjAxje9thrTF4h57Ckik+scJjTWdwAtZqZPtOT48M=
123-
github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU=
124122
github.com/cheggaaa/pb/v3 v3.0.8/go.mod h1:UICbiLec/XO6Hw6k+BHEtHeQFzzBH4i2/qk/ow1EJTA=
125123
github.com/cheynewallace/tabby v1.1.1/go.mod h1:Pba/6cUL8uYqvOc9RkyvFbHGrQ9wShyrn6/S/1OYVys=
126124
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -227,10 +225,7 @@ github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod
227225
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
228226
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
229227
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
230-
github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
231-
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
232228
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
233-
github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
234229
github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
235230
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
236231
github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA=
@@ -565,24 +560,17 @@ github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaO
565560
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
566561
github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
567562
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
568-
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
569-
github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
570-
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
571563
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
572564
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
573565
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
574566
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
575567
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
576568
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
577569
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
578-
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
579-
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
580570
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
581571
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
582572
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
583573
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
584-
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
585-
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
586574
github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o=
587575
github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI=
588576
github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
@@ -592,17 +580,12 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
592580
github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg=
593581
github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ=
594582
github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg=
595-
github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0=
596-
github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg=
597583
github.com/mgechev/revive v1.0.2/go.mod h1:rb0dQy1LVAxW9SWy5R3LPUjevzUbUS316U5MFySA2lo=
598-
github.com/mgechev/revive v1.2.1 h1:GjFml7ZsoR0IrQ2E2YIvWFNS5GPDV7xNwvA5GM1HZC4=
599-
github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0=
600584
github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc=
601585
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
602586
github.com/minio/sio v0.3.0/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw=
603587
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
604588
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
605-
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
606589
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
607590
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
608591
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
@@ -640,8 +623,6 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn
640623
github.com/oleiade/reflections v1.0.1/go.mod h1:rdFxbxq4QXVZWj0F+e9jqjDkc7dbp97vkRixKo2JR60=
641624
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
642625
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
643-
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
644-
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
645626
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
646627
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
647628
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -767,7 +748,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qq
767748
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk=
768749
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
769750
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
770-
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
771751
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
772752
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
773753
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
@@ -1191,13 +1171,10 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc
11911171
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11921172
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11931173
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1194-
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11951174
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11961175
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11971176
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11981177
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1199-
golang.org/x/sys v0.0.0-20220519141025-dcacdad47464 h1:MpIuURY70f0iKp/oooEFtB2oENcHITo/z1b6u41pKCw=
1200-
golang.org/x/sys v0.0.0-20220519141025-dcacdad47464/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
12011178
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
12021179
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
12031180
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -1460,7 +1437,6 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
14601437
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
14611438
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
14621439
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
1463-
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
14641440
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
14651441
gopkg.in/yaml.v3 v3.0.0 h1:hjy8E9ON/egN1tAYqKb61G10WtihqetD4sz2H+8nIeA=
14661442
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

pkg/dt/distributed_transaction_manger.go

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"time"
2626

2727
"github.com/go-resty/resty/v2"
28+
"github.com/pingcap/errors"
2829
"k8s.io/client-go/util/workqueue"
2930

3031
"github.com/cectc/dbpack/pkg/config"
@@ -164,9 +165,28 @@ func (manager *DistributedTransactionManager) IsLockable(ctx context.Context, re
164165
}
165166

166167
func (manager *DistributedTransactionManager) branchCommit(bs *api.BranchSession) (api.BranchSession_BranchStatus, error) {
167-
if bs.Type == api.TCC {
168-
return manager.tccBranchCommit(bs)
168+
var (
169+
status api.BranchSession_BranchStatus
170+
err error
171+
)
172+
switch bs.Type {
173+
case api.TCC:
174+
status, err = manager.tccBranchCommit(bs)
175+
case api.AT:
176+
status, err = manager._branchCommit(bs)
177+
default:
178+
return bs.Status, errors.New("should never happen!")
179+
}
180+
if status == api.Complete {
181+
if err := manager.storageDriver.DeleteBranchSession(context.Background(), bs.BranchID); err != nil {
182+
log.Error(err)
183+
}
184+
log.Debugf("branch session committed, branch id: %s, lock key: %s", bs.BranchID, bs.LockKey)
169185
}
186+
return status, err
187+
}
188+
189+
func (manager *DistributedTransactionManager) _branchCommit(bs *api.BranchSession) (api.BranchSession_BranchStatus, error) {
170190
db := resource.GetDBManager().GetDB(bs.ResourceID)
171191
if db == nil {
172192
return 0, fmt.Errorf("DB resource is not exist, db name: %s", bs.ResourceID)
@@ -175,18 +195,23 @@ func (manager *DistributedTransactionManager) branchCommit(bs *api.BranchSession
175195
if err := GetUndoLogManager().DeleteUndoLogByXID(db, bs.XID); err != nil {
176196
return api.PhaseTwoCommitting, err
177197
}
178-
if err := manager.storageDriver.DeleteBranchSession(context.Background(), bs.BranchID); err != nil {
179-
log.Error(err)
180-
}
181-
log.Debugf("branch session committed, branch id: %s, lock key: %s", bs.BranchID, bs.LockKey)
182198
return api.Complete, nil
183199
}
184200

185201
func (manager *DistributedTransactionManager) branchRollback(bs *api.BranchSession) (api.BranchSession_BranchStatus, error) {
186-
if bs.Type == api.TCC {
187-
return manager.tccBranchRollback(bs)
202+
var (
203+
status api.BranchSession_BranchStatus
204+
lockKeys []string
205+
err error
206+
)
207+
switch bs.Type {
208+
case api.TCC:
209+
status, err = manager.tccBranchRollback(bs)
210+
case api.AT:
211+
status, lockKeys, err = manager._branchRollback(bs)
212+
default:
213+
return bs.Status, errors.New("should never happen!")
188214
}
189-
status, lockKeys, err := manager._branchRollback(bs)
190215
if len(lockKeys) > 0 {
191216
if _, err := manager.storageDriver.ReleaseLockKeys(context.Background(), bs.ResourceID, lockKeys); err != nil {
192217
log.Errorf("release lock and remove branch session failed, xid = %s, resource_id = %s, lockKeys = %s",
@@ -197,6 +222,7 @@ func (manager *DistributedTransactionManager) branchRollback(bs *api.BranchSessi
197222
if err := manager.storageDriver.DeleteBranchSession(context.Background(), bs.BranchID); err != nil {
198223
log.Error(err)
199224
}
225+
log.Debugf("branch session rollbacked, branch id: %s, lock key: %s", bs.BranchID, bs.LockKey)
200226
}
201227
return status, err
202228
}
@@ -219,7 +245,6 @@ func (manager *DistributedTransactionManager) _branchRollback(bs *api.BranchSess
219245
return bs.Status, nil, err
220246
}
221247
}
222-
log.Debugf("branch session rollbacked, branch id: %s, lock key: %s", bs.BranchID, bs.LockKey)
223248
return api.Complete, lockKeys, nil
224249
}
225250

pkg/dt/storage/etcd/etcd.go

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -167,22 +167,29 @@ func (s *store) GlobalCommit(ctx context.Context, xid string) (api.GlobalSession
167167
if err != nil {
168168
return gs.Status, err
169169
}
170-
_, err = s.client.Put(ctx, xid, string(data))
170+
171+
var ops []clientv3.Op
172+
ops = append(ops, clientv3.OpPut(xid, string(data)))
173+
174+
branchKeys, err := s.GetBranchSessionKeys(ctx, xid)
171175
if err != nil {
172-
return api.Begin, err
176+
return gs.Status, err
177+
}
178+
err = s.commitBranchSessions(ctx, branchKeys, &ops)
179+
if err != nil {
180+
return gs.Status, err
173181
}
174182

175-
go func() {
176-
branchKeys, err := s.GetBranchSessionKeys(ctx, xid)
177-
if err != nil {
178-
log.Error(err)
179-
}
183+
txn := s.client.Txn(ctx)
184+
txn.Then(ops...)
185+
txnResp, err := txn.Commit()
186+
if err != nil {
187+
return gs.Status, err
188+
}
189+
if !txnResp.Succeeded {
190+
return gs.Status, errors.Errorf("update status to committing failed, xid %s", xid)
191+
}
180192

181-
err = s.commitBranchSessions(ctx, branchKeys)
182-
if err != nil {
183-
log.Error(err)
184-
}
185-
}()
186193
return api.Committing, nil
187194
}
188195

@@ -202,19 +209,27 @@ func (s *store) GlobalRollback(ctx context.Context, xid string) (api.GlobalSessi
202209
if err != nil {
203210
return gs.Status, err
204211
}
205-
_, err = s.client.Put(ctx, xid, string(data))
206-
if err != nil {
207-
return api.Begin, err
208-
}
212+
213+
var ops []clientv3.Op
214+
ops = append(ops, clientv3.OpPut(xid, string(data)))
209215

210216
branchKeys, err := s.GetBranchSessionKeys(ctx, xid)
211217
if err != nil {
212-
log.Error(err)
218+
return gs.Status, err
219+
}
220+
err = s.rollbackBranchSessions(ctx, branchKeys, &ops)
221+
if err != nil {
222+
return gs.Status, err
213223
}
214224

215-
err = s.rollbackBranchSessions(ctx, branchKeys)
225+
txn := s.client.Txn(ctx)
226+
txn.Then(ops...)
227+
txnResp, err := txn.Commit()
216228
if err != nil {
217-
log.Error(err)
229+
return gs.Status, err
230+
}
231+
if !txnResp.Succeeded {
232+
return gs.Status, errors.Errorf("update status to rollbacking failed, xid %s", xid)
218233
}
219234

220235
return api.Rollbacking, nil
@@ -377,7 +392,7 @@ func (s *store) releaseGlobalLocks(ctx context.Context, xid string) (bool, error
377392
return true, nil
378393
}
379394

380-
func (s *store) commitBranchSessions(ctx context.Context, branchSessionKeys []string) error {
395+
func (s *store) commitBranchSessions(ctx context.Context, branchSessionKeys []string, ops *[]clientv3.Op) error {
381396
for _, key := range branchSessionKeys {
382397
bs, err := s.GetBranchSession(ctx, key)
383398
if err != nil {
@@ -389,16 +404,13 @@ func (s *store) commitBranchSessions(ctx context.Context, branchSessionKeys []st
389404
if err != nil {
390405
return err
391406
}
392-
_, err = s.client.Put(ctx, key, string(data))
393-
if err != nil {
394-
return err
395-
}
407+
*ops = append(*ops, clientv3.OpPut(key, string(data)))
396408
}
397409
}
398410
return nil
399411
}
400412

401-
func (s *store) rollbackBranchSessions(ctx context.Context, branchSessionKeys []string) error {
413+
func (s *store) rollbackBranchSessions(ctx context.Context, branchSessionKeys []string, ops *[]clientv3.Op) error {
402414
for _, key := range branchSessionKeys {
403415
bs, err := s.GetBranchSession(ctx, key)
404416
if err != nil {
@@ -410,10 +422,7 @@ func (s *store) rollbackBranchSessions(ctx context.Context, branchSessionKeys []
410422
if err != nil {
411423
return err
412424
}
413-
_, err = s.client.Put(ctx, key, string(data))
414-
if err != nil {
415-
return err
416-
}
425+
*ops = append(*ops, clientv3.OpPut(key, string(data)))
417426
}
418427
}
419428
return nil

0 commit comments

Comments
 (0)