From e4503f160fc8b3346a59ac9fc948e0235001dcbe Mon Sep 17 00:00:00 2001 From: disksing Date: Thu, 18 Jun 2026 22:35:58 +0800 Subject: [PATCH 01/21] Add API V3 keyspace identity support Signed-off-by: disksing --- go.mod | 9 +- go.sum | 42 +++++++ internal/apicodec/codec.go | 9 ++ internal/apicodec/codec_test.go | 15 +++ internal/apicodec/codec_v2.go | 4 +- internal/apicodec/codec_v3.go | 175 +++++++++++++++++++++++++++++ internal/apicodec/codec_v3_test.go | 84 ++++++++++++++ internal/locate/pd_codec.go | 11 ++ tikv/region.go | 8 +- txnkv/client.go | 23 +++- 10 files changed, 374 insertions(+), 6 deletions(-) create mode 100644 internal/apicodec/codec_v3.go create mode 100644 internal/apicodec/codec_v3_test.go diff --git a/go.mod b/go.mod index 0fcaafb723..a16ddbd25a 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 + github.com/pingcap/kvproto v0.0.0-20260608022438-934094768e0f github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 @@ -42,7 +42,10 @@ require ( github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/golang/glog v1.2.5 // indirect github.com/golang/snappy v0.0.4 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/gomega v1.20.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -51,11 +54,15 @@ require ( github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect go.uber.org/multierr v1.11.0 // indirect + golang.org/x/mod v0.32.0 // indirect golang.org/x/net v0.51.0 // indirect golang.org/x/sys v0.41.0 // indirect + golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect golang.org/x/text v0.34.0 // indirect + golang.org/x/tools v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 45c0acfc9b..d083c4db4b 100644 --- a/go.sum +++ b/go.sum @@ -1,18 +1,22 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5 h1:BjkPE3785EwPhhyuFkbINB+2a1xATwk8SNDWnJiD41g= github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5/go.mod h1:jtAfVaU/2cu1+wdSRPWE2c1N2qeAA3K4RH9pYgqwets= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudfoundry/gosigar v1.3.6 h1:gIc08FbB3QPb+nAQhINIK/qhf5REKkY0FTGgRGXkcVc= github.com/cloudfoundry/gosigar v1.3.6/go.mod h1:lNWstu5g5gw59O09Y+wsMNFzBSnU8a0u+Sfx4dq360E= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -24,8 +28,14 @@ github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa5 github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -35,21 +45,29 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= +github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 h1:THDBEeQ9xZ8JEaCLyLQqXMMdRqNr0QAUJTIkQAUtFjg= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -83,6 +101,8 @@ github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 h1:VV03wSSG2XhOwhF79lvT88Z83lwzMT+aZHXrcCIN9B0= github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260608022438-934094768e0f h1:hfFWu4+tdYMlzwF1W04vEH13hJX+OggQIcSlwQYl7Io= +github.com/pingcap/kvproto v0.0.0-20260608022438-934094768e0f/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -92,6 +112,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= @@ -100,6 +121,7 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -163,23 +185,30 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -189,9 +218,12 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= +golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= @@ -201,6 +233,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -218,11 +251,16 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc/examples v0.0.0-20231221225426-4f03f3ff32c9 h1:ATnmU8nL2NfIyTSiBvJVDIDIr3qBmeW+c7z7XU21eWs= @@ -239,11 +277,15 @@ gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYs gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= diff --git a/internal/apicodec/codec.go b/internal/apicodec/codec.go index b30bc550ea..9338cacd62 100644 --- a/internal/apicodec/codec.go +++ b/internal/apicodec/codec.go @@ -107,6 +107,12 @@ func DecodeKey(encoded []byte, version kvrpcpb.APIVersion) ([]byte, []byte, erro return nil, nil, err } return encoded[:keyspacePrefixLen], encoded[keyspacePrefixLen:], nil + case kvrpcpb.APIVersion_V3: + err := checkV3Key(encoded) + if err != nil { + return nil, nil, err + } + return encoded[:apiV3KeyspacePrefixLen], encoded[apiV3KeyspacePrefixLen:], nil } return nil, nil, errors.Errorf("unsupported api version %s", version.String()) } @@ -117,6 +123,7 @@ func setAPICtx(c Codec, r *tikvrpc.Request) { keyspaceMeta := c.GetKeyspaceMeta() if keyspaceMeta != nil { r.KeyspaceName = keyspaceMeta.Name + r.KeyspaceIdentity = keyspaceMeta.GetKeyspaceIdentity() } switch r.Type { @@ -126,6 +133,7 @@ func setAPICtx(c Codec, r *tikvrpc.Request) { meta := *mpp.Meta meta.KeyspaceId = r.KeyspaceId meta.ApiVersion = r.ApiVersion + meta.KeyspaceIdentity = r.KeyspaceIdentity mpp.Meta = &meta r.Req = &mpp @@ -133,6 +141,7 @@ func setAPICtx(c Codec, r *tikvrpc.Request) { compact := *r.Compact() compact.KeyspaceId = r.KeyspaceId compact.ApiVersion = r.ApiVersion + compact.KeyspaceIdentity = r.KeyspaceIdentity r.Req = &compact } } diff --git a/internal/apicodec/codec_test.go b/internal/apicodec/codec_test.go index 3344b203ce..5f07a9e4d2 100644 --- a/internal/apicodec/codec_test.go +++ b/internal/apicodec/codec_test.go @@ -47,6 +47,21 @@ func TestDecodeKey(t *testing.T) { assert.NotNil(t, err) assert.Empty(t, pfx) assert.Empty(t, key) + + pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 8, 9}, kvrpcpb.APIVersion_V3) + assert.Nil(t, err) + assert.Equal(t, []byte{'x', 1, 2, 3, 4, 5, 6, 7}, pfx) + assert.Equal(t, []byte{8, 9}, key) + + pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3, 4, 5, 6, 7}, kvrpcpb.APIVersion_V3) + assert.Nil(t, err) + assert.Equal(t, []byte{'x', 1, 2, 3, 4, 5, 6, 7}, pfx) + assert.Empty(t, key) + + pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3, 4, 5, 6}, kvrpcpb.APIVersion_V3) + assert.NotNil(t, err) + assert.Empty(t, pfx) + assert.Empty(t, key) } func TestEncodeUnknownRequest(t *testing.T) { diff --git a/internal/apicodec/codec_v2.go b/internal/apicodec/codec_v2.go index 070e75fe91..bb66114cf1 100644 --- a/internal/apicodec/codec_v2.go +++ b/internal/apicodec/codec_v2.go @@ -55,6 +55,7 @@ func BuildKeyspaceName(name string) string { // codecV2 is used to encode/decode keys and request into APIv2 format. type codecV2 struct { reqPool sync.Pool + apiVersion kvrpcpb.APIVersion prefix []byte endKey []byte memCodec memCodec @@ -74,6 +75,7 @@ func NewCodecV2(mode Mode, keyspaceMeta *keyspacepb.KeyspaceMeta) (Codec, error) } codec := &codecV2{ // Region keys in CodecV2 are always encoded in memory comparable form. + apiVersion: kvrpcpb.APIVersion_V2, memCodec: &memComparableCodec{}, keyspaceMeta: keyspaceMeta, } @@ -122,7 +124,7 @@ func (c *codecV2) GetKeyspaceMeta() *keyspacepb.KeyspaceMeta { } func (c *codecV2) GetAPIVersion() kvrpcpb.APIVersion { - return kvrpcpb.APIVersion_V2 + return c.apiVersion } // EncodeRequest encodes with the given Codec. diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go new file mode 100644 index 0000000000..41080da321 --- /dev/null +++ b/internal/apicodec/codec_v3.go @@ -0,0 +1,175 @@ +package apicodec + +import ( + "encoding/binary" + + "github.com/pingcap/kvproto/pkg/apipb" + "github.com/pingcap/kvproto/pkg/errorpb" + "github.com/pingcap/kvproto/pkg/keyspacepb" + "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pkg/errors" + "github.com/tikv/client-go/v2/tikvrpc" +) + +const apiV3KeyspacePrefixLen = 8 + +func checkV3Key(b []byte) error { + if len(b) < apiV3KeyspacePrefixLen || (b[0] != RawModePrefix && b[0] != TxnModePrefix) { + return errors.Errorf("invalid API V3 key %s", b) + } + return nil +} + +// codecV3 uses API V3 request context for TiKV RPCs and API V3 physical +// prefixes for PD region lookups. +type codecV3 struct { + *codecV2 +} + +// NewCodecV3 returns a codec for API V3 tenant-scoped keyspaces. +func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string) (Codec, error) { + if identity == nil { + return nil, errors.New("missing API V3 keyspace identity") + } + namespaceID := identity.GetNamespaceId() + keyspaceID := identity.GetKeyspaceId() + if namespaceID == 0 { + return nil, errors.New("API V3 namespaceID must be non-zero") + } + if keyspaceID == 0 || keyspaceID > maxKeyspaceID { + return nil, errors.Errorf("API V3 keyspaceID %d is out of range, valid range is [1, %d]", keyspaceID, maxKeyspaceID) + } + + prefix := make([]byte, apiV3KeyspacePrefixLen) + switch mode { + case ModeRaw: + prefix[0] = RawModePrefix + case ModeTxn: + prefix[0] = TxnModePrefix + default: + return nil, errors.Errorf("unknown mode") + } + binary.BigEndian.PutUint32(prefix[1:5], namespaceID) + keyspaceIDBytes, err := getIDByte(keyspaceID) + if err != nil { + return nil, err + } + copy(prefix[5:], keyspaceIDBytes) + + endKey := make([]byte, apiV3KeyspacePrefixLen) + prefixVal := binary.BigEndian.Uint64(prefix) + binary.BigEndian.PutUint64(endKey, prefixVal+1) + + keyspaceMeta := &keyspacepb.KeyspaceMeta{ + Name: BuildKeyspaceName(keyspaceName), + Id: keyspaceID, + KeyspaceIdentity: identity, + } + base := &codecV2{ + apiVersion: kvrpcpb.APIVersion_V3, + prefix: prefix, + endKey: endKey, + memCodec: &memComparableCodec{}, + keyspaceMeta: keyspaceMeta, + } + base.reqPool.New = func() any { return &tikvrpc.Request{} } + return &codecV3{codecV2: base}, nil +} + +// EncodeRequest keeps V3 RPC key fields as user keys. TiKV uses the V3 +// keyspace identity in request context to apply the physical keyspace prefix. +func (c *codecV3) EncodeRequest(req *tikvrpc.Request) (*tikvrpc.Request, error) { + r := c.reqPool.Get().(*tikvrpc.Request) + *r = *req + setAPICtx(c, r) + return r, nil +} + +func (c *codecV3) DecodeResponse(req *tikvrpc.Request, resp *tikvrpc.Response) (*tikvrpc.Response, error) { + defer c.reqPool.Put(req) + regionError, err := resp.GetRegionError() + if err != nil { + return resp, nil + } + decodedRegionError, err := c.decodeRegionError(regionError) + if err != nil { + return nil, err + } + setRegionError(resp, decodedRegionError) + return resp, nil +} + +func setRegionError(resp *tikvrpc.Response, regionError *errorpb.Error) { + switch r := resp.Resp.(type) { + case *kvrpcpb.GetResponse: + r.RegionError = regionError + case *kvrpcpb.ScanResponse: + r.RegionError = regionError + case *kvrpcpb.PrewriteResponse: + r.RegionError = regionError + case *kvrpcpb.CommitResponse: + r.RegionError = regionError + case *kvrpcpb.CleanupResponse: + r.RegionError = regionError + case *kvrpcpb.BatchGetResponse: + r.RegionError = regionError + case *kvrpcpb.BatchRollbackResponse: + r.RegionError = regionError + case *kvrpcpb.ScanLockResponse: + r.RegionError = regionError + case *kvrpcpb.ResolveLockResponse: + r.RegionError = regionError + case *kvrpcpb.GCResponse: + r.RegionError = regionError + case *kvrpcpb.DeleteRangeResponse: + r.RegionError = regionError + case *kvrpcpb.PessimisticLockResponse: + r.RegionError = regionError + case *kvrpcpb.PessimisticRollbackResponse: + r.RegionError = regionError + case *kvrpcpb.TxnHeartBeatResponse: + r.RegionError = regionError + case *kvrpcpb.CheckTxnStatusResponse: + r.RegionError = regionError + case *kvrpcpb.CheckSecondaryLocksResponse: + r.RegionError = regionError + case *kvrpcpb.FlushResponse: + r.RegionError = regionError + case *kvrpcpb.BufferBatchGetResponse: + r.RegionError = regionError + case *kvrpcpb.FlashbackToVersionResponse: + r.RegionError = regionError + case *kvrpcpb.PrepareFlashbackToVersionResponse: + r.RegionError = regionError + case *kvrpcpb.RawGetResponse: + r.RegionError = regionError + case *kvrpcpb.RawBatchGetResponse: + r.RegionError = regionError + case *kvrpcpb.RawPutResponse: + r.RegionError = regionError + case *kvrpcpb.RawBatchPutResponse: + r.RegionError = regionError + case *kvrpcpb.RawDeleteResponse: + r.RegionError = regionError + case *kvrpcpb.RawBatchDeleteResponse: + r.RegionError = regionError + case *kvrpcpb.RawDeleteRangeResponse: + r.RegionError = regionError + case *kvrpcpb.RawScanResponse: + r.RegionError = regionError + case *kvrpcpb.RawGetKeyTTLResponse: + r.RegionError = regionError + case *kvrpcpb.RawCASResponse: + r.RegionError = regionError + case *kvrpcpb.RawChecksumResponse: + r.RegionError = regionError + case *kvrpcpb.UnsafeDestroyRangeResponse: + r.RegionError = regionError + case *kvrpcpb.MvccGetByKeyResponse: + r.RegionError = regionError + case *kvrpcpb.MvccGetByStartTsResponse: + r.RegionError = regionError + case *kvrpcpb.SplitRegionResponse: + r.RegionError = regionError + } +} diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go new file mode 100644 index 0000000000..5d0f21b5d9 --- /dev/null +++ b/internal/apicodec/codec_v3_test.go @@ -0,0 +1,84 @@ +package apicodec + +import ( + "testing" + + "github.com/pingcap/kvproto/pkg/apipb" + "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/stretchr/testify/require" + "github.com/tikv/client-go/v2/tikvrpc" +) + +func TestNewCodecV3(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeRaw, identity, "ks") + re.NoError(err) + + v3Codec := codec.(*codecV3) + re.Equal(kvrpcpb.APIVersion_V3, v3Codec.GetAPIVersion()) + re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 7}, v3Codec.prefix) + re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 8}, v3Codec.endKey) + re.Equal(identity, v3Codec.GetKeyspaceMeta().GetKeyspaceIdentity()) + re.Equal(KeyspaceID(identity.KeyspaceId), v3Codec.GetKeyspaceID()) +} + +func TestNewCodecV3InvalidIdentity(t *testing.T) { + re := require.New(t) + + _, err := NewCodecV3(ModeTxn, nil, "") + re.Error(err) + + _, err = NewCodecV3(ModeTxn, &apipb.KeyspaceIdentity{NamespaceId: 0, KeyspaceId: 1}, "") + re.Error(err) + + _, err = NewCodecV3(ModeTxn, &apipb.KeyspaceIdentity{NamespaceId: 1, KeyspaceId: 0}, "") + re.Error(err) + + _, err = NewCodecV3(ModeTxn, &apipb.KeyspaceIdentity{NamespaceId: 1, KeyspaceId: maxKeyspaceID + 1}, "") + re.Error(err) +} + +func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + + req := &tikvrpc.Request{ + Type: tikvrpc.CmdGet, + Req: &kvrpcpb.GetRequest{ + Key: []byte("key"), + }, + } + encoded, err := codec.EncodeRequest(req) + re.NoError(err) + defer codec.(*codecV3).reqPool.Put(encoded) + + re.Equal([]byte("key"), encoded.Get().Key) + re.Equal(kvrpcpb.APIVersion_V3, encoded.ApiVersion) + re.Equal(uint32(9), encoded.KeyspaceId) + re.Equal("ks", encoded.KeyspaceName) + re.Equal(identity, encoded.KeyspaceIdentity) +} + +func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + + physicalKey := codec.EncodeKey([]byte("key")) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'k', 'e', 'y'}, physicalKey) + + regionKey := codec.EncodeRegionKey([]byte("key")) + decodedKey, err := codec.DecodeRegionKey(regionKey) + re.NoError(err) + re.Equal([]byte("key"), decodedKey) +} diff --git a/internal/locate/pd_codec.go b/internal/locate/pd_codec.go index 4e40a1f8ee..dd9eef424e 100644 --- a/internal/locate/pd_codec.go +++ b/internal/locate/pd_codec.go @@ -37,6 +37,7 @@ package locate import ( "context" + "github.com/pingcap/kvproto/pkg/apipb" "github.com/pingcap/kvproto/pkg/keyspacepb" "github.com/pingcap/kvproto/pkg/pdpb" "github.com/pkg/errors" @@ -77,6 +78,16 @@ func NewCodecPDClientWithKeyspace(mode apicodec.Mode, client pd.Client, keyspace return &CodecPDClient{client.WithCallerComponent(componentName), codec}, nil } +// NewCodecPDClientWithKeyspaceIdentity creates a CodecPDClient in API v3 with keyspace identity. +func NewCodecPDClientWithKeyspaceIdentity(mode apicodec.Mode, client pd.Client, identity *apipb.KeyspaceIdentity, keyspace string) (*CodecPDClient, error) { + codec, err := apicodec.NewCodecV3(mode, identity, keyspace) + if err != nil { + return nil, err + } + + return &CodecPDClient{client.WithCallerComponent(componentName), codec}, nil +} + // GetKeyspaceID attempts to retrieve keyspace ID corresponding to the given keyspace name from PD. func GetKeyspaceID(client pd.Client, name string) (uint32, error) { meta, err := client.LoadKeyspace(context.Background(), apicodec.BuildKeyspaceName(name)) diff --git a/tikv/region.go b/tikv/region.go index 309cd98f4d..21be840606 100644 --- a/tikv/region.go +++ b/tikv/region.go @@ -118,16 +118,22 @@ var NewCodecPDClient = locate.NewCodecPDClient // NewCodecPDClientWithKeyspace creates a CodecPDClient in API v2 with keyspace name. var NewCodecPDClientWithKeyspace = locate.NewCodecPDClientWithKeyspace +// NewCodecPDClientWithKeyspaceIdentity creates a CodecPDClient in API v3 with keyspace identity. +var NewCodecPDClientWithKeyspaceIdentity = locate.NewCodecPDClientWithKeyspaceIdentity + // NewCodecV1 is a constructor for v1 Codec. var NewCodecV1 = apicodec.NewCodecV1 // NewCodecV2 is a constructor for v2 Codec. var NewCodecV2 = apicodec.NewCodecV2 +// NewCodecV3 is a constructor for v3 Codec. +var NewCodecV3 = apicodec.NewCodecV3 + // Codec is responsible for encode/decode requests. type Codec = apicodec.Codec -// DecodeKey is used to split a given key to it's APIv2 prefix and actual key. +// DecodeKey is used to split a given key to its API keyspace prefix and actual key. var DecodeKey = apicodec.DecodeKey // DefaultKeyspaceID is the keyspaceID of the default keyspace. diff --git a/txnkv/client.go b/txnkv/client.go index bfcaad47a7..6273ff8cc4 100644 --- a/txnkv/client.go +++ b/txnkv/client.go @@ -18,6 +18,7 @@ import ( "context" "fmt" + "github.com/pingcap/kvproto/pkg/apipb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pkg/errors" "github.com/tikv/client-go/v2/config" @@ -34,9 +35,10 @@ type Client struct { } type option struct { - apiVersion kvrpcpb.APIVersion - keyspaceName string - spKVPrefix string + apiVersion kvrpcpb.APIVersion + keyspaceName string + keyspaceIdentity *apipb.KeyspaceIdentity + spKVPrefix string } // ClientOpt is factory to set the client options. @@ -49,6 +51,16 @@ func WithKeyspace(keyspaceName string) ClientOpt { } } +// WithKeyspaceIdentity is used to set client's API V3 keyspace identity. +func WithKeyspaceIdentity(namespaceID, keyspaceID uint32) ClientOpt { + return func(opt *option) { + opt.keyspaceIdentity = &apipb.KeyspaceIdentity{ + NamespaceId: namespaceID, + KeyspaceId: keyspaceID, + } + } +} + // WithAPIVersion is used to set client's apiVersion. func WithAPIVersion(apiVersion kvrpcpb.APIVersion) ClientOpt { return func(opt *option) { @@ -88,6 +100,11 @@ func NewClient(pdAddrs []string, opts ...ClientOpt) (*Client, error) { if err != nil { return nil, err } + case kvrpcpb.APIVersion_V3: + codecCli, err = tikv.NewCodecPDClientWithKeyspaceIdentity(tikv.ModeTxn, pdClient, opt.keyspaceIdentity, opt.keyspaceName) + if err != nil { + return nil, err + } default: return nil, errors.Errorf("unknown api version: %d", opt.apiVersion) } From 2645eb0b3cb66eb9a18b4778543da19b963c20d4 Mon Sep 17 00:00:00 2001 From: disksing Date: Fri, 19 Jun 2026 00:04:50 +0800 Subject: [PATCH 02/21] Wire API V3 identity into PD client Signed-off-by: disksing --- go.mod | 10 +++---- go.sum | 16 +++++++++++ internal/mockstore/mocktikv/pd.go | 3 +- tikv/kv.go | 48 +++++++++++++++++++++++++------ txnkv/client.go | 9 +++++- txnkv/transaction/test_util.go | 3 +- 6 files changed, 72 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index a16ddbd25a..dc1e8800e4 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 + github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 @@ -30,8 +30,8 @@ require ( go.uber.org/goleak v1.2.0 go.uber.org/zap v1.26.0 golang.org/x/sync v0.19.0 - google.golang.org/grpc v1.75.1 - google.golang.org/protobuf v1.36.6 + google.golang.org/grpc v1.79.3 + google.golang.org/protobuf v1.36.10 modernc.org/mathutil v1.7.1 ) @@ -60,8 +60,8 @@ require ( golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect golang.org/x/text v0.34.0 // indirect golang.org/x/tools v0.41.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index d083c4db4b..348194db09 100644 --- a/go.sum +++ b/go.sum @@ -139,6 +139,8 @@ github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 h1:8gvjP484Hv4CNf4jKzdmQOm48hGP5wnEd86nrbVvn5o= github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84/go.mod h1:GP9u8OBXqYQ6e43htjprZILrzn3tuogzkEEmmiNlzc4= +github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825 h1:OK1zOlkFPkYlmBvkMNfpaBi91uzlQdEAjz2qTN+fp+o= +github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825/go.mod h1:VVaCPMGiqKOY2fRnM3U0/Szr2iIMm+dK4W87aKOtXEc= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -151,16 +153,22 @@ go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -254,8 +262,12 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= +google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= @@ -263,10 +275,14 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8 google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/grpc/examples v0.0.0-20231221225426-4f03f3ff32c9 h1:ATnmU8nL2NfIyTSiBvJVDIDIr3qBmeW+c7z7XU21eWs= google.golang.org/grpc/examples v0.0.0-20231221225426-4f03f3ff32c9/go.mod h1:j5uROIAAgi3YmtiETMt1LW0d/lHqQ7wwrIY4uGRXLQ4= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= +google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/internal/mockstore/mocktikv/pd.go b/internal/mockstore/mocktikv/pd.go index e0192a3c13..a7a21a68fe 100644 --- a/internal/mockstore/mocktikv/pd.go +++ b/internal/mockstore/mocktikv/pd.go @@ -53,6 +53,7 @@ import ( "github.com/tikv/client-go/v2/util" pd "github.com/tikv/pd/client" pdgc "github.com/tikv/pd/client/clients/gc" + "github.com/tikv/pd/client/clients/metastorage" "github.com/tikv/pd/client/clients/router" "github.com/tikv/pd/client/clients/tso" "github.com/tikv/pd/client/constants" @@ -486,7 +487,7 @@ func (c *pdClient) GetLocalTSWithinKeyspaceAsync(ctx context.Context, dcLocation return nil } -func (c *pdClient) Watch(ctx context.Context, key []byte, opts ...opt.MetaStorageOption) (chan []*meta_storagepb.Event, error) { +func (c *pdClient) Watch(ctx context.Context, key []byte, opts ...opt.MetaStorageOption) (chan *metastorage.WatchResponse, error) { return nil, nil } diff --git a/tikv/kv.go b/tikv/kv.go index 984093443a..7bc90001b4 100644 --- a/tikv/kv.go +++ b/tikv/kv.go @@ -47,6 +47,7 @@ import ( "time" "github.com/opentracing/opentracing-go" + "github.com/pingcap/kvproto/pkg/apipb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pkg/errors" "github.com/tikv/client-go/v2/config" @@ -387,15 +388,22 @@ func NewKVStore( // NewPDClient returns an unwrapped pd client. func NewPDClient(pdAddrs []string) (pd.Client, error) { + return newPDClient(pdAddrs, nil) +} + +// NewPDClientWithKeyspaceIdentity returns an unwrapped API V3 pd client. +func NewPDClientWithKeyspaceIdentity(pdAddrs []string, identity *apipb.KeyspaceIdentity) (pd.Client, error) { + return newPDClient(pdAddrs, identity) +} + +func newPDClient(pdAddrs []string, identity *apipb.KeyspaceIdentity) (pd.Client, error) { cfg := config.GetGlobalConfig() - // init pd-client - pdCli, err := pd.NewClient( - caller.Component("client-go"), - pdAddrs, pd.SecurityOption{ - CAPath: cfg.Security.ClusterSSLCA, - CertPath: cfg.Security.ClusterSSLCert, - KeyPath: cfg.Security.ClusterSSLKey, - }, + security := pd.SecurityOption{ + CAPath: cfg.Security.ClusterSSLCA, + CertPath: cfg.Security.ClusterSSLCert, + KeyPath: cfg.Security.ClusterSSLKey, + } + opts := []opt.ClientOption{ opt.WithGRPCDialOptions( grpc.WithKeepaliveParams( keepalive.ClientParameters{ @@ -404,9 +412,31 @@ func NewPDClient(pdAddrs []string) (pd.Client, error) { }, ), ), - opt.WithCustomTimeoutOption(time.Duration(cfg.PDClient.PDServerTimeout)*time.Second), + opt.WithCustomTimeoutOption(time.Duration(cfg.PDClient.PDServerTimeout) * time.Second), opt.WithForwardingOption(config.GetGlobalConfig().EnableForwarding), + } + + var ( + pdCli pd.Client + err error ) + if identity != nil { + pdCli, err = pd.NewClientWithKeyspaceIdentity( + context.Background(), + caller.Component("client-go"), + identity, + pdAddrs, + security, + opts..., + ) + } else { + pdCli, err = pd.NewClient( + caller.Component("client-go"), + pdAddrs, + security, + opts..., + ) + } if err != nil { return nil, errors.WithStack(err) } diff --git a/txnkv/client.go b/txnkv/client.go index 6273ff8cc4..22dcd73bbc 100644 --- a/txnkv/client.go +++ b/txnkv/client.go @@ -27,6 +27,7 @@ import ( "github.com/tikv/client-go/v2/tikv" "github.com/tikv/client-go/v2/txnkv/transaction" "github.com/tikv/client-go/v2/util" + pd "github.com/tikv/pd/client" ) // Client is a txn client. @@ -83,7 +84,13 @@ func NewClient(pdAddrs []string, opts ...ClientOpt) (*Client, error) { o(opt) } // Use an unwrapped PDClient to obtain keyspace meta. - pdClient, err := tikv.NewPDClient(pdAddrs) + newPDClient := tikv.NewPDClient + if opt.apiVersion == kvrpcpb.APIVersion_V3 { + newPDClient = func(pdAddrs []string) (pd.Client, error) { + return tikv.NewPDClientWithKeyspaceIdentity(pdAddrs, opt.keyspaceIdentity) + } + } + pdClient, err := newPDClient(pdAddrs) if err != nil { return nil, errors.WithStack(err) } diff --git a/txnkv/transaction/test_util.go b/txnkv/transaction/test_util.go index 27dd19827f..cb0a6c5f0b 100644 --- a/txnkv/transaction/test_util.go +++ b/txnkv/transaction/test_util.go @@ -34,6 +34,7 @@ import ( "github.com/tikv/client-go/v2/util/async" pd "github.com/tikv/pd/client" "github.com/tikv/pd/client/clients/gc" + "github.com/tikv/pd/client/clients/metastorage" "github.com/tikv/pd/client/clients/router" "github.com/tikv/pd/client/clients/tso" "github.com/tikv/pd/client/opt" @@ -335,7 +336,7 @@ func (u *unimplementedPDClient) UpdateServiceSafePointV2(ctx context.Context, ke } // Watch implements pd.Client. -func (u *unimplementedPDClient) Watch(ctx context.Context, key []byte, opts ...opt.MetaStorageOption) (chan []*meta_storagepb.Event, error) { +func (u *unimplementedPDClient) Watch(ctx context.Context, key []byte, opts ...opt.MetaStorageOption) (chan *metastorage.WatchResponse, error) { panic("unimplemented") } From a6ab003d2ea8fba8b2be93d898ac873ba6076835 Mon Sep 17 00:00:00 2001 From: disksing Date: Fri, 19 Jun 2026 00:39:26 +0800 Subject: [PATCH 03/21] Update PD client API V3 dependency Signed-off-by: disksing --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index dc1e8800e4..2e072f9aa4 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825 + github.com/tikv/pd/client v0.0.0-20260618163702-663ce147ff41 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index 348194db09..a4c1ef2b49 100644 --- a/go.sum +++ b/go.sum @@ -141,6 +141,8 @@ github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 h1:8gvjP484Hv4CNf4j github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84/go.mod h1:GP9u8OBXqYQ6e43htjprZILrzn3tuogzkEEmmiNlzc4= github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825 h1:OK1zOlkFPkYlmBvkMNfpaBi91uzlQdEAjz2qTN+fp+o= github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825/go.mod h1:VVaCPMGiqKOY2fRnM3U0/Szr2iIMm+dK4W87aKOtXEc= +github.com/tikv/pd/client v0.0.0-20260618163702-663ce147ff41 h1:Mjj7FV7Yw4OgZPRQw7wKFU8pUB/WOUAXjvcbJ5H6sQU= +github.com/tikv/pd/client v0.0.0-20260618163702-663ce147ff41/go.mod h1:VVaCPMGiqKOY2fRnM3U0/Szr2iIMm+dK4W87aKOtXEc= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= From b0bcaa77acb507ee94063a5dd07d0f959473b40d Mon Sep 17 00:00:00 2001 From: disksing Date: Fri, 19 Jun 2026 03:50:30 +0800 Subject: [PATCH 04/21] Support API V3 keyspace oneof context Signed-off-by: disksing --- go.mod | 11 +--- go.sum | 80 +++--------------------- internal/apicodec/codec.go | 32 ++++++++-- internal/apicodec/codec_v2.go | 11 +++- internal/apicodec/codec_v2_test.go | 8 +-- internal/apicodec/codec_v3.go | 5 +- internal/apicodec/codec_v3_test.go | 3 +- internal/locate/pd_codec.go | 2 +- tikv/compatible_txn_safe_point_loader.go | 2 +- tikv/test_util.go | 2 +- tikvrpc/tikvrpc_test.go | 4 +- 11 files changed, 59 insertions(+), 101 deletions(-) diff --git a/go.mod b/go.mod index 2e072f9aa4..4396458fa6 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260608022438-934094768e0f + github.com/pingcap/kvproto v0.0.0-20260611143855-3566665c9104 github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260618163702-663ce147ff41 + github.com/tikv/pd/client v0.0.0-20260618194602-729ea141b819 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 @@ -42,10 +42,7 @@ require ( github.com/coreos/go-semver v0.3.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/ghodss/yaml v1.0.0 // indirect - github.com/golang/glog v1.2.5 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/gomega v1.20.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -54,15 +51,11 @@ require ( github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/mod v0.32.0 // indirect golang.org/x/net v0.51.0 // indirect golang.org/x/sys v0.41.0 // indirect - golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect golang.org/x/text v0.34.0 // indirect - golang.org/x/tools v0.41.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index a4c1ef2b49..31cb2162ca 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,18 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5 h1:BjkPE3785EwPhhyuFkbINB+2a1xATwk8SNDWnJiD41g= github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5/go.mod h1:jtAfVaU/2cu1+wdSRPWE2c1N2qeAA3K4RH9pYgqwets= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudfoundry/gosigar v1.3.6 h1:gIc08FbB3QPb+nAQhINIK/qhf5REKkY0FTGgRGXkcVc= github.com/cloudfoundry/gosigar v1.3.6/go.mod h1:lNWstu5g5gw59O09Y+wsMNFzBSnU8a0u+Sfx4dq360E= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -28,14 +24,8 @@ github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa5 github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -45,29 +35,21 @@ github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zV github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.5 h1:DrW6hGnjIhtvhOIiAKT6Psh/Kd/ldepEa81DKeiRJ5I= -github.com/golang/glog v1.2.5/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 h1:THDBEeQ9xZ8JEaCLyLQqXMMdRqNr0QAUJTIkQAUtFjg= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= @@ -99,10 +81,8 @@ github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 h1:tdMsjOqUR7YXH github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86/go.mod h1:exzhVYca3WRtd6gclGNErRWb1qEgff3LYta0LvRmON4= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= -github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 h1:VV03wSSG2XhOwhF79lvT88Z83lwzMT+aZHXrcCIN9B0= -github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= -github.com/pingcap/kvproto v0.0.0-20260608022438-934094768e0f h1:hfFWu4+tdYMlzwF1W04vEH13hJX+OggQIcSlwQYl7Io= -github.com/pingcap/kvproto v0.0.0-20260608022438-934094768e0f/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260611143855-3566665c9104 h1:sNjYPcGD6V+CZl3Txt1b+VQkX6KkJXk8AxBUDizPZVo= +github.com/pingcap/kvproto v0.0.0-20260611143855-3566665c9104/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -112,7 +92,6 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= @@ -121,7 +100,6 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -137,12 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 h1:8gvjP484Hv4CNf4jKzdmQOm48hGP5wnEd86nrbVvn5o= -github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84/go.mod h1:GP9u8OBXqYQ6e43htjprZILrzn3tuogzkEEmmiNlzc4= -github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825 h1:OK1zOlkFPkYlmBvkMNfpaBi91uzlQdEAjz2qTN+fp+o= -github.com/tikv/pd/client v0.0.0-20260618155903-b274f5db4825/go.mod h1:VVaCPMGiqKOY2fRnM3U0/Szr2iIMm+dK4W87aKOtXEc= -github.com/tikv/pd/client v0.0.0-20260618163702-663ce147ff41 h1:Mjj7FV7Yw4OgZPRQw7wKFU8pUB/WOUAXjvcbJ5H6sQU= -github.com/tikv/pd/client v0.0.0-20260618163702-663ce147ff41/go.mod h1:VVaCPMGiqKOY2fRnM3U0/Szr2iIMm+dK4W87aKOtXEc= +github.com/tikv/pd/client v0.0.0-20260618194602-729ea141b819 h1:azvEqdNinRydqb4jBVKCPOPU7WGng79zzXwSmNHj+aw= +github.com/tikv/pd/client v0.0.0-20260618194602-729ea141b819/go.mod h1:YuIGumSxztlsRfeZfi8WDk0RjvRvEW8CoQ0FtF61ENY= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -153,24 +127,18 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JB go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao= go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI= -go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc= -go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -195,30 +163,23 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo= golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -228,12 +189,9 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo= -golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= @@ -243,7 +201,6 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -261,28 +218,15 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 h1:FiusG7LWj+4byqhbvmB+Q93B/mOxJLN2DTozDuZm4EU= -google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:kXqgZtrWaf6qS3jZOCnCH7WYfrvFjkC51bM8fz3RsCA= google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= -google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/grpc/examples v0.0.0-20231221225426-4f03f3ff32c9 h1:ATnmU8nL2NfIyTSiBvJVDIDIr3qBmeW+c7z7XU21eWs= google.golang.org/grpc/examples v0.0.0-20231221225426-4f03f3ff32c9/go.mod h1:j5uROIAAgi3YmtiETMt1LW0d/lHqQ7wwrIY4uGRXLQ4= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -295,15 +239,11 @@ gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYs gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= diff --git a/internal/apicodec/codec.go b/internal/apicodec/codec.go index 9338cacd62..fa4e0d2de4 100644 --- a/internal/apicodec/codec.go +++ b/internal/apicodec/codec.go @@ -6,6 +6,7 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/keyspacepb" "github.com/pingcap/kvproto/pkg/kvrpcpb" + "github.com/pingcap/kvproto/pkg/mpp" "github.com/tikv/client-go/v2/tikvrpc" "github.com/tikv/pd/client/constants" ) @@ -119,11 +120,16 @@ func DecodeKey(encoded []byte, version kvrpcpb.APIVersion) ([]byte, []byte, erro func setAPICtx(c Codec, r *tikvrpc.Request) { r.ApiVersion = c.GetAPIVersion() - r.KeyspaceId = uint32(c.GetKeyspaceID()) keyspaceMeta := c.GetKeyspaceMeta() if keyspaceMeta != nil { r.KeyspaceName = keyspaceMeta.Name - r.KeyspaceIdentity = keyspaceMeta.GetKeyspaceIdentity() + if identity := keyspaceMeta.GetKeyspaceIdentity(); identity != nil { + r.Keyspace = &kvrpcpb.Context_KeyspaceIdentity{KeyspaceIdentity: identity} + } else { + r.Keyspace = &kvrpcpb.Context_KeyspaceId{KeyspaceId: uint32(c.GetKeyspaceID())} + } + } else { + r.Keyspace = &kvrpcpb.Context_KeyspaceId{KeyspaceId: uint32(c.GetKeyspaceID())} } switch r.Type { @@ -131,17 +137,31 @@ func setAPICtx(c Codec, r *tikvrpc.Request) { mpp := *r.DispatchMPPTask() // Shallow copy the meta to avoid concurrent modification. meta := *mpp.Meta - meta.KeyspaceId = r.KeyspaceId meta.ApiVersion = r.ApiVersion - meta.KeyspaceIdentity = r.KeyspaceIdentity + setMPPKeyspace(&meta, r) mpp.Meta = &meta r.Req = &mpp case tikvrpc.CmdCompact: compact := *r.Compact() - compact.KeyspaceId = r.KeyspaceId compact.ApiVersion = r.ApiVersion - compact.KeyspaceIdentity = r.KeyspaceIdentity + setCompactKeyspace(&compact, r) r.Req = &compact } } + +func setMPPKeyspace(meta *mpp.TaskMeta, r *tikvrpc.Request) { + if identity := r.GetKeyspaceIdentity(); identity != nil { + meta.Keyspace = &mpp.TaskMeta_KeyspaceIdentity{KeyspaceIdentity: identity} + return + } + meta.Keyspace = &mpp.TaskMeta_KeyspaceId{KeyspaceId: r.GetKeyspaceId()} +} + +func setCompactKeyspace(compact *kvrpcpb.CompactRequest, r *tikvrpc.Request) { + if identity := r.GetKeyspaceIdentity(); identity != nil { + compact.Keyspace = &kvrpcpb.CompactRequest_KeyspaceIdentity{KeyspaceIdentity: identity} + return + } + compact.Keyspace = &kvrpcpb.CompactRequest_KeyspaceId{KeyspaceId: r.GetKeyspaceId()} +} diff --git a/internal/apicodec/codec_v2.go b/internal/apicodec/codec_v2.go index bb66114cf1..c4200bc77a 100644 --- a/internal/apicodec/codec_v2.go +++ b/internal/apicodec/codec_v2.go @@ -65,7 +65,7 @@ type codecV2 struct { // NewCodecV2 returns a codec that can be used to encode/decode // keys and requests to and from APIv2 format. func NewCodecV2(mode Mode, keyspaceMeta *keyspacepb.KeyspaceMeta) (Codec, error) { - keyspaceID := keyspaceMeta.Id + keyspaceID := keyspaceIDFromMeta(keyspaceMeta) if keyspaceID > maxKeyspaceID { return nil, errors.Errorf("keyspaceID %d is out of range, maximum is %d", keyspaceID, maxKeyspaceID) } @@ -116,7 +116,7 @@ func (c *codecV2) GetKeyspace() []byte { } func (c *codecV2) GetKeyspaceID() KeyspaceID { - return KeyspaceID(c.keyspaceMeta.Id) + return KeyspaceID(keyspaceIDFromMeta(c.keyspaceMeta)) } func (c *codecV2) GetKeyspaceMeta() *keyspacepb.KeyspaceMeta { @@ -127,6 +127,13 @@ func (c *codecV2) GetAPIVersion() kvrpcpb.APIVersion { return c.apiVersion } +func keyspaceIDFromMeta(meta *keyspacepb.KeyspaceMeta) uint32 { + if identity := meta.GetKeyspaceIdentity(); identity != nil { + return identity.GetKeyspaceId() + } + return meta.GetId() +} + // EncodeRequest encodes with the given Codec. // NOTE: req is reused on retry. MUST encode on cloned request, other than overwrite the original. func (c *codecV2) EncodeRequest(req *tikvrpc.Request) (*tikvrpc.Request, error) { diff --git a/internal/apicodec/codec_v2_test.go b/internal/apicodec/codec_v2_test.go index f92ba59ee0..c40a0fda10 100644 --- a/internal/apicodec/codec_v2_test.go +++ b/internal/apicodec/codec_v2_test.go @@ -42,7 +42,7 @@ func TestCodecV2(t *testing.T) { func (suite *testCodecV2Suite) SetupSuite() { testKeyspaceMeta := keyspacepb.KeyspaceMeta{ - Id: testKeyspaceID, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: testKeyspaceID}, } codec, err := NewCodecV2(ModeRaw, &testKeyspaceMeta) suite.NoError(err) @@ -181,7 +181,7 @@ func (suite *testCodecV2Suite) TestEncodeRequest() { // TiFlash carries API v2 context separately through ApiVersion and KeyspaceId. re.Equal([]byte("compact-start"), encoded.Compact().StartKey) re.Equal(kvrpcpb.APIVersion_V2, encoded.Compact().ApiVersion) - re.Equal(testKeyspaceID, encoded.Compact().KeyspaceId) + re.Equal(testKeyspaceID, encoded.Compact().GetKeyspaceId()) }, }, } @@ -289,7 +289,7 @@ func (suite *testCodecV2Suite) TestNewCodecV2() { } for _, testCase := range testCases { - keyspaceMeta := &keyspacepb.KeyspaceMeta{Id: testCase.keyspaceID} + keyspaceMeta := &keyspacepb.KeyspaceMeta{Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: testCase.keyspaceID}} if testCase.shouldErr { _, err := NewCodecV2(testCase.mode, keyspaceMeta) re.Error(err) @@ -884,7 +884,7 @@ func (suite *testCodecV2Suite) TestEncodeMPPRequest() { suite.Nil(err) task, ok := req.Req.(*mpp.DispatchTaskRequest) suite.True(ok) - suite.Equal(task.Meta.KeyspaceId, testKeyspaceID) + suite.Equal(testKeyspaceID, task.Meta.GetKeyspaceId()) suite.Equal(task.Meta.ApiVersion, kvrpcpb.APIVersion_V2) suite.Equal(task.Regions[0].Ranges[0].Start, suite.codec.EncodeKey([]byte("a"))) suite.Equal(task.Regions[0].Ranges[0].End, suite.codec.EncodeKey([]byte("b"))) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index 41080da321..e0f61a909f 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -61,9 +61,8 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string binary.BigEndian.PutUint64(endKey, prefixVal+1) keyspaceMeta := &keyspacepb.KeyspaceMeta{ - Name: BuildKeyspaceName(keyspaceName), - Id: keyspaceID, - KeyspaceIdentity: identity, + Name: BuildKeyspaceName(keyspaceName), + Keyspace: &keyspacepb.KeyspaceMeta_KeyspaceIdentity{KeyspaceIdentity: identity}, } base := &codecV2{ apiVersion: kvrpcpb.APIVersion_V3, diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index 5d0f21b5d9..c250b9112d 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -60,9 +60,8 @@ func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { re.Equal([]byte("key"), encoded.Get().Key) re.Equal(kvrpcpb.APIVersion_V3, encoded.ApiVersion) - re.Equal(uint32(9), encoded.KeyspaceId) re.Equal("ks", encoded.KeyspaceName) - re.Equal(identity, encoded.KeyspaceIdentity) + re.Equal(identity, encoded.GetKeyspaceIdentity()) } func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { diff --git a/internal/locate/pd_codec.go b/internal/locate/pd_codec.go index dd9eef424e..8689d3c822 100644 --- a/internal/locate/pd_codec.go +++ b/internal/locate/pd_codec.go @@ -98,7 +98,7 @@ func GetKeyspaceID(client pd.Client, name string) (uint32, error) { if meta.State != keyspacepb.KeyspaceState_ENABLED { return 0, errors.Errorf("keyspace %s not enabled", name) } - return meta.Id, nil + return meta.GetId(), nil } // GetKeyspaceMeta attempts to retrieve keyspace meta corresponding to the given keyspace name from PD. diff --git a/tikv/compatible_txn_safe_point_loader.go b/tikv/compatible_txn_safe_point_loader.go index 013a7e38c2..a5b758dbec 100644 --- a/tikv/compatible_txn_safe_point_loader.go +++ b/tikv/compatible_txn_safe_point_loader.go @@ -104,7 +104,7 @@ func (l *compatibleTxnSafePointLoader) loadTxnSafePoint(ctx context.Context) (ui key := unifiedTxnSafePointPath keyspaceMeta := l.codec.GetKeyspaceMeta() if pd.IsKeyspaceUsingKeyspaceLevelGC(keyspaceMeta) { - key = fmt.Sprintf(keyspaceLevelTxnSafePointPath, keyspaceMeta.Id) + key = fmt.Sprintf(keyspaceLevelTxnSafePointPath, keyspaceMeta.GetId()) } // Follow the same implementation as the EtcdSafePointKV by setting the timeout 5 seconds. diff --git a/tikv/test_util.go b/tikv/test_util.go index ea4f4b5e04..786e3cfda4 100644 --- a/tikv/test_util.go +++ b/tikv/test_util.go @@ -140,7 +140,7 @@ func NewTestKeyspaceTiKVStore(client Client, pdClient pd.Client, clientHijack fu // Make sure the uuid is unique. uid := uuid.New().String() - keyspaceIdStr := strconv.FormatUint(uint64(keyspaceMeta.Id), 10) + keyspaceIdStr := strconv.FormatUint(uint64(keyspaceMeta.GetId()), 10) spkv := NewMockSafePointKV(WithPrefix(keyspaceIdStr)) tikvStore, err := NewKVStore(uid, pdCli, spkv, client, opt...) diff --git a/tikvrpc/tikvrpc_test.go b/tikvrpc/tikvrpc_test.go index d198fd9935..e1a4c1f0e3 100644 --- a/tikvrpc/tikvrpc_test.go +++ b/tikvrpc/tikvrpc_test.go @@ -125,13 +125,13 @@ func TestAttachContextSetsRequestContext(t *testing.T) { rpcCtx := kvrpcpb.Context{ RegionId: 123, ApiVersion: kvrpcpb.APIVersion_V2, - KeyspaceId: 456, + Keyspace: &kvrpcpb.Context_KeyspaceId{KeyspaceId: 456}, KeyspaceName: "test-keyspace", } nextRPCtx := kvrpcpb.Context{ RegionId: 789, ApiVersion: kvrpcpb.APIVersion_V2, - KeyspaceId: 101112, + Keyspace: &kvrpcpb.Context_KeyspaceId{KeyspaceId: 101112}, KeyspaceName: "next-test-keyspace", } From b2a2d303cd530421d9d559461dcfd6cfc51553cd Mon Sep 17 00:00:00 2001 From: disksing Date: Fri, 19 Jun 2026 04:14:36 +0800 Subject: [PATCH 05/21] Disable router lookup for API V3 region cache Signed-off-by: disksing --- internal/locate/region_cache.go | 18 +++++++++++++++--- internal/locate/region_cache_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/internal/locate/region_cache.go b/internal/locate/region_cache.go index e2b69bde6c..cb39b8334d 100644 --- a/internal/locate/region_cache.go +++ b/internal/locate/region_cache.go @@ -816,6 +816,18 @@ func (c *RegionCache) Close() { c.bg.shutdown(true) } +func (c *RegionCache) allowRouterRegionLookup() bool { + return c.codec == nil || c.codec.GetAPIVersion() != kvrpcpb.APIVersion_V3 +} + +func (c *RegionCache) followerRegionOptions() []opt.GetRegionOption { + opts := []opt.GetRegionOption{opt.WithAllowFollowerHandle()} + if c.allowRouterRegionLookup() { + opts = append(opts, opt.WithAllowRouterServiceHandle()) + } + return opts +} + // IsBackgroundRunnerClosed returns whether RegionCache's background runner context has been canceled. // // It is intended for tests/debugging only. @@ -1783,7 +1795,7 @@ func (c *RegionCache) findRegionByKey(bo *retry.Backoffer, key []byte, isEndKey if r == nil || expired { // load region when it is not exists or expired. observeLoadRegion(tag, r, expired, 0) - lr, err := c.loadRegion(bo, key, isEndKey, opt.WithAllowFollowerHandle(), opt.WithAllowRouterServiceHandle()) + lr, err := c.loadRegion(bo, key, isEndKey, c.followerRegionOptions()...) if err != nil { // no region data, return error if failure. return nil, err @@ -2513,7 +2525,7 @@ func (c *RegionCache) scanRegions(bo *retry.Backoffer, startKey, endKey []byte, ctx = opentracing.ContextWithSpan(ctx, span1) } - pdOpts := []opt.GetRegionOption{opt.WithAllowFollowerHandle(), opt.WithAllowRouterServiceHandle()} + pdOpts := c.followerRegionOptions() var backoffErr error for { if backoffErr != nil { @@ -2598,7 +2610,7 @@ func (c *RegionCache) batchScanRegions(bo *retry.Backoffer, keyRanges []router.K opt.WithOutputMustContainAllKeyRange(), } if needFollowerHandle { - pdOpts = append(pdOpts, opt.WithAllowFollowerHandle(), opt.WithAllowRouterServiceHandle()) + pdOpts = append(pdOpts, c.followerRegionOptions()...) } if batchOpt.needBuckets { pdOpts = append(pdOpts, opt.WithBuckets()) diff --git a/internal/locate/region_cache_test.go b/internal/locate/region_cache_test.go index 4f1fcabe3c..9ba5732103 100644 --- a/internal/locate/region_cache_test.go +++ b/internal/locate/region_cache_test.go @@ -52,6 +52,7 @@ import ( "github.com/gogo/protobuf/proto" "github.com/pingcap/failpoint" + "github.com/pingcap/kvproto/pkg/apipb" "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" @@ -97,6 +98,31 @@ func (c *inspectedPDClient) BatchScanRegions(ctx context.Context, keyRanges []ro return c.Client.BatchScanRegions(ctx, keyRanges, limit, opts...) } +func TestFollowerRegionOptionsDisableRouterForAPIV3(t *testing.T) { + t.Parallel() + + v1 := &RegionCache{codec: apicodec.NewCodecV1(apicodec.ModeTxn)} + var v1Op opt.GetRegionOp + for _, o := range v1.followerRegionOptions() { + o(&v1Op) + } + require.True(t, v1Op.AllowFollowerHandle) + require.True(t, v1Op.AllowRouterServiceHandle) + + v3Codec, err := apicodec.NewCodecV3(apicodec.ModeTxn, &apipb.KeyspaceIdentity{ + NamespaceId: 7, + KeyspaceId: 11, + }, "ks") + require.NoError(t, err) + v3 := &RegionCache{codec: v3Codec} + var v3Op opt.GetRegionOp + for _, o := range v3.followerRegionOptions() { + o(&v3Op) + } + require.True(t, v3Op.AllowFollowerHandle) + require.False(t, v3Op.AllowRouterServiceHandle) +} + func TestBackgroundRunner(t *testing.T) { t.Run("ShutdownWait", func(t *testing.T) { dur := 100 * time.Millisecond From 519ae614ed3054db5e68e4310531bb59df65f813 Mon Sep 17 00:00:00 2001 From: disksing Date: Fri, 19 Jun 2026 04:37:43 +0800 Subject: [PATCH 06/21] Disable PD router client for API V3 keyspace Signed-off-by: disksing --- tikv/kv.go | 21 +++++++++++++++------ tikv/kv_test.go | 21 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/tikv/kv.go b/tikv/kv.go index 7bc90001b4..1c3cf0676a 100644 --- a/tikv/kv.go +++ b/tikv/kv.go @@ -396,13 +396,8 @@ func NewPDClientWithKeyspaceIdentity(pdAddrs []string, identity *apipb.KeyspaceI return newPDClient(pdAddrs, identity) } -func newPDClient(pdAddrs []string, identity *apipb.KeyspaceIdentity) (pd.Client, error) { +func buildPDClientOptions(identity *apipb.KeyspaceIdentity) []opt.ClientOption { cfg := config.GetGlobalConfig() - security := pd.SecurityOption{ - CAPath: cfg.Security.ClusterSSLCA, - CertPath: cfg.Security.ClusterSSLCert, - KeyPath: cfg.Security.ClusterSSLKey, - } opts := []opt.ClientOption{ opt.WithGRPCDialOptions( grpc.WithKeepaliveParams( @@ -415,6 +410,20 @@ func newPDClient(pdAddrs []string, identity *apipb.KeyspaceIdentity) (pd.Client, opt.WithCustomTimeoutOption(time.Duration(cfg.PDClient.PDServerTimeout) * time.Second), opt.WithForwardingOption(config.GetGlobalConfig().EnableForwarding), } + if identity != nil { + opts = append(opts, opt.WithEnableRouterClient(false)) + } + return opts +} + +func newPDClient(pdAddrs []string, identity *apipb.KeyspaceIdentity) (pd.Client, error) { + cfg := config.GetGlobalConfig() + security := pd.SecurityOption{ + CAPath: cfg.Security.ClusterSSLCA, + CertPath: cfg.Security.ClusterSSLCert, + KeyPath: cfg.Security.ClusterSSLKey, + } + opts := buildPDClientOptions(identity) var ( pdCli pd.Client diff --git a/tikv/kv_test.go b/tikv/kv_test.go index 8a7042819d..b2612e9799 100644 --- a/tikv/kv_test.go +++ b/tikv/kv_test.go @@ -23,6 +23,7 @@ import ( "time" "github.com/pingcap/failpoint" + "github.com/pingcap/kvproto/pkg/apipb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" "github.com/stretchr/testify/require" @@ -33,6 +34,7 @@ import ( "github.com/tikv/client-go/v2/tikvrpc" "github.com/tikv/client-go/v2/util" pdhttp "github.com/tikv/pd/client/http" + pdopt "github.com/tikv/pd/client/opt" ) func TestKV(t *testing.T) { @@ -40,6 +42,25 @@ func TestKV(t *testing.T) { suite.Run(t, new(testKVSuite)) } +func TestBuildPDClientOptionsDisableRouterForAPIV3(t *testing.T) { + t.Parallel() + + defaultOptions := pdopt.NewOption() + for _, o := range buildPDClientOptions(nil) { + o(defaultOptions) + } + require.True(t, defaultOptions.GetEnableRouterClient()) + + apiV3Options := pdopt.NewOption() + for _, o := range buildPDClientOptions(&apipb.KeyspaceIdentity{ + NamespaceId: 1, + KeyspaceId: 2, + }) { + o(apiV3Options) + } + require.False(t, apiV3Options.GetEnableRouterClient()) +} + type testKVSuite struct { suite.Suite store *KVStore From 64b22d97898b5799e17a7006523f783f0e5d37e7 Mon Sep 17 00:00:00 2001 From: disksing Date: Tue, 30 Jun 2026 16:10:32 +0800 Subject: [PATCH 07/21] Update APIV3 pd and kvproto dependencies Signed-off-by: disksing --- go.mod | 4 ++-- go.sum | 8 ++++---- internal/mockstore/mocktikv/pd.go | 4 ++++ txnkv/transaction/test_util.go | 5 +++++ 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 4396458fa6..686b46d13d 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260611143855-3566665c9104 + github.com/pingcap/kvproto v0.0.0-20260630080527-b4ca3f1805fb github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260618194602-729ea141b819 + github.com/tikv/pd/client v0.0.0-20260630080729-de0d6e825733 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index 31cb2162ca..8fce4ec7ba 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 h1:tdMsjOqUR7YXH github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86/go.mod h1:exzhVYca3WRtd6gclGNErRWb1qEgff3LYta0LvRmON4= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= -github.com/pingcap/kvproto v0.0.0-20260611143855-3566665c9104 h1:sNjYPcGD6V+CZl3Txt1b+VQkX6KkJXk8AxBUDizPZVo= -github.com/pingcap/kvproto v0.0.0-20260611143855-3566665c9104/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260630080527-b4ca3f1805fb h1:DttW0t8mMW2TYoGflOV1gOIUkd7qRbnaTNS0qQj7dzo= +github.com/pingcap/kvproto v0.0.0-20260630080527-b4ca3f1805fb/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -115,8 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260618194602-729ea141b819 h1:azvEqdNinRydqb4jBVKCPOPU7WGng79zzXwSmNHj+aw= -github.com/tikv/pd/client v0.0.0-20260618194602-729ea141b819/go.mod h1:YuIGumSxztlsRfeZfi8WDk0RjvRvEW8CoQ0FtF61ENY= +github.com/tikv/pd/client v0.0.0-20260630080729-de0d6e825733 h1:bmsbVcA+V+1fMVnxpQh+p8LQcETS6Uo2eVzDkxrzmes= +github.com/tikv/pd/client v0.0.0-20260630080729-de0d6e825733/go.mod h1:mngzw+3uXVJANLP7PvMME+rm7lNaiP2jjvBsqZgXOGE= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/internal/mockstore/mocktikv/pd.go b/internal/mockstore/mocktikv/pd.go index a7a21a68fe..65e6b60e0e 100644 --- a/internal/mockstore/mocktikv/pd.go +++ b/internal/mockstore/mocktikv/pd.go @@ -431,6 +431,10 @@ func (c *pdClient) LoadKeyspace(ctx context.Context, name string) (*keyspacepb.K return nil, nil } +func (c *pdClient) LoadKeyspaceByID(ctx context.Context, id uint32) (*keyspacepb.KeyspaceMeta, error) { + return nil, nil +} + func (c *pdClient) WatchKeyspaces(ctx context.Context) (chan []*keyspacepb.KeyspaceMeta, error) { return nil, nil } diff --git a/txnkv/transaction/test_util.go b/txnkv/transaction/test_util.go index cb0a6c5f0b..5c1b6b14bf 100644 --- a/txnkv/transaction/test_util.go +++ b/txnkv/transaction/test_util.go @@ -255,6 +255,11 @@ func (u *unimplementedPDClient) LoadKeyspace(ctx context.Context, name string) ( panic("unimplemented") } +// LoadKeyspaceByID implements pd.Client. +func (u *unimplementedPDClient) LoadKeyspaceByID(ctx context.Context, id uint32) (*keyspacepb.KeyspaceMeta, error) { + panic("unimplemented") +} + // LoadResourceGroups implements pd.Client. func (u *unimplementedPDClient) LoadResourceGroups(ctx context.Context) ([]*resource_manager.ResourceGroup, int64, error) { panic("unimplemented") From 3e25ac76da9057623f478f074c017345bf9be7c2 Mon Sep 17 00:00:00 2001 From: disksing Date: Tue, 30 Jun 2026 18:39:18 +0800 Subject: [PATCH 08/21] Encode API V3 RPC keys with physical prefix Signed-off-by: disksing --- internal/apicodec/codec_v3.go | 21 +-------------------- internal/apicodec/codec_v3_test.go | 4 ++-- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index e0f61a909f..c35a92b937 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -75,27 +75,8 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string return &codecV3{codecV2: base}, nil } -// EncodeRequest keeps V3 RPC key fields as user keys. TiKV uses the V3 -// keyspace identity in request context to apply the physical keyspace prefix. -func (c *codecV3) EncodeRequest(req *tikvrpc.Request) (*tikvrpc.Request, error) { - r := c.reqPool.Get().(*tikvrpc.Request) - *r = *req - setAPICtx(c, r) - return r, nil -} - func (c *codecV3) DecodeResponse(req *tikvrpc.Request, resp *tikvrpc.Response) (*tikvrpc.Response, error) { - defer c.reqPool.Put(req) - regionError, err := resp.GetRegionError() - if err != nil { - return resp, nil - } - decodedRegionError, err := c.decodeRegionError(regionError) - if err != nil { - return nil, err - } - setRegionError(resp, decodedRegionError) - return resp, nil + return c.codecV2.DecodeResponse(req, resp) } func setRegionError(resp *tikvrpc.Response, regionError *errorpb.Error) { diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index c250b9112d..e94728839e 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -42,7 +42,7 @@ func TestNewCodecV3InvalidIdentity(t *testing.T) { re.Error(err) } -func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { +func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} codec, err := NewCodecV3(ModeTxn, identity, "ks") @@ -58,7 +58,7 @@ func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { re.NoError(err) defer codec.(*codecV3).reqPool.Put(encoded) - re.Equal([]byte("key"), encoded.Get().Key) + re.Equal([]byte{'x', 0, 0, 0, 7, 0, 0, 9, 'k', 'e', 'y'}, encoded.Get().Key) re.Equal(kvrpcpb.APIVersion_V3, encoded.ApiVersion) re.Equal("ks", encoded.KeyspaceName) re.Equal(identity, encoded.GetKeyspaceIdentity()) From d7c5390a8c2c4ee929e755fbf3fadf9fac908ab5 Mon Sep 17 00:00:00 2001 From: disksing Date: Tue, 30 Jun 2026 19:04:32 +0800 Subject: [PATCH 09/21] Revert "Encode API V3 RPC keys with physical prefix" This reverts commit 3e25ac76da9057623f478f074c017345bf9be7c2. Signed-off-by: disksing --- internal/apicodec/codec_v3.go | 21 ++++++++++++++++++++- internal/apicodec/codec_v3_test.go | 4 ++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index c35a92b937..e0f61a909f 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -75,8 +75,27 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string return &codecV3{codecV2: base}, nil } +// EncodeRequest keeps V3 RPC key fields as user keys. TiKV uses the V3 +// keyspace identity in request context to apply the physical keyspace prefix. +func (c *codecV3) EncodeRequest(req *tikvrpc.Request) (*tikvrpc.Request, error) { + r := c.reqPool.Get().(*tikvrpc.Request) + *r = *req + setAPICtx(c, r) + return r, nil +} + func (c *codecV3) DecodeResponse(req *tikvrpc.Request, resp *tikvrpc.Response) (*tikvrpc.Response, error) { - return c.codecV2.DecodeResponse(req, resp) + defer c.reqPool.Put(req) + regionError, err := resp.GetRegionError() + if err != nil { + return resp, nil + } + decodedRegionError, err := c.decodeRegionError(regionError) + if err != nil { + return nil, err + } + setRegionError(resp, decodedRegionError) + return resp, nil } func setRegionError(resp *tikvrpc.Response, regionError *errorpb.Error) { diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index e94728839e..c250b9112d 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -42,7 +42,7 @@ func TestNewCodecV3InvalidIdentity(t *testing.T) { re.Error(err) } -func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { +func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} codec, err := NewCodecV3(ModeTxn, identity, "ks") @@ -58,7 +58,7 @@ func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { re.NoError(err) defer codec.(*codecV3).reqPool.Put(encoded) - re.Equal([]byte{'x', 0, 0, 0, 7, 0, 0, 9, 'k', 'e', 'y'}, encoded.Get().Key) + re.Equal([]byte("key"), encoded.Get().Key) re.Equal(kvrpcpb.APIVersion_V3, encoded.ApiVersion) re.Equal("ks", encoded.KeyspaceName) re.Equal(identity, encoded.GetKeyspaceIdentity()) From 8a3e4072418f6400de8e944da7440df73f3c7b6f Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 11:52:05 +0800 Subject: [PATCH 10/21] Update APIV3 PD and kvproto dependencies --- examples/gcworker/go.mod | 14 +++++++------- examples/rawkv/go.mod | 14 +++++++------- examples/txnkv/1pc_txn/go.mod | 14 +++++++------- examples/txnkv/async_commit/go.mod | 14 +++++++------- examples/txnkv/delete_range/go.mod | 14 +++++++------- examples/txnkv/go.mod | 14 +++++++------- examples/txnkv/pessimistic_txn/go.mod | 14 +++++++------- examples/txnkv/unsafedestoryrange/go.mod | 14 +++++++------- go.mod | 4 ++-- go.sum | 8 ++++---- internal/apicodec/codec_v2_test.go | 4 ++-- internal/apicodec/codec_v3.go | 4 ++-- 12 files changed, 66 insertions(+), 66 deletions(-) diff --git a/examples/gcworker/go.mod b/examples/gcworker/go.mod index 9c8abb41f3..18680357f5 100644 --- a/examples/gcworker/go.mod +++ b/examples/gcworker/go.mod @@ -1,6 +1,6 @@ module gcworker -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/rawkv/go.mod b/examples/rawkv/go.mod index e2981ee47e..4bd3ac5814 100644 --- a/examples/rawkv/go.mod +++ b/examples/rawkv/go.mod @@ -1,6 +1,6 @@ module rawkv -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/txnkv/1pc_txn/go.mod b/examples/txnkv/1pc_txn/go.mod index 606c927758..a16c0001e3 100644 --- a/examples/txnkv/1pc_txn/go.mod +++ b/examples/txnkv/1pc_txn/go.mod @@ -1,6 +1,6 @@ module 1pc_txn -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/txnkv/async_commit/go.mod b/examples/txnkv/async_commit/go.mod index c42b139d03..41041319ce 100644 --- a/examples/txnkv/async_commit/go.mod +++ b/examples/txnkv/async_commit/go.mod @@ -1,6 +1,6 @@ module async_commit -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/txnkv/delete_range/go.mod b/examples/txnkv/delete_range/go.mod index a3222f2d78..518666a983 100644 --- a/examples/txnkv/delete_range/go.mod +++ b/examples/txnkv/delete_range/go.mod @@ -1,6 +1,6 @@ module delete_range -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/txnkv/go.mod b/examples/txnkv/go.mod index 4d949659e7..d5892c6da5 100644 --- a/examples/txnkv/go.mod +++ b/examples/txnkv/go.mod @@ -1,9 +1,9 @@ module txnkv -go 1.25.8 +go 1.25.10 require ( - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff github.com/tikv/client-go/v2 v2.0.0 ) @@ -33,7 +33,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -45,10 +45,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/txnkv/pessimistic_txn/go.mod b/examples/txnkv/pessimistic_txn/go.mod index cba1c9960a..dc70552621 100644 --- a/examples/txnkv/pessimistic_txn/go.mod +++ b/examples/txnkv/pessimistic_txn/go.mod @@ -1,6 +1,6 @@ module pessimistic_txn -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/examples/txnkv/unsafedestoryrange/go.mod b/examples/txnkv/unsafedestoryrange/go.mod index 415bbba5e5..4ad876d45a 100644 --- a/examples/txnkv/unsafedestoryrange/go.mod +++ b/examples/txnkv/unsafedestoryrange/go.mod @@ -1,6 +1,6 @@ module unsafedestoryrange -go 1.25.8 +go 1.25.10 require github.com/tikv/client-go/v2 v2.0.0 @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260601035955-b2b3bb492278 // indirect + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260601035915-3ef6a3b10c84 // indirect + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect @@ -43,10 +43,10 @@ require ( golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect - google.golang.org/grpc v1.75.1 // indirect - google.golang.org/protobuf v1.36.6 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/grpc v1.79.3 // indirect + google.golang.org/protobuf v1.36.10 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect modernc.org/mathutil v1.7.1 // indirect ) diff --git a/go.mod b/go.mod index 686b46d13d..f8b41f4a93 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260630080527-b4ca3f1805fb + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260630080729-de0d6e825733 + github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index 8fce4ec7ba..87cf1d4de5 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 h1:tdMsjOqUR7YXH github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86/go.mod h1:exzhVYca3WRtd6gclGNErRWb1qEgff3LYta0LvRmON4= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= -github.com/pingcap/kvproto v0.0.0-20260630080527-b4ca3f1805fb h1:DttW0t8mMW2TYoGflOV1gOIUkd7qRbnaTNS0qQj7dzo= -github.com/pingcap/kvproto v0.0.0-20260630080527-b4ca3f1805fb/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= +github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff h1:kt7e4oQ9e1s2nMR7UkBJpmxrhi59vRrOE5kNY6TMRks= +github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -115,8 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260630080729-de0d6e825733 h1:bmsbVcA+V+1fMVnxpQh+p8LQcETS6Uo2eVzDkxrzmes= -github.com/tikv/pd/client v0.0.0-20260630080729-de0d6e825733/go.mod h1:mngzw+3uXVJANLP7PvMME+rm7lNaiP2jjvBsqZgXOGE= +github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f h1:APAayWRZ+N8ZuYs75V6U20xQ1A7fCfapbMNvhs08ycc= +github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f/go.mod h1:EpDH8tRCw4DvqHp7e5VzKYRQKhej0Lb7e+P+MePyagE= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/internal/apicodec/codec_v2_test.go b/internal/apicodec/codec_v2_test.go index c40a0fda10..45530235f4 100644 --- a/internal/apicodec/codec_v2_test.go +++ b/internal/apicodec/codec_v2_test.go @@ -42,7 +42,7 @@ func TestCodecV2(t *testing.T) { func (suite *testCodecV2Suite) SetupSuite() { testKeyspaceMeta := keyspacepb.KeyspaceMeta{ - Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: testKeyspaceID}, + Id: testKeyspaceID, } codec, err := NewCodecV2(ModeRaw, &testKeyspaceMeta) suite.NoError(err) @@ -289,7 +289,7 @@ func (suite *testCodecV2Suite) TestNewCodecV2() { } for _, testCase := range testCases { - keyspaceMeta := &keyspacepb.KeyspaceMeta{Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: testCase.keyspaceID}} + keyspaceMeta := &keyspacepb.KeyspaceMeta{Id: testCase.keyspaceID} if testCase.shouldErr { _, err := NewCodecV2(testCase.mode, keyspaceMeta) re.Error(err) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index e0f61a909f..e79d05617c 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -61,8 +61,8 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string binary.BigEndian.PutUint64(endKey, prefixVal+1) keyspaceMeta := &keyspacepb.KeyspaceMeta{ - Name: BuildKeyspaceName(keyspaceName), - Keyspace: &keyspacepb.KeyspaceMeta_KeyspaceIdentity{KeyspaceIdentity: identity}, + Name: BuildKeyspaceName(keyspaceName), + KeyspaceIdentity: identity, } base := &codecV2{ apiVersion: kvrpcpb.APIVersion_V3, From c99d77c6ac71c079a07279f6f95d8a99df4176d4 Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 18:19:56 +0800 Subject: [PATCH 11/21] Encode API V3 RPC keys with physical prefix --- internal/apicodec/codec_v3.go | 97 +----------------------------- internal/apicodec/codec_v3_test.go | 4 +- 2 files changed, 3 insertions(+), 98 deletions(-) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index e79d05617c..3dddef04a5 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -4,7 +4,6 @@ import ( "encoding/binary" "github.com/pingcap/kvproto/pkg/apipb" - "github.com/pingcap/kvproto/pkg/errorpb" "github.com/pingcap/kvproto/pkg/keyspacepb" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pkg/errors" @@ -75,100 +74,6 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string return &codecV3{codecV2: base}, nil } -// EncodeRequest keeps V3 RPC key fields as user keys. TiKV uses the V3 -// keyspace identity in request context to apply the physical keyspace prefix. -func (c *codecV3) EncodeRequest(req *tikvrpc.Request) (*tikvrpc.Request, error) { - r := c.reqPool.Get().(*tikvrpc.Request) - *r = *req - setAPICtx(c, r) - return r, nil -} - func (c *codecV3) DecodeResponse(req *tikvrpc.Request, resp *tikvrpc.Response) (*tikvrpc.Response, error) { - defer c.reqPool.Put(req) - regionError, err := resp.GetRegionError() - if err != nil { - return resp, nil - } - decodedRegionError, err := c.decodeRegionError(regionError) - if err != nil { - return nil, err - } - setRegionError(resp, decodedRegionError) - return resp, nil -} - -func setRegionError(resp *tikvrpc.Response, regionError *errorpb.Error) { - switch r := resp.Resp.(type) { - case *kvrpcpb.GetResponse: - r.RegionError = regionError - case *kvrpcpb.ScanResponse: - r.RegionError = regionError - case *kvrpcpb.PrewriteResponse: - r.RegionError = regionError - case *kvrpcpb.CommitResponse: - r.RegionError = regionError - case *kvrpcpb.CleanupResponse: - r.RegionError = regionError - case *kvrpcpb.BatchGetResponse: - r.RegionError = regionError - case *kvrpcpb.BatchRollbackResponse: - r.RegionError = regionError - case *kvrpcpb.ScanLockResponse: - r.RegionError = regionError - case *kvrpcpb.ResolveLockResponse: - r.RegionError = regionError - case *kvrpcpb.GCResponse: - r.RegionError = regionError - case *kvrpcpb.DeleteRangeResponse: - r.RegionError = regionError - case *kvrpcpb.PessimisticLockResponse: - r.RegionError = regionError - case *kvrpcpb.PessimisticRollbackResponse: - r.RegionError = regionError - case *kvrpcpb.TxnHeartBeatResponse: - r.RegionError = regionError - case *kvrpcpb.CheckTxnStatusResponse: - r.RegionError = regionError - case *kvrpcpb.CheckSecondaryLocksResponse: - r.RegionError = regionError - case *kvrpcpb.FlushResponse: - r.RegionError = regionError - case *kvrpcpb.BufferBatchGetResponse: - r.RegionError = regionError - case *kvrpcpb.FlashbackToVersionResponse: - r.RegionError = regionError - case *kvrpcpb.PrepareFlashbackToVersionResponse: - r.RegionError = regionError - case *kvrpcpb.RawGetResponse: - r.RegionError = regionError - case *kvrpcpb.RawBatchGetResponse: - r.RegionError = regionError - case *kvrpcpb.RawPutResponse: - r.RegionError = regionError - case *kvrpcpb.RawBatchPutResponse: - r.RegionError = regionError - case *kvrpcpb.RawDeleteResponse: - r.RegionError = regionError - case *kvrpcpb.RawBatchDeleteResponse: - r.RegionError = regionError - case *kvrpcpb.RawDeleteRangeResponse: - r.RegionError = regionError - case *kvrpcpb.RawScanResponse: - r.RegionError = regionError - case *kvrpcpb.RawGetKeyTTLResponse: - r.RegionError = regionError - case *kvrpcpb.RawCASResponse: - r.RegionError = regionError - case *kvrpcpb.RawChecksumResponse: - r.RegionError = regionError - case *kvrpcpb.UnsafeDestroyRangeResponse: - r.RegionError = regionError - case *kvrpcpb.MvccGetByKeyResponse: - r.RegionError = regionError - case *kvrpcpb.MvccGetByStartTsResponse: - r.RegionError = regionError - case *kvrpcpb.SplitRegionResponse: - r.RegionError = regionError - } + return c.codecV2.DecodeResponse(req, resp) } diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index c250b9112d..e94728839e 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -42,7 +42,7 @@ func TestNewCodecV3InvalidIdentity(t *testing.T) { re.Error(err) } -func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { +func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} codec, err := NewCodecV3(ModeTxn, identity, "ks") @@ -58,7 +58,7 @@ func TestCodecV3EncodeRequestKeepsUserKeys(t *testing.T) { re.NoError(err) defer codec.(*codecV3).reqPool.Put(encoded) - re.Equal([]byte("key"), encoded.Get().Key) + re.Equal([]byte{'x', 0, 0, 0, 7, 0, 0, 9, 'k', 'e', 'y'}, encoded.Get().Key) re.Equal(kvrpcpb.APIVersion_V3, encoded.ApiVersion) re.Equal("ks", encoded.KeyspaceName) re.Equal(identity, encoded.GetKeyspaceIdentity()) From 08e7e8019550820294c8dce4aea9bbacbd23cd64 Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 19:01:36 +0800 Subject: [PATCH 12/21] apicodec: avoid double encoding API V3 physical keys Signed-off-by: disksing --- internal/apicodec/codec_v2.go | 3 +++ internal/apicodec/codec_v3_test.go | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/internal/apicodec/codec_v2.go b/internal/apicodec/codec_v2.go index c4200bc77a..8f73af1339 100644 --- a/internal/apicodec/codec_v2.go +++ b/internal/apicodec/codec_v2.go @@ -806,6 +806,9 @@ func (c *codecV2) DecodeRange(encodedStart, encodedEnd []byte) (start []byte, en } func (c *codecV2) EncodeKey(key []byte) []byte { + if c.apiVersion == kvrpcpb.APIVersion_V3 && bytes.HasPrefix(key, c.prefix) { + return key + } return append(c.prefix, key...) } diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index e94728839e..7530aa725d 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -64,6 +64,29 @@ func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { re.Equal(identity, encoded.GetKeyspaceIdentity()) } +func TestCodecV3EncodeRequestDoesNotDoubleEncodePhysicalKeys(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + + physicalStart := codec.EncodeKey([]byte("a")) + physicalEnd := codec.EncodeKey([]byte("b")) + req := &tikvrpc.Request{ + Type: tikvrpc.CmdScan, + Req: &kvrpcpb.ScanRequest{ + StartKey: physicalStart, + EndKey: physicalEnd, + }, + } + encoded, err := codec.EncodeRequest(req) + re.NoError(err) + defer codec.(*codecV3).reqPool.Put(encoded) + + re.Equal(physicalStart, encoded.Scan().StartKey) + re.Equal(physicalEnd, encoded.Scan().EndKey) +} + func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{ From f310eb80001e75eb7710664f9214f0538ea11f7b Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 20:00:18 +0800 Subject: [PATCH 13/21] apicodec: keep API V3 RPC keys logical --- internal/apicodec/codec_v2.go | 7 +- internal/apicodec/codec_v3.go | 131 ++++++++++++++++++++++++++--- internal/apicodec/codec_v3_test.go | 53 +++++++++--- 3 files changed, 164 insertions(+), 27 deletions(-) diff --git a/internal/apicodec/codec_v2.go b/internal/apicodec/codec_v2.go index 8f73af1339..2f71497140 100644 --- a/internal/apicodec/codec_v2.go +++ b/internal/apicodec/codec_v2.go @@ -787,6 +787,10 @@ func (c *codecV2) encodeRange(start, end []byte, reverse bool) ([]byte, []byte) // DecodeRange maps encodedStart and end back to normal start and // end without APIv2 prefixes. func (c *codecV2) DecodeRange(encodedStart, encodedEnd []byte) (start []byte, end []byte, err error) { + if len(c.prefix) == 0 { + return encodedStart, encodedEnd, nil + } + if bytes.Compare(encodedStart, c.endKey) >= 0 || (len(encodedEnd) > 0 && bytes.Compare(encodedEnd, c.prefix) <= 0) { return nil, nil, errors.WithStack(errKeyOutOfBound) @@ -806,9 +810,6 @@ func (c *codecV2) DecodeRange(encodedStart, encodedEnd []byte) (start []byte, en } func (c *codecV2) EncodeKey(key []byte) []byte { - if c.apiVersion == kvrpcpb.APIVersion_V3 && bytes.HasPrefix(key, c.prefix) { - return key - } return append(c.prefix, key...) } diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index 3dddef04a5..29538cb7f3 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -1,6 +1,7 @@ package apicodec import ( + "bytes" "encoding/binary" "github.com/pingcap/kvproto/pkg/apipb" @@ -23,6 +24,8 @@ func checkV3Key(b []byte) error { // prefixes for PD region lookups. type codecV3 struct { *codecV2 + physicalPrefix []byte + physicalEndKey []byte } // NewCodecV3 returns a codec for API V3 tenant-scoped keyspaces. @@ -39,25 +42,25 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string return nil, errors.Errorf("API V3 keyspaceID %d is out of range, valid range is [1, %d]", keyspaceID, maxKeyspaceID) } - prefix := make([]byte, apiV3KeyspacePrefixLen) + physicalPrefix := make([]byte, apiV3KeyspacePrefixLen) switch mode { case ModeRaw: - prefix[0] = RawModePrefix + physicalPrefix[0] = RawModePrefix case ModeTxn: - prefix[0] = TxnModePrefix + physicalPrefix[0] = TxnModePrefix default: return nil, errors.Errorf("unknown mode") } - binary.BigEndian.PutUint32(prefix[1:5], namespaceID) + binary.BigEndian.PutUint32(physicalPrefix[1:5], namespaceID) keyspaceIDBytes, err := getIDByte(keyspaceID) if err != nil { return nil, err } - copy(prefix[5:], keyspaceIDBytes) + copy(physicalPrefix[5:], keyspaceIDBytes) - endKey := make([]byte, apiV3KeyspacePrefixLen) - prefixVal := binary.BigEndian.Uint64(prefix) - binary.BigEndian.PutUint64(endKey, prefixVal+1) + physicalEndKey := make([]byte, apiV3KeyspacePrefixLen) + prefixVal := binary.BigEndian.Uint64(physicalPrefix) + binary.BigEndian.PutUint64(physicalEndKey, prefixVal+1) keyspaceMeta := &keyspacepb.KeyspaceMeta{ Name: BuildKeyspaceName(keyspaceName), @@ -65,15 +68,121 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string } base := &codecV2{ apiVersion: kvrpcpb.APIVersion_V3, - prefix: prefix, - endKey: endKey, memCodec: &memComparableCodec{}, keyspaceMeta: keyspaceMeta, } base.reqPool.New = func() any { return &tikvrpc.Request{} } - return &codecV3{codecV2: base}, nil + return &codecV3{codecV2: base, physicalPrefix: physicalPrefix, physicalEndKey: physicalEndKey}, nil } func (c *codecV3) DecodeResponse(req *tikvrpc.Request, resp *tikvrpc.Response) (*tikvrpc.Response, error) { return c.codecV2.DecodeResponse(req, resp) } + +func (c *codecV3) GetKeyspace() []byte { + return c.physicalPrefix +} + +func (c *codecV3) EncodeRegionKey(key []byte) []byte { + return c.memCodec.encodeKey(c.encodePhysicalKey(key)) +} + +func (c *codecV3) DecodeRegionKey(encodedKey []byte) ([]byte, error) { + physicalKey, err := c.memCodec.decodeKey(encodedKey) + if err != nil { + return nil, err + } + return c.decodePhysicalKey(physicalKey) +} + +func (c *codecV3) EncodeRegionRange(start, end []byte) ([]byte, []byte) { + encodedStart := c.memCodec.encodeKey(c.encodePhysicalKey(start)) + encodedEnd := c.physicalEndKey + if len(end) > 0 { + encodedEnd = c.encodePhysicalKey(end) + } + encodedEnd = c.memCodec.encodeKey(encodedEnd) + return encodedStart, encodedEnd +} + +func (c *codecV3) DecodeRegionRange(encodedStart, encodedEnd []byte) ([]byte, []byte, error) { + var err error + if len(encodedStart) != 0 { + encodedStart, err = c.memCodec.decodeKey(encodedStart) + if err != nil { + return nil, nil, err + } + } + if len(encodedEnd) != 0 { + encodedEnd, err = c.memCodec.decodeKey(encodedEnd) + if err != nil { + return nil, nil, err + } + } + return c.decodePhysicalRange(encodedStart, encodedEnd) +} + +func (c *codecV3) DecodeBucketKeys(keys [][]byte) ([][]byte, error) { + ks := make([][]byte, 0, len(keys)) + for i, key := range keys { + var ( + k []byte + err error + ) + if len(key) > 0 { + k, err = c.memCodec.decodeKey(key) + } + if err != nil { + return nil, err + } + + if i == 0 && bytes.Compare(k, c.physicalPrefix) < 0 { + ks = append(ks, []byte{}) + } else if i == len(keys)-1 && (len(k) == 0 || bytes.Compare(k, c.physicalEndKey) >= 0) { + ks = append(ks, []byte{}) + } else if bytes.HasPrefix(k, c.physicalPrefix) { + raw := k[len(c.physicalPrefix):] + if len(raw) == 0 && len(ks) > 0 && len(ks[0]) == 0 { + continue + } + ks = append(ks, raw) + } + } + return ks, nil +} + +func (c *codecV3) encodePhysicalKey(key []byte) []byte { + if bytes.HasPrefix(key, c.physicalPrefix) { + return key + } + encoded := make([]byte, 0, len(c.physicalPrefix)+len(key)) + encoded = append(encoded, c.physicalPrefix...) + encoded = append(encoded, key...) + return encoded +} + +func (c *codecV3) decodePhysicalRange(encodedStart, encodedEnd []byte) (start []byte, end []byte, err error) { + if bytes.Compare(encodedStart, c.physicalEndKey) >= 0 || + (len(encodedEnd) > 0 && bytes.Compare(encodedEnd, c.physicalPrefix) <= 0) { + return nil, nil, errors.WithStack(errKeyOutOfBound) + } + + start, end = []byte{}, []byte{} + if bytes.HasPrefix(encodedStart, c.physicalPrefix) { + start = encodedStart[len(c.physicalPrefix):] + } + if bytes.HasPrefix(encodedEnd, c.physicalPrefix) { + end = encodedEnd[len(c.physicalPrefix):] + } + return start, end, nil +} + +func (c *codecV3) decodePhysicalKey(encodedKey []byte) ([]byte, error) { + if len(encodedKey) == 0 { + return nil, nil + } + if !bytes.HasPrefix(encodedKey, c.physicalPrefix) { + return nil, errKeyOutOfBound + } + return encodedKey[len(c.physicalPrefix):], nil +} diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index 7530aa725d..0d7d6933ca 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -20,8 +20,8 @@ func TestNewCodecV3(t *testing.T) { v3Codec := codec.(*codecV3) re.Equal(kvrpcpb.APIVersion_V3, v3Codec.GetAPIVersion()) - re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 7}, v3Codec.prefix) - re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 8}, v3Codec.endKey) + re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 7}, v3Codec.physicalPrefix) + re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 8}, v3Codec.physicalEndKey) re.Equal(identity, v3Codec.GetKeyspaceMeta().GetKeyspaceIdentity()) re.Equal(KeyspaceID(identity.KeyspaceId), v3Codec.GetKeyspaceID()) } @@ -42,7 +42,7 @@ func TestNewCodecV3InvalidIdentity(t *testing.T) { re.Error(err) } -func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { +func TestCodecV3EncodeRequestUsesLogicalKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} codec, err := NewCodecV3(ModeTxn, identity, "ks") @@ -58,33 +58,31 @@ func TestCodecV3EncodeRequestUsesPhysicalKeys(t *testing.T) { re.NoError(err) defer codec.(*codecV3).reqPool.Put(encoded) - re.Equal([]byte{'x', 0, 0, 0, 7, 0, 0, 9, 'k', 'e', 'y'}, encoded.Get().Key) + re.Equal([]byte("key"), encoded.Get().Key) re.Equal(kvrpcpb.APIVersion_V3, encoded.ApiVersion) re.Equal("ks", encoded.KeyspaceName) re.Equal(identity, encoded.GetKeyspaceIdentity()) } -func TestCodecV3EncodeRequestDoesNotDoubleEncodePhysicalKeys(t *testing.T) { +func TestCodecV3EncodeRequestDoesNotEncodeScanBounds(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{NamespaceId: 7, KeyspaceId: 9} codec, err := NewCodecV3(ModeTxn, identity, "ks") re.NoError(err) - physicalStart := codec.EncodeKey([]byte("a")) - physicalEnd := codec.EncodeKey([]byte("b")) req := &tikvrpc.Request{ Type: tikvrpc.CmdScan, Req: &kvrpcpb.ScanRequest{ - StartKey: physicalStart, - EndKey: physicalEnd, + StartKey: []byte("a"), + EndKey: []byte("b"), }, } encoded, err := codec.EncodeRequest(req) re.NoError(err) defer codec.(*codecV3).reqPool.Put(encoded) - re.Equal(physicalStart, encoded.Scan().StartKey) - re.Equal(physicalEnd, encoded.Scan().EndKey) + re.Equal([]byte("a"), encoded.Scan().StartKey) + re.Equal([]byte("b"), encoded.Scan().EndKey) } func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { @@ -96,11 +94,40 @@ func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { codec, err := NewCodecV3(ModeTxn, identity, "ks") re.NoError(err) - physicalKey := codec.EncodeKey([]byte("key")) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'k', 'e', 'y'}, physicalKey) + re.Equal([]byte("key"), codec.EncodeKey([]byte("key"))) regionKey := codec.EncodeRegionKey([]byte("key")) + physicalKey, err := codec.(*codecV3).memCodec.decodeKey(regionKey) + re.NoError(err) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'k', 'e', 'y'}, physicalKey) + decodedKey, err := codec.DecodeRegionKey(regionKey) re.NoError(err) re.Equal([]byte("key"), decodedKey) } + +func TestCodecV3RegionRangeUsesPhysicalPrefix(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + v3Codec := codec.(*codecV3) + + encodedStart, encodedEnd := codec.EncodeRegionRange([]byte("a"), nil) + + physicalStart, err := v3Codec.memCodec.decodeKey(encodedStart) + re.NoError(err) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'a'}, physicalStart) + + physicalEnd, err := v3Codec.memCodec.decodeKey(encodedEnd) + re.NoError(err) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 8}, physicalEnd) + + decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) + re.NoError(err) + re.Equal([]byte("a"), decodedStart) + re.Empty(decodedEnd) +} From 4a85e9054ca3cc36624f2df29038f96f1b2b8d6e Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 20:42:20 +0800 Subject: [PATCH 14/21] apicodec: keep API V3 region keys logical --- internal/apicodec/codec_v3.go | 100 ++++++----------------------- internal/apicodec/codec_v3_test.go | 17 ++--- 2 files changed, 26 insertions(+), 91 deletions(-) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index 29538cb7f3..78fc34226e 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -1,7 +1,6 @@ package apicodec import ( - "bytes" "encoding/binary" "github.com/pingcap/kvproto/pkg/apipb" @@ -20,8 +19,9 @@ func checkV3Key(b []byte) error { return nil } -// codecV3 uses API V3 request context for TiKV RPCs and API V3 physical -// prefixes for PD region lookups. +// codecV3 uses API V3 request context for TiKV RPCs. PD region lookups also +// use logical keys because the wrapped PD client is already scoped by +// KeyspaceIdentity. type codecV3 struct { *codecV2 physicalPrefix []byte @@ -84,105 +84,43 @@ func (c *codecV3) GetKeyspace() []byte { } func (c *codecV3) EncodeRegionKey(key []byte) []byte { - return c.memCodec.encodeKey(c.encodePhysicalKey(key)) + return c.memCodec.encodeKey(key) } func (c *codecV3) DecodeRegionKey(encodedKey []byte) ([]byte, error) { - physicalKey, err := c.memCodec.decodeKey(encodedKey) - if err != nil { - return nil, err + if len(encodedKey) == 0 { + return encodedKey, nil } - return c.decodePhysicalKey(physicalKey) + return c.memCodec.decodeKey(encodedKey) } func (c *codecV3) EncodeRegionRange(start, end []byte) ([]byte, []byte) { - encodedStart := c.memCodec.encodeKey(c.encodePhysicalKey(start)) - encodedEnd := c.physicalEndKey if len(end) > 0 { - encodedEnd = c.encodePhysicalKey(end) + return c.EncodeRegionKey(start), c.EncodeRegionKey(end) } - encodedEnd = c.memCodec.encodeKey(encodedEnd) - return encodedStart, encodedEnd + return c.EncodeRegionKey(start), end } func (c *codecV3) DecodeRegionRange(encodedStart, encodedEnd []byte) ([]byte, []byte, error) { - var err error - if len(encodedStart) != 0 { - encodedStart, err = c.memCodec.decodeKey(encodedStart) - if err != nil { - return nil, nil, err - } + start, err := c.DecodeRegionKey(encodedStart) + if err != nil { + return nil, nil, err } - if len(encodedEnd) != 0 { - encodedEnd, err = c.memCodec.decodeKey(encodedEnd) - if err != nil { - return nil, nil, err - } + end, err := c.DecodeRegionKey(encodedEnd) + if err != nil { + return nil, nil, err } - return c.decodePhysicalRange(encodedStart, encodedEnd) + return start, end, nil } func (c *codecV3) DecodeBucketKeys(keys [][]byte) ([][]byte, error) { ks := make([][]byte, 0, len(keys)) - for i, key := range keys { - var ( - k []byte - err error - ) - if len(key) > 0 { - k, err = c.memCodec.decodeKey(key) - } + for _, key := range keys { + k, err := c.DecodeRegionKey(key) if err != nil { return nil, err } - - if i == 0 && bytes.Compare(k, c.physicalPrefix) < 0 { - ks = append(ks, []byte{}) - } else if i == len(keys)-1 && (len(k) == 0 || bytes.Compare(k, c.physicalEndKey) >= 0) { - ks = append(ks, []byte{}) - } else if bytes.HasPrefix(k, c.physicalPrefix) { - raw := k[len(c.physicalPrefix):] - if len(raw) == 0 && len(ks) > 0 && len(ks[0]) == 0 { - continue - } - ks = append(ks, raw) - } + ks = append(ks, k) } return ks, nil } - -func (c *codecV3) encodePhysicalKey(key []byte) []byte { - if bytes.HasPrefix(key, c.physicalPrefix) { - return key - } - encoded := make([]byte, 0, len(c.physicalPrefix)+len(key)) - encoded = append(encoded, c.physicalPrefix...) - encoded = append(encoded, key...) - return encoded -} - -func (c *codecV3) decodePhysicalRange(encodedStart, encodedEnd []byte) (start []byte, end []byte, err error) { - if bytes.Compare(encodedStart, c.physicalEndKey) >= 0 || - (len(encodedEnd) > 0 && bytes.Compare(encodedEnd, c.physicalPrefix) <= 0) { - return nil, nil, errors.WithStack(errKeyOutOfBound) - } - - start, end = []byte{}, []byte{} - if bytes.HasPrefix(encodedStart, c.physicalPrefix) { - start = encodedStart[len(c.physicalPrefix):] - } - if bytes.HasPrefix(encodedEnd, c.physicalPrefix) { - end = encodedEnd[len(c.physicalPrefix):] - } - return start, end, nil -} - -func (c *codecV3) decodePhysicalKey(encodedKey []byte) ([]byte, error) { - if len(encodedKey) == 0 { - return nil, nil - } - if !bytes.HasPrefix(encodedKey, c.physicalPrefix) { - return nil, errKeyOutOfBound - } - return encodedKey[len(c.physicalPrefix):], nil -} diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index 0d7d6933ca..3456875d2a 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -85,7 +85,7 @@ func TestCodecV3EncodeRequestDoesNotEncodeScanBounds(t *testing.T) { re.Equal([]byte("b"), encoded.Scan().EndKey) } -func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { +func TestCodecV3RegionKeysUseLogicalKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{ NamespaceId: 0x01020304, @@ -97,16 +97,16 @@ func TestCodecV3RegionKeysUsePhysicalPrefix(t *testing.T) { re.Equal([]byte("key"), codec.EncodeKey([]byte("key"))) regionKey := codec.EncodeRegionKey([]byte("key")) - physicalKey, err := codec.(*codecV3).memCodec.decodeKey(regionKey) + logicalKey, err := codec.(*codecV3).memCodec.decodeKey(regionKey) re.NoError(err) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'k', 'e', 'y'}, physicalKey) + re.Equal([]byte("key"), logicalKey) decodedKey, err := codec.DecodeRegionKey(regionKey) re.NoError(err) re.Equal([]byte("key"), decodedKey) } -func TestCodecV3RegionRangeUsesPhysicalPrefix(t *testing.T) { +func TestCodecV3RegionRangeUsesLogicalKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{ NamespaceId: 0x01020304, @@ -118,13 +118,10 @@ func TestCodecV3RegionRangeUsesPhysicalPrefix(t *testing.T) { encodedStart, encodedEnd := codec.EncodeRegionRange([]byte("a"), nil) - physicalStart, err := v3Codec.memCodec.decodeKey(encodedStart) + logicalStart, err := v3Codec.memCodec.decodeKey(encodedStart) re.NoError(err) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'a'}, physicalStart) - - physicalEnd, err := v3Codec.memCodec.decodeKey(encodedEnd) - re.NoError(err) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 8}, physicalEnd) + re.Equal([]byte("a"), logicalStart) + re.Empty(encodedEnd) decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) re.NoError(err) From 00b316e806f1e2e6a0f974eadbea626f294af3e8 Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 21:18:45 +0800 Subject: [PATCH 15/21] apicodec: bound API V3 region scans to keyspace --- internal/apicodec/codec_v3.go | 93 ++++++++++++++++++++++++++---- internal/apicodec/codec_v3_test.go | 54 ++++++++++++++--- 2 files changed, 128 insertions(+), 19 deletions(-) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index 78fc34226e..0044a8bffe 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -1,6 +1,7 @@ package apicodec import ( + "bytes" "encoding/binary" "github.com/pingcap/kvproto/pkg/apipb" @@ -19,9 +20,10 @@ func checkV3Key(b []byte) error { return nil } -// codecV3 uses API V3 request context for TiKV RPCs. PD region lookups also -// use logical keys because the wrapped PD client is already scoped by -// KeyspaceIdentity. +// codecV3 uses API V3 request context for TiKV RPCs. TiKV RPC keys stay +// logical and are scoped by the request context, while PD region lookups use +// the physical keyspace range so the region cache cannot cross into another +// API V3 keyspace. type codecV3 struct { *codecV2 physicalPrefix []byte @@ -84,32 +86,34 @@ func (c *codecV3) GetKeyspace() []byte { } func (c *codecV3) EncodeRegionKey(key []byte) []byte { - return c.memCodec.encodeKey(key) + return c.memCodec.encodeKey(c.encodePhysicalKey(key)) } func (c *codecV3) DecodeRegionKey(encodedKey []byte) ([]byte, error) { if len(encodedKey) == 0 { return encodedKey, nil } - return c.memCodec.decodeKey(encodedKey) + key, err := c.memCodec.decodeKey(encodedKey) + if err != nil { + return nil, err + } + return c.decodeRegionKey(key) } func (c *codecV3) EncodeRegionRange(start, end []byte) ([]byte, []byte) { + encodedEnd := c.physicalEndKey if len(end) > 0 { - return c.EncodeRegionKey(start), c.EncodeRegionKey(end) + encodedEnd = c.encodePhysicalKey(end) } - return c.EncodeRegionKey(start), end + return c.memCodec.encodeKey(c.encodePhysicalKey(start)), c.memCodec.encodeKey(encodedEnd) } func (c *codecV3) DecodeRegionRange(encodedStart, encodedEnd []byte) ([]byte, []byte, error) { - start, err := c.DecodeRegionKey(encodedStart) - if err != nil { - return nil, nil, err - } - end, err := c.DecodeRegionKey(encodedEnd) + start, err := c.decodeRegionStart(encodedStart) if err != nil { return nil, nil, err } + end, err := c.decodeRegionEnd(encodedEnd) return start, end, nil } @@ -124,3 +128,68 @@ func (c *codecV3) DecodeBucketKeys(keys [][]byte) ([][]byte, error) { } return ks, nil } + +func (c *codecV3) encodePhysicalKey(key []byte) []byte { + if bytes.HasPrefix(key, c.physicalPrefix) { + return key + } + encoded := make([]byte, 0, len(c.physicalPrefix)+len(key)) + encoded = append(encoded, c.physicalPrefix...) + encoded = append(encoded, key...) + return encoded +} + +func (c *codecV3) decodeRegionStart(encodedStart []byte) ([]byte, error) { + if len(encodedStart) == 0 { + return []byte{}, nil + } + start, err := c.memCodec.decodeKey(encodedStart) + if err != nil { + return nil, err + } + if isV3PhysicalKey(start) { + if bytes.Compare(start, c.physicalEndKey) >= 0 { + return nil, errors.WithStack(errKeyOutOfBound) + } + if bytes.Compare(start, c.physicalPrefix) < 0 { + return []byte{}, nil + } + } + return c.decodeRegionKey(start) +} + +func (c *codecV3) decodeRegionEnd(encodedEnd []byte) ([]byte, error) { + if len(encodedEnd) == 0 { + return []byte{}, nil + } + end, err := c.memCodec.decodeKey(encodedEnd) + if err != nil { + return nil, err + } + if isV3PhysicalKey(end) { + if bytes.Compare(end, c.physicalEndKey) >= 0 { + return []byte{}, nil + } + if bytes.Compare(end, c.physicalPrefix) <= 0 { + return nil, errors.WithStack(errKeyOutOfBound) + } + } + return c.decodeRegionKey(end) +} + +func (c *codecV3) decodeRegionKey(key []byte) ([]byte, error) { + if len(key) == 0 { + return []byte{}, nil + } + if bytes.HasPrefix(key, c.physicalPrefix) { + return key[len(c.physicalPrefix):], nil + } + if isV3PhysicalKey(key) { + return nil, errors.WithStack(errKeyOutOfBound) + } + return key, nil +} + +func isV3PhysicalKey(key []byte) bool { + return len(key) >= apiV3KeyspacePrefixLen && (key[0] == RawModePrefix || key[0] == TxnModePrefix) +} diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index 3456875d2a..8e5aa0f9df 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -85,7 +85,7 @@ func TestCodecV3EncodeRequestDoesNotEncodeScanBounds(t *testing.T) { re.Equal([]byte("b"), encoded.Scan().EndKey) } -func TestCodecV3RegionKeysUseLogicalKeys(t *testing.T) { +func TestCodecV3RegionKeysUsePhysicalPDKeys(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{ NamespaceId: 0x01020304, @@ -97,16 +97,16 @@ func TestCodecV3RegionKeysUseLogicalKeys(t *testing.T) { re.Equal([]byte("key"), codec.EncodeKey([]byte("key"))) regionKey := codec.EncodeRegionKey([]byte("key")) - logicalKey, err := codec.(*codecV3).memCodec.decodeKey(regionKey) + physicalKey, err := codec.(*codecV3).memCodec.decodeKey(regionKey) re.NoError(err) - re.Equal([]byte("key"), logicalKey) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'k', 'e', 'y'}, physicalKey) decodedKey, err := codec.DecodeRegionKey(regionKey) re.NoError(err) re.Equal([]byte("key"), decodedKey) } -func TestCodecV3RegionRangeUsesLogicalKeys(t *testing.T) { +func TestCodecV3RegionRangeIsBoundedToPhysicalKeyspace(t *testing.T) { re := require.New(t) identity := &apipb.KeyspaceIdentity{ NamespaceId: 0x01020304, @@ -118,13 +118,53 @@ func TestCodecV3RegionRangeUsesLogicalKeys(t *testing.T) { encodedStart, encodedEnd := codec.EncodeRegionRange([]byte("a"), nil) - logicalStart, err := v3Codec.memCodec.decodeKey(encodedStart) + physicalStart, err := v3Codec.memCodec.decodeKey(encodedStart) re.NoError(err) - re.Equal([]byte("a"), logicalStart) - re.Empty(encodedEnd) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'a'}, physicalStart) + physicalEnd, err := v3Codec.memCodec.decodeKey(encodedEnd) + re.NoError(err) + re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 8}, physicalEnd) decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) re.NoError(err) re.Equal([]byte("a"), decodedStart) re.Empty(decodedEnd) } + +func TestCodecV3DecodeRegionRangeAcceptsScopedLogicalKeys(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + v3Codec := codec.(*codecV3) + + encodedStart := v3Codec.memCodec.encodeKey([]byte("a")) + encodedEnd := v3Codec.memCodec.encodeKey([]byte("b")) + + decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) + re.NoError(err) + re.Equal([]byte("a"), decodedStart) + re.Equal([]byte("b"), decodedEnd) +} + +func TestCodecV3DecodeRegionRangeClampsPhysicalBounds(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + v3Codec := codec.(*codecV3) + + encodedStart := v3Codec.memCodec.encodeKey([]byte{'x', 1, 2, 3, 4, 0, 0, 0}) + encodedEnd := v3Codec.memCodec.encodeKey([]byte{'x', 1, 2, 3, 4, 5, 6, 8}) + + decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) + re.NoError(err) + re.Empty(decodedStart) + re.Empty(decodedEnd) +} From 875a685d2ebdc62dca694fa3b49582f855c136ff Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 21:49:20 +0800 Subject: [PATCH 16/21] apicodec: fix API V3 physical keyspace prefix --- internal/apicodec/codec_test.go | 10 +++++----- internal/apicodec/codec_v3.go | 12 +++++++----- internal/apicodec/codec_v3_test.go | 31 +++++++++++++++++++++++------- 3 files changed, 36 insertions(+), 17 deletions(-) diff --git a/internal/apicodec/codec_test.go b/internal/apicodec/codec_test.go index 5f07a9e4d2..ae61577e42 100644 --- a/internal/apicodec/codec_test.go +++ b/internal/apicodec/codec_test.go @@ -50,15 +50,15 @@ func TestDecodeKey(t *testing.T) { pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 8, 9}, kvrpcpb.APIVersion_V3) assert.Nil(t, err) - assert.Equal(t, []byte{'x', 1, 2, 3, 4, 5, 6, 7}, pfx) - assert.Equal(t, []byte{8, 9}, key) + assert.Equal(t, []byte{'x', 1, 2, 3}, pfx) + assert.Equal(t, []byte{4, 5, 6, 7, 8, 9}, key) - pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3, 4, 5, 6, 7}, kvrpcpb.APIVersion_V3) + pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3}, kvrpcpb.APIVersion_V3) assert.Nil(t, err) - assert.Equal(t, []byte{'x', 1, 2, 3, 4, 5, 6, 7}, pfx) + assert.Equal(t, []byte{'x', 1, 2, 3}, pfx) assert.Empty(t, key) - pfx, key, err = DecodeKey([]byte{'x', 1, 2, 3, 4, 5, 6}, kvrpcpb.APIVersion_V3) + pfx, key, err = DecodeKey([]byte{'x', 1, 2}, kvrpcpb.APIVersion_V3) assert.NotNil(t, err) assert.Empty(t, pfx) assert.Empty(t, key) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index 0044a8bffe..e76e1bae0b 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -11,7 +11,7 @@ import ( "github.com/tikv/client-go/v2/tikvrpc" ) -const apiV3KeyspacePrefixLen = 8 +const apiV3KeyspacePrefixLen = keyspacePrefixLen func checkV3Key(b []byte) error { if len(b) < apiV3KeyspacePrefixLen || (b[0] != RawModePrefix && b[0] != TxnModePrefix) { @@ -53,16 +53,15 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string default: return nil, errors.Errorf("unknown mode") } - binary.BigEndian.PutUint32(physicalPrefix[1:5], namespaceID) keyspaceIDBytes, err := getIDByte(keyspaceID) if err != nil { return nil, err } - copy(physicalPrefix[5:], keyspaceIDBytes) + copy(physicalPrefix[1:], keyspaceIDBytes) physicalEndKey := make([]byte, apiV3KeyspacePrefixLen) - prefixVal := binary.BigEndian.Uint64(physicalPrefix) - binary.BigEndian.PutUint64(physicalEndKey, prefixVal+1) + prefixVal := binary.BigEndian.Uint32(physicalPrefix) + binary.BigEndian.PutUint32(physicalEndKey, prefixVal+1) keyspaceMeta := &keyspacepb.KeyspaceMeta{ Name: BuildKeyspaceName(keyspaceName), @@ -114,6 +113,9 @@ func (c *codecV3) DecodeRegionRange(encodedStart, encodedEnd []byte) ([]byte, [] return nil, nil, err } end, err := c.decodeRegionEnd(encodedEnd) + if err != nil { + return nil, nil, err + } return start, end, nil } diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index 8e5aa0f9df..3ec3c18583 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -20,8 +20,8 @@ func TestNewCodecV3(t *testing.T) { v3Codec := codec.(*codecV3) re.Equal(kvrpcpb.APIVersion_V3, v3Codec.GetAPIVersion()) - re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 7}, v3Codec.physicalPrefix) - re.Equal([]byte{'r', 1, 2, 3, 4, 5, 6, 8}, v3Codec.physicalEndKey) + re.Equal([]byte{'r', 5, 6, 7}, v3Codec.physicalPrefix) + re.Equal([]byte{'r', 5, 6, 8}, v3Codec.physicalEndKey) re.Equal(identity, v3Codec.GetKeyspaceMeta().GetKeyspaceIdentity()) re.Equal(KeyspaceID(identity.KeyspaceId), v3Codec.GetKeyspaceID()) } @@ -99,7 +99,7 @@ func TestCodecV3RegionKeysUsePhysicalPDKeys(t *testing.T) { regionKey := codec.EncodeRegionKey([]byte("key")) physicalKey, err := codec.(*codecV3).memCodec.decodeKey(regionKey) re.NoError(err) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'k', 'e', 'y'}, physicalKey) + re.Equal([]byte{'x', 5, 6, 7, 'k', 'e', 'y'}, physicalKey) decodedKey, err := codec.DecodeRegionKey(regionKey) re.NoError(err) @@ -120,10 +120,10 @@ func TestCodecV3RegionRangeIsBoundedToPhysicalKeyspace(t *testing.T) { physicalStart, err := v3Codec.memCodec.decodeKey(encodedStart) re.NoError(err) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 7, 'a'}, physicalStart) + re.Equal([]byte{'x', 5, 6, 7, 'a'}, physicalStart) physicalEnd, err := v3Codec.memCodec.decodeKey(encodedEnd) re.NoError(err) - re.Equal([]byte{'x', 1, 2, 3, 4, 5, 6, 8}, physicalEnd) + re.Equal([]byte{'x', 5, 6, 8}, physicalEnd) decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) re.NoError(err) @@ -160,11 +160,28 @@ func TestCodecV3DecodeRegionRangeClampsPhysicalBounds(t *testing.T) { re.NoError(err) v3Codec := codec.(*codecV3) - encodedStart := v3Codec.memCodec.encodeKey([]byte{'x', 1, 2, 3, 4, 0, 0, 0}) - encodedEnd := v3Codec.memCodec.encodeKey([]byte{'x', 1, 2, 3, 4, 5, 6, 8}) + encodedStart := v3Codec.memCodec.encodeKey([]byte{'x', 5, 6, 6}) + encodedEnd := v3Codec.memCodec.encodeKey([]byte{'x', 5, 6, 8}) decodedStart, decodedEnd, err := codec.DecodeRegionRange(encodedStart, encodedEnd) re.NoError(err) re.Empty(decodedStart) re.Empty(decodedEnd) } + +func TestCodecV3DecodeRegionRangeRejectsOtherKeyspaceEnd(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + v3Codec := codec.(*codecV3) + + encodedStart := v3Codec.memCodec.encodeKey([]byte{'x', 5, 6, 7, 'a'}) + encodedEnd := v3Codec.memCodec.encodeKey([]byte{'x', 5, 6, 6, 'z'}) + + _, _, err = codec.DecodeRegionRange(encodedStart, encodedEnd) + re.Error(err) +} From 73ea7429936899289d0daca6cc91cba849779122 Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 8 Jul 2026 22:43:44 +0800 Subject: [PATCH 17/21] apicodec: clamp API V3 bucket keys to keyspace --- internal/apicodec/codec_v3.go | 32 ++++++++++++++++++++++++++-- internal/apicodec/codec_v3_test.go | 34 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index e76e1bae0b..5ecef28357 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -121,11 +121,39 @@ func (c *codecV3) DecodeRegionRange(encodedStart, encodedEnd []byte) ([]byte, [] func (c *codecV3) DecodeBucketKeys(keys [][]byte) ([][]byte, error) { ks := make([][]byte, 0, len(keys)) - for _, key := range keys { - k, err := c.DecodeRegionKey(key) + for i, key := range keys { + var ( + k []byte + err error + ) + if len(key) > 0 { + k, err = c.memCodec.decodeKey(key) + } if err != nil { return nil, err } + if isV3PhysicalKey(k) { + if i == 0 && bytes.Compare(k, c.physicalPrefix) < 0 { + ks = append(ks, []byte{}) + } else if i == len(keys)-1 && (len(k) == 0 || bytes.Compare(k, c.physicalEndKey) >= 0) { + ks = append(ks, []byte{}) + } else if bytes.HasPrefix(k, c.physicalPrefix) { + raw := k[len(c.physicalPrefix):] + if len(raw) == 0 && len(ks) > 0 && len(ks[0]) == 0 { + continue + } + ks = append(ks, raw) + } + continue + } + if len(k) == 0 && i == len(keys)-1 { + ks = append(ks, []byte{}) + continue + } + if len(k) == 0 && i == 0 { + ks = append(ks, []byte{}) + continue + } ks = append(ks, k) } return ks, nil diff --git a/internal/apicodec/codec_v3_test.go b/internal/apicodec/codec_v3_test.go index 3ec3c18583..7938a00a06 100644 --- a/internal/apicodec/codec_v3_test.go +++ b/internal/apicodec/codec_v3_test.go @@ -185,3 +185,37 @@ func TestCodecV3DecodeRegionRangeRejectsOtherKeyspaceEnd(t *testing.T) { _, _, err = codec.DecodeRegionRange(encodedStart, encodedEnd) re.Error(err) } + +func TestCodecV3DecodeBucketKeysClampsPhysicalBounds(t *testing.T) { + re := require.New(t) + identity := &apipb.KeyspaceIdentity{ + NamespaceId: 0x01020304, + KeyspaceId: 0x050607, + } + codec, err := NewCodecV3(ModeTxn, identity, "ks") + re.NoError(err) + v3Codec := codec.(*codecV3) + + encodePhysical := func(key []byte) []byte { + return v3Codec.memCodec.encodeKey(key) + } + bucketKeys := [][]byte{ + encodePhysical([]byte{'x', 5, 6, 6, 'a'}), + codec.EncodeRegionKey([]byte{}), + codec.EncodeRegionKey([]byte("a")), + codec.EncodeRegionKey([]byte("b")), + codec.EncodeRegionKey([]byte("c")), + encodePhysical([]byte{'x', 5, 6, 8}), + encodePhysical([]byte{'x', 5, 6, 8, 'a'}), + } + + keys, err := codec.DecodeBucketKeys(bucketKeys) + re.NoError(err) + re.Equal([][]byte{ + {}, + []byte("a"), + []byte("b"), + []byte("c"), + {}, + }, keys) +} From f9223b85175146854c1ff107a0b0c1c3f8f891cf Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 15 Jul 2026 11:52:40 +0800 Subject: [PATCH 18/21] Update APIV3 PD client dependency Signed-off-by: disksing --- examples/gcworker/go.mod | 2 +- examples/rawkv/go.mod | 2 +- examples/txnkv/1pc_txn/go.mod | 2 +- examples/txnkv/async_commit/go.mod | 2 +- examples/txnkv/delete_range/go.mod | 2 +- examples/txnkv/go.mod | 2 +- examples/txnkv/pessimistic_txn/go.mod | 2 +- examples/txnkv/unsafedestoryrange/go.mod | 2 +- go.mod | 2 +- go.sum | 4 ++-- integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 8 ++++---- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/examples/gcworker/go.mod b/examples/gcworker/go.mod index 18680357f5..a7949d22f3 100644 --- a/examples/gcworker/go.mod +++ b/examples/gcworker/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/rawkv/go.mod b/examples/rawkv/go.mod index 4bd3ac5814..dbcfd58cfb 100644 --- a/examples/rawkv/go.mod +++ b/examples/rawkv/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/1pc_txn/go.mod b/examples/txnkv/1pc_txn/go.mod index a16c0001e3..aa0ed3e000 100644 --- a/examples/txnkv/1pc_txn/go.mod +++ b/examples/txnkv/1pc_txn/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/async_commit/go.mod b/examples/txnkv/async_commit/go.mod index 41041319ce..f3ff9ea458 100644 --- a/examples/txnkv/async_commit/go.mod +++ b/examples/txnkv/async_commit/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/delete_range/go.mod b/examples/txnkv/delete_range/go.mod index 518666a983..90431bd05d 100644 --- a/examples/txnkv/delete_range/go.mod +++ b/examples/txnkv/delete_range/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/go.mod b/examples/txnkv/go.mod index d5892c6da5..2c42ab105f 100644 --- a/examples/txnkv/go.mod +++ b/examples/txnkv/go.mod @@ -33,7 +33,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/pessimistic_txn/go.mod b/examples/txnkv/pessimistic_txn/go.mod index dc70552621..c25039280b 100644 --- a/examples/txnkv/pessimistic_txn/go.mod +++ b/examples/txnkv/pessimistic_txn/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/unsafedestoryrange/go.mod b/examples/txnkv/unsafedestoryrange/go.mod index 4ad876d45a..aedb3a31c1 100644 --- a/examples/txnkv/unsafedestoryrange/go.mod +++ b/examples/txnkv/unsafedestoryrange/go.mod @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260708034606-a8622f626f6f // indirect + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/go.mod b/go.mod index 776a9b9260..14c0788851 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260708075407-4e05b9d2c2d3 + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index 4d015c87a7..8806ce4a47 100644 --- a/go.sum +++ b/go.sum @@ -115,8 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260708075407-4e05b9d2c2d3 h1:OoBvgoeWmdNEXtS+eOlhysz/OvhA4GS0OdPVhTXteGA= -github.com/tikv/pd/client v0.0.0-20260708075407-4e05b9d2c2d3/go.mod h1:3/Bu91CJONgkDA+Y0v/cnbROSJnu5tQ09vv7JGybUBA= +github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 h1:W4EwT2HXDX4oulKRWMp9Ek4q8278+vmSFgVKkJR4bKQ= +github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3/go.mod h1:EDvtx6xmvyucoJmqY80+t+BpDyGGTrq1PMwo/iDqTc8= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index e831832911..656853893f 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -7,7 +7,7 @@ require ( github.com/ninedraft/israce v0.0.3 github.com/pingcap/errors v0.11.5-0.20260508054701-306e305bcf41 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 - github.com/pingcap/kvproto v0.0.0-20260622063236-b41e86365ce0 + github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff github.com/pingcap/tidb v1.1.0-beta.0.20260708073538-b6db59b2742a github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.23.0 @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/tidwall/gjson v1.14.4 github.com/tikv/client-go/v2 v2.0.8-0.20260617030124-661db4f5f4e8 - github.com/tikv/pd/client v0.0.0-20260708075407-4e05b9d2c2d3 + github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 go.uber.org/goleak v1.3.0 google.golang.org/grpc v1.79.3 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 548de45005..d575344e70 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -1456,8 +1456,8 @@ github.com/pingcap/fn v1.0.0/go.mod h1:u9WZ1ZiOD1RpNhcI42RucFh/lBuzTu6rw88a+oF2Z github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20241113043844-e1fa7ea8c302/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= -github.com/pingcap/kvproto v0.0.0-20260622063236-b41e86365ce0 h1:MalBpLjhK/cS9ndCoSAg2C7aBzVojAqFVfzTKmuy0ho= -github.com/pingcap/kvproto v0.0.0-20260622063236-b41e86365ce0/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff h1:kt7e4oQ9e1s2nMR7UkBJpmxrhi59vRrOE5kNY6TMRks= +github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9 h1:qG9BSvlWFEE5otQGamuWedx9LRm0nrHvsQRQiW8SxEs= @@ -1598,8 +1598,8 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tikv/pd/client v0.0.0-20260708075407-4e05b9d2c2d3 h1:OoBvgoeWmdNEXtS+eOlhysz/OvhA4GS0OdPVhTXteGA= -github.com/tikv/pd/client v0.0.0-20260708075407-4e05b9d2c2d3/go.mod h1:3/Bu91CJONgkDA+Y0v/cnbROSJnu5tQ09vv7JGybUBA= +github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 h1:W4EwT2HXDX4oulKRWMp9Ek4q8278+vmSFgVKkJR4bKQ= +github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3/go.mod h1:EDvtx6xmvyucoJmqY80+t+BpDyGGTrq1PMwo/iDqTc8= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= From 0bce5bed71c2f85e0cff9c2c44ea1ee217d0bced Mon Sep 17 00:00:00 2001 From: disksing Date: Mon, 20 Jul 2026 11:58:56 +0800 Subject: [PATCH 19/21] *: update kvproto oneof dependencies Signed-off-by: disksing --- examples/gcworker/go.mod | 4 ++-- examples/rawkv/go.mod | 4 ++-- examples/txnkv/1pc_txn/go.mod | 4 ++-- examples/txnkv/async_commit/go.mod | 4 ++-- examples/txnkv/delete_range/go.mod | 4 ++-- examples/txnkv/go.mod | 4 ++-- examples/txnkv/pessimistic_txn/go.mod | 4 ++-- examples/txnkv/unsafedestoryrange/go.mod | 4 ++-- go.mod | 4 ++-- go.sum | 8 ++++---- integration_tests/gc_test.go | 2 +- integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 8 ++++---- internal/apicodec/codec_v2_test.go | 4 ++-- internal/apicodec/codec_v3.go | 4 ++-- 15 files changed, 33 insertions(+), 33 deletions(-) diff --git a/examples/gcworker/go.mod b/examples/gcworker/go.mod index a7949d22f3..4c7430142c 100644 --- a/examples/gcworker/go.mod +++ b/examples/gcworker/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/rawkv/go.mod b/examples/rawkv/go.mod index dbcfd58cfb..feedb91c1c 100644 --- a/examples/rawkv/go.mod +++ b/examples/rawkv/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/1pc_txn/go.mod b/examples/txnkv/1pc_txn/go.mod index aa0ed3e000..26a6d8c8ec 100644 --- a/examples/txnkv/1pc_txn/go.mod +++ b/examples/txnkv/1pc_txn/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/async_commit/go.mod b/examples/txnkv/async_commit/go.mod index f3ff9ea458..e17c1a4823 100644 --- a/examples/txnkv/async_commit/go.mod +++ b/examples/txnkv/async_commit/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/delete_range/go.mod b/examples/txnkv/delete_range/go.mod index 90431bd05d..58bba02118 100644 --- a/examples/txnkv/delete_range/go.mod +++ b/examples/txnkv/delete_range/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/go.mod b/examples/txnkv/go.mod index 2c42ab105f..206bbef3b3 100644 --- a/examples/txnkv/go.mod +++ b/examples/txnkv/go.mod @@ -3,7 +3,7 @@ module txnkv go 1.25.10 require ( - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 github.com/tikv/client-go/v2 v2.0.0 ) @@ -33,7 +33,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/pessimistic_txn/go.mod b/examples/txnkv/pessimistic_txn/go.mod index c25039280b..671f8da45c 100644 --- a/examples/txnkv/pessimistic_txn/go.mod +++ b/examples/txnkv/pessimistic_txn/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/unsafedestoryrange/go.mod b/examples/txnkv/unsafedestoryrange/go.mod index aedb3a31c1..0be421bcef 100644 --- a/examples/txnkv/unsafedestoryrange/go.mod +++ b/examples/txnkv/unsafedestoryrange/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff // indirect + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 // indirect + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/go.mod b/go.mod index 14c0788851..d7c4b9b0ec 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index 8806ce4a47..c1812fd614 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 h1:tdMsjOqUR7YXH github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86/go.mod h1:exzhVYca3WRtd6gclGNErRWb1qEgff3LYta0LvRmON4= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= -github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff h1:kt7e4oQ9e1s2nMR7UkBJpmxrhi59vRrOE5kNY6TMRks= -github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 h1:3YlDwVLfQ++7AkI3Y+AIuYvlNjaeateu8RvklEPzzBU= +github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -115,8 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 h1:W4EwT2HXDX4oulKRWMp9Ek4q8278+vmSFgVKkJR4bKQ= -github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3/go.mod h1:EDvtx6xmvyucoJmqY80+t+BpDyGGTrq1PMwo/iDqTc8= +github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 h1:vsDpmhJT+F042yD72mq7/ePTffjHKIkE5urhQ68O5oU= +github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638/go.mod h1:itKZp6SOG02D3szM4exut09U6NN0gmfJG7y4JxBae/o= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration_tests/gc_test.go b/integration_tests/gc_test.go index fdc9c0df9d..b4cf042ab0 100644 --- a/integration_tests/gc_test.go +++ b/integration_tests/gc_test.go @@ -179,7 +179,7 @@ func (s *testGCWithTiKVSuite) dropKeyspace(keyspaceMeta *keyspacepb.KeyspaceMeta re := s.Require() // Nil might be used to represent the null keyspace. if keyspaceMeta != nil { - _, err := s.globalPDCli.UpdateKeyspaceState(context.Background(), keyspaceMeta.Id, keyspacepb.KeyspaceState_ARCHIVED) + _, err := s.globalPDCli.UpdateKeyspaceState(context.Background(), keyspaceMeta.GetId(), keyspacepb.KeyspaceState_ARCHIVED) re.NoError(err) } } diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 656853893f..5d2b36572b 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -7,7 +7,7 @@ require ( github.com/ninedraft/israce v0.0.3 github.com/pingcap/errors v0.11.5-0.20260508054701-306e305bcf41 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 - github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff + github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 github.com/pingcap/tidb v1.1.0-beta.0.20260708073538-b6db59b2742a github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.23.0 @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/tidwall/gjson v1.14.4 github.com/tikv/client-go/v2 v2.0.8-0.20260617030124-661db4f5f4e8 - github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 + github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 go.uber.org/goleak v1.3.0 google.golang.org/grpc v1.79.3 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index d575344e70..8042bd1ad0 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -1456,8 +1456,8 @@ github.com/pingcap/fn v1.0.0/go.mod h1:u9WZ1ZiOD1RpNhcI42RucFh/lBuzTu6rw88a+oF2Z github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20241113043844-e1fa7ea8c302/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= -github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff h1:kt7e4oQ9e1s2nMR7UkBJpmxrhi59vRrOE5kNY6TMRks= -github.com/pingcap/kvproto v0.0.0-20260708034143-c3fb31ac93ff/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 h1:3YlDwVLfQ++7AkI3Y+AIuYvlNjaeateu8RvklEPzzBU= +github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9 h1:qG9BSvlWFEE5otQGamuWedx9LRm0nrHvsQRQiW8SxEs= @@ -1598,8 +1598,8 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3 h1:W4EwT2HXDX4oulKRWMp9Ek4q8278+vmSFgVKkJR4bKQ= -github.com/tikv/pd/client v0.0.0-20260715033522-0b8977b87ce3/go.mod h1:EDvtx6xmvyucoJmqY80+t+BpDyGGTrq1PMwo/iDqTc8= +github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 h1:vsDpmhJT+F042yD72mq7/ePTffjHKIkE5urhQ68O5oU= +github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638/go.mod h1:itKZp6SOG02D3szM4exut09U6NN0gmfJG7y4JxBae/o= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= diff --git a/internal/apicodec/codec_v2_test.go b/internal/apicodec/codec_v2_test.go index 45530235f4..c40a0fda10 100644 --- a/internal/apicodec/codec_v2_test.go +++ b/internal/apicodec/codec_v2_test.go @@ -42,7 +42,7 @@ func TestCodecV2(t *testing.T) { func (suite *testCodecV2Suite) SetupSuite() { testKeyspaceMeta := keyspacepb.KeyspaceMeta{ - Id: testKeyspaceID, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: testKeyspaceID}, } codec, err := NewCodecV2(ModeRaw, &testKeyspaceMeta) suite.NoError(err) @@ -289,7 +289,7 @@ func (suite *testCodecV2Suite) TestNewCodecV2() { } for _, testCase := range testCases { - keyspaceMeta := &keyspacepb.KeyspaceMeta{Id: testCase.keyspaceID} + keyspaceMeta := &keyspacepb.KeyspaceMeta{Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: testCase.keyspaceID}} if testCase.shouldErr { _, err := NewCodecV2(testCase.mode, keyspaceMeta) re.Error(err) diff --git a/internal/apicodec/codec_v3.go b/internal/apicodec/codec_v3.go index 5ecef28357..b4d3c87fdc 100644 --- a/internal/apicodec/codec_v3.go +++ b/internal/apicodec/codec_v3.go @@ -64,8 +64,8 @@ func NewCodecV3(mode Mode, identity *apipb.KeyspaceIdentity, keyspaceName string binary.BigEndian.PutUint32(physicalEndKey, prefixVal+1) keyspaceMeta := &keyspacepb.KeyspaceMeta{ - Name: BuildKeyspaceName(keyspaceName), - KeyspaceIdentity: identity, + Name: BuildKeyspaceName(keyspaceName), + Keyspace: &keyspacepb.KeyspaceMeta_KeyspaceIdentity{KeyspaceIdentity: identity}, } base := &codecV2{ apiVersion: kvrpcpb.APIVersion_V3, From 21361f264883e55944536a0ae6967d24999f157b Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 22 Jul 2026 22:38:20 +0800 Subject: [PATCH 20/21] *: update kvproto to latest apiv3 Signed-off-by: disksing --- examples/gcworker/go.mod | 4 ++-- examples/rawkv/go.mod | 4 ++-- examples/txnkv/1pc_txn/go.mod | 4 ++-- examples/txnkv/async_commit/go.mod | 4 ++-- examples/txnkv/delete_range/go.mod | 4 ++-- examples/txnkv/go.mod | 4 ++-- examples/txnkv/pessimistic_txn/go.mod | 4 ++-- examples/txnkv/unsafedestoryrange/go.mod | 4 ++-- go.mod | 4 ++-- go.sum | 8 ++++---- integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 8 ++++---- 12 files changed, 28 insertions(+), 28 deletions(-) diff --git a/examples/gcworker/go.mod b/examples/gcworker/go.mod index 4c7430142c..e239db4614 100644 --- a/examples/gcworker/go.mod +++ b/examples/gcworker/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/rawkv/go.mod b/examples/rawkv/go.mod index feedb91c1c..1c568b0037 100644 --- a/examples/rawkv/go.mod +++ b/examples/rawkv/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/1pc_txn/go.mod b/examples/txnkv/1pc_txn/go.mod index 26a6d8c8ec..dec5053683 100644 --- a/examples/txnkv/1pc_txn/go.mod +++ b/examples/txnkv/1pc_txn/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/async_commit/go.mod b/examples/txnkv/async_commit/go.mod index e17c1a4823..1ea5972566 100644 --- a/examples/txnkv/async_commit/go.mod +++ b/examples/txnkv/async_commit/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/delete_range/go.mod b/examples/txnkv/delete_range/go.mod index 58bba02118..7bc7827fd1 100644 --- a/examples/txnkv/delete_range/go.mod +++ b/examples/txnkv/delete_range/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/go.mod b/examples/txnkv/go.mod index 206bbef3b3..add78e3d3a 100644 --- a/examples/txnkv/go.mod +++ b/examples/txnkv/go.mod @@ -3,7 +3,7 @@ module txnkv go 1.25.10 require ( - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 github.com/tikv/client-go/v2 v2.0.0 ) @@ -33,7 +33,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/pessimistic_txn/go.mod b/examples/txnkv/pessimistic_txn/go.mod index 671f8da45c..6cb2b825d4 100644 --- a/examples/txnkv/pessimistic_txn/go.mod +++ b/examples/txnkv/pessimistic_txn/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/unsafedestoryrange/go.mod b/examples/txnkv/unsafedestoryrange/go.mod index 0be421bcef..0342d62fd5 100644 --- a/examples/txnkv/unsafedestoryrange/go.mod +++ b/examples/txnkv/unsafedestoryrange/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 // indirect + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 // indirect + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/go.mod b/go.mod index d7c4b9b0ec..19600774af 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index c1812fd614..7821bbb495 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 h1:tdMsjOqUR7YXH github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86/go.mod h1:exzhVYca3WRtd6gclGNErRWb1qEgff3LYta0LvRmON4= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= -github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 h1:3YlDwVLfQ++7AkI3Y+AIuYvlNjaeateu8RvklEPzzBU= -github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 h1:fYG7YB9ooFzVM7vKxXDs3QanNdj57yAMEdPZadeC64Q= +github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -115,8 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 h1:vsDpmhJT+F042yD72mq7/ePTffjHKIkE5urhQ68O5oU= -github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638/go.mod h1:itKZp6SOG02D3szM4exut09U6NN0gmfJG7y4JxBae/o= +github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe h1:P6JRsrlE1hUtbdOcAZV2abr4Kk46RQ/hGGj+h2AAbWA= +github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe/go.mod h1:P0NC6/0/euMCgYYFcxp1pfdIkpb1Xcz/fGsX7PNBVHk= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 5d2b36572b..b9e41949bb 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -7,7 +7,7 @@ require ( github.com/ninedraft/israce v0.0.3 github.com/pingcap/errors v0.11.5-0.20260508054701-306e305bcf41 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 - github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 + github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 github.com/pingcap/tidb v1.1.0-beta.0.20260708073538-b6db59b2742a github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.23.0 @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/tidwall/gjson v1.14.4 github.com/tikv/client-go/v2 v2.0.8-0.20260617030124-661db4f5f4e8 - github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 + github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe go.uber.org/goleak v1.3.0 google.golang.org/grpc v1.79.3 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index 8042bd1ad0..e4bf485269 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -1456,8 +1456,8 @@ github.com/pingcap/fn v1.0.0/go.mod h1:u9WZ1ZiOD1RpNhcI42RucFh/lBuzTu6rw88a+oF2Z github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20241113043844-e1fa7ea8c302/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= -github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5 h1:3YlDwVLfQ++7AkI3Y+AIuYvlNjaeateu8RvklEPzzBU= -github.com/pingcap/kvproto v0.0.0-20260720031225-fd32127adca5/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 h1:fYG7YB9ooFzVM7vKxXDs3QanNdj57yAMEdPZadeC64Q= +github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9 h1:qG9BSvlWFEE5otQGamuWedx9LRm0nrHvsQRQiW8SxEs= @@ -1598,8 +1598,8 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638 h1:vsDpmhJT+F042yD72mq7/ePTffjHKIkE5urhQ68O5oU= -github.com/tikv/pd/client v0.0.0-20260720035241-4a8a117d4638/go.mod h1:itKZp6SOG02D3szM4exut09U6NN0gmfJG7y4JxBae/o= +github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe h1:P6JRsrlE1hUtbdOcAZV2abr4Kk46RQ/hGGj+h2AAbWA= +github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe/go.mod h1:P0NC6/0/euMCgYYFcxp1pfdIkpb1Xcz/fGsX7PNBVHk= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= From fa37e52f0d3cae9d1e4626bfe387cad7087be914 Mon Sep 17 00:00:00 2001 From: disksing Date: Wed, 29 Jul 2026 14:33:04 +0800 Subject: [PATCH 21/21] *: use kvproto master baseline Signed-off-by: disksing --- examples/gcworker/go.mod | 4 ++-- examples/rawkv/go.mod | 4 ++-- examples/txnkv/1pc_txn/go.mod | 4 ++-- examples/txnkv/async_commit/go.mod | 4 ++-- examples/txnkv/delete_range/go.mod | 4 ++-- examples/txnkv/go.mod | 4 ++-- examples/txnkv/pessimistic_txn/go.mod | 4 ++-- examples/txnkv/unsafedestoryrange/go.mod | 4 ++-- go.mod | 4 ++-- go.sum | 8 ++++---- integration_tests/go.mod | 4 ++-- integration_tests/go.sum | 8 ++++---- 12 files changed, 28 insertions(+), 28 deletions(-) diff --git a/examples/gcworker/go.mod b/examples/gcworker/go.mod index e239db4614..b4be0c1094 100644 --- a/examples/gcworker/go.mod +++ b/examples/gcworker/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/rawkv/go.mod b/examples/rawkv/go.mod index 1c568b0037..a18ccbf133 100644 --- a/examples/rawkv/go.mod +++ b/examples/rawkv/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/1pc_txn/go.mod b/examples/txnkv/1pc_txn/go.mod index dec5053683..fb7c71f85d 100644 --- a/examples/txnkv/1pc_txn/go.mod +++ b/examples/txnkv/1pc_txn/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/async_commit/go.mod b/examples/txnkv/async_commit/go.mod index 1ea5972566..e95b288cf1 100644 --- a/examples/txnkv/async_commit/go.mod +++ b/examples/txnkv/async_commit/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/delete_range/go.mod b/examples/txnkv/delete_range/go.mod index 7bc7827fd1..1b38f46343 100644 --- a/examples/txnkv/delete_range/go.mod +++ b/examples/txnkv/delete_range/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/go.mod b/examples/txnkv/go.mod index add78e3d3a..88600ffe72 100644 --- a/examples/txnkv/go.mod +++ b/examples/txnkv/go.mod @@ -3,7 +3,7 @@ module txnkv go 1.25.10 require ( - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 github.com/tikv/client-go/v2 v2.0.0 ) @@ -33,7 +33,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/pessimistic_txn/go.mod b/examples/txnkv/pessimistic_txn/go.mod index 6cb2b825d4..ba1cfabd64 100644 --- a/examples/txnkv/pessimistic_txn/go.mod +++ b/examples/txnkv/pessimistic_txn/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/examples/txnkv/unsafedestoryrange/go.mod b/examples/txnkv/unsafedestoryrange/go.mod index 0342d62fd5..02b223b259 100644 --- a/examples/txnkv/unsafedestoryrange/go.mod +++ b/examples/txnkv/unsafedestoryrange/go.mod @@ -22,7 +22,7 @@ require ( github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 // indirect github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 // indirect - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 // indirect + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 // indirect github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_golang v1.20.5 // indirect @@ -31,7 +31,7 @@ require ( github.com/prometheus/procfs v0.15.1 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe // indirect + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f // indirect github.com/twmb/murmur3 v1.1.3 // indirect go.etcd.io/etcd/api/v3 v3.5.10 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect diff --git a/go.mod b/go.mod index 19600774af..f87b5c393f 100644 --- a/go.mod +++ b/go.mod @@ -15,14 +15,14 @@ require ( github.com/pingcap/errors v0.11.5-0.20241219054535-6b8c588c3122 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/client_model v0.6.1 github.com/stretchr/testify v1.9.0 github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.10 go.etcd.io/etcd/client/v3 v3.5.10 diff --git a/go.sum b/go.sum index 7821bbb495..78c5053e4d 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 h1:tdMsjOqUR7YXH github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86/go.mod h1:exzhVYca3WRtd6gclGNErRWb1qEgff3LYta0LvRmON4= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= -github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 h1:fYG7YB9ooFzVM7vKxXDs3QanNdj57yAMEdPZadeC64Q= -github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 h1:JBrbgynAz4RkeXUvqXAOhySZK5FYFCeHdKWUrj+Z2Vw= +github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3 h1:HR/ylkkLmGdSSDaD8IDP+SZrdhV1Kibl9KrHxJ9eciw= github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -115,8 +115,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a h1:J/YdBZ46WKpXsxsW93SG+q0F8KI+yFrcIDT4c/RNoc4= github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= -github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe h1:P6JRsrlE1hUtbdOcAZV2abr4Kk46RQ/hGGj+h2AAbWA= -github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe/go.mod h1:P0NC6/0/euMCgYYFcxp1pfdIkpb1Xcz/fGsX7PNBVHk= +github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f h1:IYHVxTMV8oXlL4ZaoGDvREUZlszfyA0w3fUK9g2wSlM= +github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f/go.mod h1:Xhd/CPuOv+tgP+5LKhWS23tklCXszF0EgKo4R6OZGj0= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= github.com/twmb/murmur3 v1.1.3/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index b9e41949bb..0f63fc6325 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -7,7 +7,7 @@ require ( github.com/ninedraft/israce v0.0.3 github.com/pingcap/errors v0.11.5-0.20260508054701-306e305bcf41 github.com/pingcap/failpoint v0.0.0-20240528011301-b51a646c7c86 - github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 github.com/pingcap/tidb v1.1.0-beta.0.20260708073538-b6db59b2742a github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.23.0 @@ -15,7 +15,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/tidwall/gjson v1.14.4 github.com/tikv/client-go/v2 v2.0.8-0.20260617030124-661db4f5f4e8 - github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe + github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f go.uber.org/goleak v1.3.0 google.golang.org/grpc v1.79.3 ) diff --git a/integration_tests/go.sum b/integration_tests/go.sum index e4bf485269..d1fc871b9b 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -1456,8 +1456,8 @@ github.com/pingcap/fn v1.0.0/go.mod h1:u9WZ1ZiOD1RpNhcI42RucFh/lBuzTu6rw88a+oF2Z github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 h1:surzm05a8C9dN8dIUmo4Be2+pMRb6f55i+UIYrluu2E= github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989/go.mod h1:O17XtbryoCJhkKGbT62+L2OlrniwqiGLSqrmdHCMzZw= github.com/pingcap/kvproto v0.0.0-20241113043844-e1fa7ea8c302/go.mod h1:rXxWk2UnwfUhLXha1jxRWPADw9eMZGWEWCg92Tgmb/8= -github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0 h1:fYG7YB9ooFzVM7vKxXDs3QanNdj57yAMEdPZadeC64Q= -github.com/pingcap/kvproto v0.0.0-20260722060835-57fb9c0799c0/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= +github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 h1:JBrbgynAz4RkeXUvqXAOhySZK5FYFCeHdKWUrj+Z2Vw= +github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472/go.mod h1:z6+aAHB7dBkA+LyinEX+48/ImRJ3jag0Hg0c7wkhEvE= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9 h1:qG9BSvlWFEE5otQGamuWedx9LRm0nrHvsQRQiW8SxEs= @@ -1598,8 +1598,8 @@ github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JT github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= -github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe h1:P6JRsrlE1hUtbdOcAZV2abr4Kk46RQ/hGGj+h2AAbWA= -github.com/tikv/pd/client v0.0.0-20260722143501-f0dbff7d0efe/go.mod h1:P0NC6/0/euMCgYYFcxp1pfdIkpb1Xcz/fGsX7PNBVHk= +github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f h1:IYHVxTMV8oXlL4ZaoGDvREUZlszfyA0w3fUK9g2wSlM= +github.com/tikv/pd/client v0.0.0-20260729061341-533858f82c9f/go.mod h1:Xhd/CPuOv+tgP+5LKhWS23tklCXszF0EgKo4R6OZGj0= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=