Skip to content

Commit 90f9d42

Browse files
authored
feat: support cross-database delete transactions (#180)
* feat: support cross-database delete transactions
1 parent 760e15f commit 90f9d42

23 files changed

Lines changed: 323 additions & 85 deletions

File tree

docker/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.16.3 as builder
1+
FROM golang:1.18.3 as builder
22
WORKDIR /app
33
ADD . /app
44
RUN make build-local

docker/conf/config_shd.yaml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ executors:
1313
- name: redirect
1414
mode: shd
1515
config:
16+
transaction_timeout: 60000
1617
db_groups:
1718
- name: drug_0
1819
load_balance_algorithm: RandomWeight
@@ -43,6 +44,8 @@ data_source_cluster:
4344
dsn: root:123456@tcp(dbpack-mysql1:3306)/drug?timeout=10s&readTimeout=10s&writeTimeout=10s&parseTime=true&loc=Local&charset=utf8mb4,utf8
4445
ping_interval: 20s
4546
ping_times_for_change_status: 3
47+
filters:
48+
- mysqlDTFilter
4649

4750
- name: drug_1
4851
capacity: 10
@@ -51,5 +54,22 @@ data_source_cluster:
5154
dsn: root:123456@tcp(dbpack-mysql2:3306)/drug?timeout=60s&readTimeout=60s&writeTimeout=60s&parseTime=true&loc=Local&charset=utf8mb4,utf8
5255
ping_interval: 20s
5356
ping_times_for_change_status: 3
57+
filters:
58+
- mysqlDTFilter
5459

55-
http_listen_port: 9999
60+
filters:
61+
- name: mysqlDTFilter
62+
kind: MysqlDistributedTransaction
63+
conf:
64+
appid: svc
65+
lock_retry_interval: 50ms
66+
lock_retry_times: 30
67+
68+
distributed_transaction:
69+
appid: svc
70+
retry_dead_threshold: 130000
71+
rollback_retry_timeout_unlock_enable: true
72+
etcd_config:
73+
endpoints:
74+
- etcd:2379
75+
http_listen_port: 9999

docker/docker-compose-shd.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
version: "2.3"
22
services:
3+
etcd:
4+
image: docker.io/bitnami/etcd:3
5+
container_name: etcd
6+
environment:
7+
- ALLOW_NONE_AUTHENTICATION=yes
8+
- ETCD_NAME=etcd
9+
- ETCD_INITIAL_ADVERTISE_PEER_URLS=http://etcd:2380
10+
- ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
11+
- ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
12+
- ETCD_ADVERTISE_CLIENT_URLS=http://etcd:2379
13+
- ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
14+
- ETCD_INITIAL_CLUSTER=etcd=http://etcd:2380
15+
- ETCD_INITIAL_CLUSTER_STATE=new
16+
networks:
17+
- local
18+
ports:
19+
- "2379:2379"
320
mysql1:
421
image: mysql:8.0
522
container_name: dbpack-mysql1
@@ -37,6 +54,7 @@ services:
3754
- ./conf/config_shd.yaml:/config.yaml
3855
- ./scripts/wait-for-mysql.sh:/wait-for-mysql.sh
3956
depends_on:
57+
- etcd
4058
- mysql1
4159
- mysql2
4260
command: ["./wait-for-mysql.sh","--","/dbpack", "start", "-c", "config.yaml"]

docker/scripts/drug_0.sql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3581,3 +3581,16 @@ COMMIT;
35813581

35823582

35833583
SET FOREIGN_KEY_CHECKS = 1;
3584+
3585+
CREATE TABLE `undo_log` (
3586+
`id` bigint NOT NULL AUTO_INCREMENT,
3587+
`branch_id` bigint NOT NULL,
3588+
`xid` varchar(100) NOT NULL,
3589+
`context` varchar(128) NOT NULL,
3590+
`rollback_info` longblob NOT NULL,
3591+
`log_status` int NOT NULL,
3592+
`log_created` datetime NOT NULL,
3593+
`log_modified` datetime NOT NULL,
3594+
`ext` varchar(100) DEFAULT NULL,
3595+
PRIMARY KEY (`id`)
3596+
);

docker/scripts/drug_1.sql

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3579,3 +3579,16 @@ COMMIT;
35793579

35803580

35813581
SET FOREIGN_KEY_CHECKS = 1;
3582+
3583+
CREATE TABLE `undo_log` (
3584+
`id` bigint NOT NULL AUTO_INCREMENT,
3585+
`branch_id` bigint NOT NULL,
3586+
`xid` varchar(100) NOT NULL,
3587+
`context` varchar(128) NOT NULL,
3588+
`rollback_info` longblob NOT NULL,
3589+
`log_status` int NOT NULL,
3590+
`log_created` datetime NOT NULL,
3591+
`log_modified` datetime NOT NULL,
3592+
`ext` varchar(100) DEFAULT NULL,
3593+
PRIMARY KEY (`id`)
3594+
);

go.mod

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module github.com/cectc/dbpack
22

3-
go 1.16
3+
go 1.18
44

55
require (
66
github.com/agiledragon/gomonkey/v2 v2.7.0
@@ -44,19 +44,68 @@ require (
4444

4545
require (
4646
github.com/BurntSushi/toml v1.1.0 // indirect
47+
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
48+
github.com/andybalholm/brotli v1.0.4 // indirect
4749
github.com/benbjohnson/clock v1.3.0 // indirect
50+
github.com/beorn7/perks v1.0.1 // indirect
51+
github.com/coreos/go-semver v0.3.0 // indirect
52+
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect
53+
github.com/coreos/go-systemd/v22 v22.1.0 // indirect
54+
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect
55+
github.com/cznic/golex v0.0.0-20181122101858-9c343928389c // indirect
56+
github.com/danjacques/gofslock v0.0.0-20191023191349-0a45f885bc37 // indirect
57+
github.com/davecgh/go-spew v1.1.1 // indirect
58+
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect
59+
github.com/go-logr/logr v1.2.3 // indirect
60+
github.com/go-logr/stdr v1.2.2 // indirect
61+
github.com/go-ole/go-ole v1.2.4 // indirect
62+
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
63+
github.com/gobuffalo/envy v1.7.0 // indirect
64+
github.com/gobuffalo/packd v0.3.0 // indirect
65+
github.com/gobuffalo/packr v1.30.1 // indirect
66+
github.com/golang/protobuf v1.5.2 // indirect
4867
github.com/gorilla/mux v1.8.0
4968
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 // indirect
69+
github.com/inconshreveable/mousetrap v1.0.0 // indirect
70+
github.com/joho/godotenv v1.3.0 // indirect
5071
github.com/jonboulle/clockwork v0.2.2 // indirect
72+
github.com/klauspost/compress v1.15.0 // indirect
73+
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
74+
github.com/opentracing/opentracing-go v1.1.0 // indirect
75+
github.com/pingcap/failpoint v0.0.0-20210316064728-7acb0f0a3dfd // indirect
76+
github.com/pingcap/kvproto v0.0.0-20210806074406-317f69fb54b4 // indirect
77+
github.com/pingcap/parser v0.0.0-20210831085004-b5390aa83f65 // indirect
78+
github.com/pingcap/tipb v0.0.0-20210708040514-0f154bb0dc0f // indirect
79+
github.com/pmezard/go-difflib v1.0.0 // indirect
80+
github.com/prometheus/client_model v0.2.0 // indirect
81+
github.com/prometheus/common v0.32.1 // indirect
82+
github.com/prometheus/procfs v0.7.3 // indirect
83+
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
84+
github.com/rogpeppe/go-internal v1.6.1 // indirect
85+
github.com/shirou/gopsutil v3.21.2+incompatible // indirect
5186
github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5 // indirect
87+
github.com/spf13/pflag v1.0.5 // indirect
88+
github.com/tikv/client-go/v2 v2.0.0-alpha.0.20210831090540-391fcd842dc8 // indirect
89+
github.com/tikv/pd v1.1.0-beta.0.20210818112400-0c5667766690 // indirect
5290
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect
91+
github.com/uber/jaeger-client-go v2.22.1+incompatible // indirect
92+
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
93+
github.com/valyala/bytebufferpool v1.0.0 // indirect
94+
go.etcd.io/etcd v0.5.0-alpha.5.0.20200824191128-ae9734ed278b // indirect
95+
go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 // indirect
5396
go.opentelemetry.io/otel v1.7.0
5497
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.7.0
5598
go.opentelemetry.io/otel/sdk v1.7.0
5699
go.opentelemetry.io/otel/trace v1.7.0
100+
go.uber.org/multierr v1.7.0 // indirect
101+
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
57102
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
103+
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
58104
golang.org/x/tools v0.1.10 // indirect
105+
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1 // indirect
59106
google.golang.org/protobuf v1.27.1
60107
gopkg.in/natefinch/lumberjack.v2 v2.0.0
61108
k8s.io/apimachinery v0.23.5
109+
k8s.io/klog/v2 v2.30.0 // indirect
110+
k8s.io/utils v0.0.0-20211116205334-6203023598ed // indirect
62111
)

go.sum

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,6 @@ github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw
201201
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
202202
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
203203
github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk=
204-
github.com/dop251/goja v0.0.0-20220501172647-e1eca0b61fa9 h1:BXEAWJOT2C6ex9iOzVnrYWMFjTRccNs7p8fpLCLLcm0=
205-
github.com/dop251/goja v0.0.0-20220501172647-e1eca0b61fa9/go.mod h1:TQJQ+ZNyFVvUtUEtCZxBhfWiH7RJqR3EivNmvD6Waik=
206204
github.com/dop251/goja v0.0.0-20220516123900-4418d4575a41 h1:yRPjAkkuR/E/tsVG7QmhzEeEtD3P2yllxsT1/ftURb0=
207205
github.com/dop251/goja v0.0.0-20220516123900-4418d4575a41/go.mod h1:TQJQ+ZNyFVvUtUEtCZxBhfWiH7RJqR3EivNmvD6Waik=
208206
github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y=
@@ -897,7 +895,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
897895
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
898896
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
899897
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
900-
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
901898
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
902899
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
903900
go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0=
@@ -979,7 +976,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
979976
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
980977
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
981978
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
982-
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
983979
golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE=
984980
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
985981
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1025,7 +1021,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
10251021
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
10261022
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
10271023
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
1028-
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
10291024
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10301025
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
10311026
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1078,7 +1073,6 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd
10781073
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
10791074
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
10801075
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
1081-
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
10821076
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
10831077
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
10841078
golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -1185,7 +1179,6 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc
11851179
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11861180
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11871181
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1188-
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11891182
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11901183
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
11911184
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -1472,7 +1465,6 @@ k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hr
14721465
k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8=
14731466
k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4=
14741467
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
1475-
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
14761468
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
14771469
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
14781470
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=

pkg/config/db.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,9 @@ type (
7878
}
7979

8080
ShardingConfig struct {
81-
DBGroups []*DataSourceRefGroup `yaml:"db_groups" json:"db_groups"`
82-
LogicTables []*LogicTable `yaml:"logic_tables" json:"logic_tables"`
81+
DBGroups []*DataSourceRefGroup `yaml:"db_groups" json:"db_groups"`
82+
LogicTables []*LogicTable `yaml:"logic_tables" json:"logic_tables"`
83+
TransactionTimeout int32 `yaml:"transaction_timeout" json:"transaction_timeout"`
8384
}
8485
)
8586

pkg/constant/config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,6 @@
1717
package constant
1818

1919
const (
20-
ConfigPathKey = "config"
20+
ConfigPathKey = "config"
21+
TransactionTimeout = "transaction-timeout"
2122
)

pkg/executor/sharding.go

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

2626
"github.com/cectc/dbpack/pkg/cond"
2727
"github.com/cectc/dbpack/pkg/config"
28+
"github.com/cectc/dbpack/pkg/constant"
2829
"github.com/cectc/dbpack/pkg/filter"
2930
"github.com/cectc/dbpack/pkg/lb"
3031
"github.com/cectc/dbpack/pkg/log"
@@ -40,6 +41,7 @@ type ShardingExecutor struct {
4041
PreFilters []proto.DBPreFilter
4142
PostFilters []proto.DBPostFilter
4243

44+
config *config.ShardingConfig
4345
all []*DataSourceBrief
4446
optimizer proto.Optimizer
4547
localTransactionMap map[uint32]proto.Tx
@@ -76,6 +78,7 @@ func NewShardingExecutor(conf *config.Executor) (proto.Executor, error) {
7678
executor := &ShardingExecutor{
7779
PreFilters: make([]proto.DBPreFilter, 0),
7880
PostFilters: make([]proto.DBPostFilter, 0),
81+
config: shardingConfig,
7982
all: all,
8083
optimizer: optimize.NewOptimizer(executors, algorithms, topologies),
8184
localTransactionMap: make(map[uint32]proto.Tx, 0),
@@ -199,7 +202,7 @@ func (executor *ShardingExecutor) ExecutorComQuery(ctx context.Context, sql stri
199202
plan proto.Plan
200203
err error
201204
)
202-
newCtx, span := tracing.GetTraceSpan(ctx, "sharding_execute_com_query")
205+
newCtx, span := tracing.GetTraceSpan(ctx, "sharding_com_query")
203206
defer span.End()
204207

205208
log.Debugf("query: %s", sql)
@@ -228,12 +231,11 @@ func (executor *ShardingExecutor) ExecutorComQuery(ctx context.Context, sql stri
228231
}
229232
}
230233
}
231-
232234
plan, err = executor.optimizer.Optimize(newCtx, queryStmt)
233235
if err != nil {
234236
return nil, 0, err
235237
}
236-
238+
proto.WithVariable(newCtx, constant.TransactionTimeout, executor.config.TransactionTimeout)
237239
return plan.Execute(newCtx)
238240
}
239241

@@ -243,17 +245,19 @@ func (executor *ShardingExecutor) ExecutorComStmtExecute(ctx context.Context, st
243245
plan proto.Plan
244246
err error
245247
)
248+
newCtx, span := tracing.GetTraceSpan(ctx, "sharding_com_stmt_execute")
249+
defer span.End()
246250

247251
for i := 0; i < len(stmt.BindVars); i++ {
248252
parameterID := fmt.Sprintf("v%d", i+1)
249253
args = append(args, stmt.BindVars[parameterID])
250254
}
251-
plan, err = executor.optimizer.Optimize(ctx, stmt.StmtNode, args...)
255+
plan, err = executor.optimizer.Optimize(newCtx, stmt.StmtNode, args...)
252256
if err != nil {
253257
return nil, 0, err
254258
}
255-
256-
return plan.Execute(ctx)
259+
proto.WithVariable(newCtx, constant.TransactionTimeout, executor.config.TransactionTimeout)
260+
return plan.Execute(newCtx)
257261
}
258262

259263
func (executor *ShardingExecutor) ConnectionClose(ctx context.Context) {

0 commit comments

Comments
 (0)