diff --git a/api/middleware/authenticate_middleware.go b/api/middleware/authenticate_middleware.go index cc4cf74af5..19b95927a3 100644 --- a/api/middleware/authenticate_middleware.go +++ b/api/middleware/authenticate_middleware.go @@ -67,7 +67,7 @@ func verify(ctx *gin.Context, etcdCli etcd.Client) error { // verifyTiDBUser verify whether the username and password are valid in TiDB. It does the validation via // the successfully build of a connection with upstream TiDB with the username and password. - tidbs, err := upstream.FetchTiDBTopology(ctx, etcdCli, keyspaceMeta.Id) + tidbs, err := upstream.FetchTiDBTopology(ctx, etcdCli, keyspaceMeta.GetId()) if err != nil { return errors.Trace(err) } diff --git a/api/middleware/middleware_nextgen_test.go b/api/middleware/middleware_nextgen_test.go index 9389bc97aa..3f41a3bac3 100644 --- a/api/middleware/middleware_nextgen_test.go +++ b/api/middleware/middleware_nextgen_test.go @@ -75,18 +75,18 @@ func TestKeyspaceCheckerMiddleware(t *testing.T) { keyspace: "success", init: func(t *testing.T, mock *keyspace.MockManager) { mock.EXPECT().LoadKeyspace(gomock.Any(), "success").Return(&keyspacepb.KeyspaceMeta{ - Id: 1, - Name: "kespace1", - State: keyspacepb.KeyspaceState_ENABLED, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: 1}, + Name: "kespace1", + State: keyspacepb.KeyspaceState_ENABLED, }, nil) }, expectedStatus: http.StatusOK, expectedAbort: false, expectedBodyContains: "", expectedMeta: &keyspacepb.KeyspaceMeta{ - Id: 1, - Name: "kespace1", - State: keyspacepb.KeyspaceState_ENABLED, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: 1}, + Name: "kespace1", + State: keyspacepb.KeyspaceState_ENABLED, }, }, } diff --git a/api/v2/changefeed.go b/api/v2/changefeed.go index 4b167d12cb..89b7f16460 100644 --- a/api/v2/changefeed.go +++ b/api/v2/changefeed.go @@ -221,7 +221,7 @@ func (h *OpenAPIV2) CreateChangefeed(c *gin.Context) { ctx, h.server.GetPdClient(), createGcServiceID, - keyspaceMeta.Id, + keyspaceMeta.GetId(), changefeedID, ensureTTL, cfg.StartTs); err != nil { if !errors.ErrStartTsBeforeGC.Equal(err) { @@ -240,7 +240,7 @@ func (h *OpenAPIV2) CreateChangefeed(c *gin.Context) { undoErr := gc.UndoEnsureChangefeedStartTsSafety( ctx, pdClient, - keyspaceMeta.Id, + keyspaceMeta.GetId(), createGcServiceID, changefeedID, ) @@ -268,7 +268,7 @@ func (h *OpenAPIV2) CreateChangefeed(c *gin.Context) { // We create a new context here. schemaCxt := context.Background() if err = schemaStore.RegisterKeyspace(schemaCxt, common.KeyspaceMeta{ - ID: keyspaceMeta.Id, + ID: keyspaceMeta.GetId(), Name: keyspaceMeta.Name, }); err != nil { _ = c.Error(err) @@ -304,7 +304,7 @@ func (h *OpenAPIV2) CreateChangefeed(c *gin.Context) { Config: replicaCfg, State: config.StateNormal, CreatorVersion: version.ReleaseVersion, - KeyspaceID: keyspaceMeta.Id, + KeyspaceID: keyspaceMeta.GetId(), } // verify sinkURI @@ -826,7 +826,7 @@ func (h *OpenAPIV2) ResumeChangefeed(c *gin.Context) { ctx, h.server.GetPdClient(), resumeGcServiceID, - keyspaceMeta.Id, + keyspaceMeta.GetId(), cfInfo.ChangefeedID, newCheckpointTs); err != nil { _ = c.Error(err) @@ -840,7 +840,7 @@ func (h *OpenAPIV2) ResumeChangefeed(c *gin.Context) { undoErr := gc.UndoEnsureChangefeedStartTsSafety( ctx, h.server.GetPdClient(), - keyspaceMeta.Id, + keyspaceMeta.GetId(), resumeGcServiceID, cfInfo.ChangefeedID, ) diff --git a/api/v2/changefeed_test.go b/api/v2/changefeed_test.go index a8594ffa1c..4085a6cb73 100644 --- a/api/v2/changefeed_test.go +++ b/api/v2/changefeed_test.go @@ -70,8 +70,8 @@ func TestResumeChangefeedRejectsNormalBeforeGC(t *testing.T) { c.Request = httptest.NewRequest(http.MethodPost, "/api/v2/changefeeds/test/resume?keyspace=default", nil) c.Params = gin.Params{{Key: api.APIOpVarChangefeedID, Value: "test"}} c.Set("ctx-keyspace", &keyspacepb.KeyspaceMeta{ - Id: common.DefaultKeyspaceID, - State: keyspacepb.KeyspaceState_ENABLED, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: common.DefaultKeyspaceID}, + State: keyspacepb.KeyspaceState_ENABLED, }) h.ResumeChangefeed(c) diff --git a/api/v2/unsafe.go b/api/v2/unsafe.go index 629b6ea41f..21bd4acdbd 100644 --- a/api/v2/unsafe.go +++ b/api/v2/unsafe.go @@ -59,10 +59,10 @@ func (h *OpenAPIV2) ResolveLock(c *gin.Context) { keyspaceMeta := middleware.GetKeyspaceFromContext(c) txnResolver := txnutil.NewLockerResolver() - if err := txnResolver.Resolve(schemaCxt, keyspaceMeta.Id, resolveLockReq.RegionID, resolveLockReq.Ts); err != nil { + if err := txnResolver.Resolve(schemaCxt, keyspaceMeta.GetId(), resolveLockReq.RegionID, resolveLockReq.Ts); err != nil { log.Error( "resolve lock failed", - zap.Uint32("keyspaceID", keyspaceMeta.Id), + zap.Uint32("keyspaceID", keyspaceMeta.GetId()), zap.Uint64("regionID", resolveLockReq.RegionID), zap.Uint64("resolveLockTs", resolveLockReq.Ts), zap.Error(err), @@ -87,7 +87,7 @@ func (h *OpenAPIV2) DeleteServiceGcSafePoint(c *gin.Context) { err := gc.UnifyDeleteGcSafepoint( c, pdClient, - keyspaceMeta.Id, + keyspaceMeta.GetId(), h.server.GetEtcdClient().GetGCServiceID(), ) if err != nil { diff --git a/cmd/cdc/cli/cli_unsafe.go b/cmd/cdc/cli/cli_unsafe.go index 780812568c..7eac32943c 100644 --- a/cmd/cdc/cli/cli_unsafe.go +++ b/cmd/cdc/cli/cli_unsafe.go @@ -65,6 +65,7 @@ func newCmdUnsafe(f factory.Factory) *cobra.Command { command.AddCommand(newCmdShowMetadata(f)) command.AddCommand(newCmdDeleteServiceGcSafepoint(f, commonOptions)) command.AddCommand(newCmdResolveLock(f)) + command.AddCommand(newCmdVerifyGCSafepoint(f)) return command } diff --git a/cmd/cdc/cli/cli_unsafe_reset.go b/cmd/cdc/cli/cli_unsafe_reset.go index 086fd8fa9d..fa6c6fe95c 100644 --- a/cmd/cdc/cli/cli_unsafe_reset.go +++ b/cmd/cdc/cli/cli_unsafe_reset.go @@ -139,9 +139,9 @@ func removeKeyspaceGCBarrier(ctx context.Context, pdCli pd.Client, serviceID str log.Warn("load keyspace error", zap.String("keyspace", keyspace), zap.Error(err)) continue } - err = gc.UnifyDeleteGcSafepoint(ctx, pdCli, keyspaceMeta.Id, serviceID) + err = gc.UnifyDeleteGcSafepoint(ctx, pdCli, keyspaceMeta.GetId(), serviceID) if err != nil { - log.Warn("DeleteGcSafepoint error", zap.Uint32("keyspaceID", keyspaceMeta.Id), zap.String("keyspace", keyspace), zap.String("serviceID", serviceID), zap.Error(err)) + log.Warn("DeleteGcSafepoint error", zap.Uint32("keyspaceID", keyspaceMeta.GetId()), zap.String("keyspace", keyspace), zap.String("serviceID", serviceID), zap.Error(err)) continue } } diff --git a/cmd/cdc/cli/cli_unsafe_verify_gc_safepoint.go b/cmd/cdc/cli/cli_unsafe_verify_gc_safepoint.go new file mode 100644 index 0000000000..3694e4c534 --- /dev/null +++ b/cmd/cdc/cli/cli_unsafe_verify_gc_safepoint.go @@ -0,0 +1,159 @@ +// Copyright 2026 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package cli + +import ( + "context" + "net/url" + + "github.com/pingcap/kvproto/pkg/keyspacepb" + "github.com/pingcap/ticdc/cmd/cdc/factory" + "github.com/pingcap/ticdc/cmd/util" + "github.com/pingcap/ticdc/pkg/common" + "github.com/pingcap/ticdc/pkg/errors" + "github.com/pingcap/ticdc/pkg/security" + "github.com/pingcap/ticdc/pkg/upstream" + tidbkv "github.com/pingcap/tidb/pkg/kv" + "github.com/pingcap/tidb/pkg/meta" + "github.com/pingcap/tidb/pkg/store/driver" + "github.com/spf13/cobra" + tikvconfig "github.com/tikv/client-go/v2/config" + pdgc "github.com/tikv/pd/client/clients/gc" +) + +type verifyGCSafepointPDClient interface { + LoadKeyspace(ctx context.Context, keyspace string) (*keyspacepb.KeyspaceMeta, error) + GetGCStatesClient(keyspaceID uint32) pdgc.GCStatesClient + Close() +} + +type verifyGCSafepointOptions struct { + keyspace string + legacySafepoint bool + pdClient verifyGCSafepointPDClient + listDatabases func(ctx context.Context, keyspace string, snapshotTS uint64) (int, error) +} + +func (o *verifyGCSafepointOptions) addFlags(cmd *cobra.Command) { + cmd.Flags().StringVarP(&o.keyspace, "keyspace", "k", "", "Keyspace to verify") + cmd.Flags().BoolVar(&o.legacySafepoint, "legacy-safepoint", false, "Read the keyspace-v2 minimum service safepoint") + _ = cmd.MarkFlagRequired("keyspace") +} + +func (o *verifyGCSafepointOptions) complete(f factory.Factory) error { + pdClient, err := f.PdClient() + if err != nil { + return err + } + o.pdClient = pdClient + o.listDatabases = func(_ context.Context, keyspace string, snapshotTS uint64) (int, error) { + return listDatabasesAtSnapshot(f.GetPdAddr(), f.GetCredential(), keyspace, snapshotTS) + } + return nil +} + +func (o *verifyGCSafepointOptions) run(cmd *cobra.Command) error { + defer o.pdClient.Close() + ctx := cmd.Context() + keyspaceMeta, err := o.pdClient.LoadKeyspace(ctx, o.keyspace) + if err != nil { + return errors.WrapError(errors.ErrLoadKeyspaceFailed, err) + } + + var snapshotTS uint64 + if o.legacySafepoint { + legacyClient, ok := o.pdClient.(pdgc.LegacyClientV2) + if !ok { + return errors.ErrGetServiceSafepointFailed.GenWithStackByArgs("PD client does not support LegacyClientV2") + } + snapshotTS, err = legacyClient.GetMinServiceSafePointV2(ctx, keyspaceMeta.GetId()) + if err != nil { + return errors.WrapError(errors.ErrGetServiceSafepointFailed, err) + } + } else { + gcState, err := o.pdClient.GetGCStatesClient(keyspaceMeta.GetId()).GetGCState(ctx) + if err != nil { + return errors.Trace(err) + } + // Schema store uses the transaction safepoint as its initial metadata snapshot. + snapshotTS = gcState.TxnSafePoint + } + if snapshotTS == 0 { + return errors.ErrGetServiceSafepointFailed.GenWithStackByArgs( + "safepoint is zero, keyspace GC state may be uninitialized") + } + cmd.Printf("WARNING: this verification holds no service safepoint; GC may advance past snapshot %d before the read completes.\n", snapshotTS) + + databaseCount, err := o.listDatabases(ctx, o.keyspace, snapshotTS) + if err != nil { + return err + } + cmd.Printf("GC safepoint and ListDatabases verified, snapshot-ts: %d, databases: %d\n", snapshotTS, databaseCount) + return nil +} + +func listDatabasesAtSnapshot( + pdAddr string, + credential *security.Credential, + keyspace string, + snapshotTS uint64, +) (int, error) { + pdURLs, err := common.NewURLsValue(pdAddr) + if err != nil { + return 0, errors.WrapError(errors.ErrNewStore, err) + } + tiURL := &url.URL{Scheme: "tikv", Host: pdURLs.HostString()} + query := tiURL.Query() + query.Set("disableGC", "true") + query.Set("keyspaceName", keyspace) + tiURL.RawQuery = query.Encode() + + securityConfig := tikvconfig.Security{ + ClusterSSLCA: credential.CAPath, + ClusterSSLCert: credential.CertPath, + ClusterSSLKey: credential.KeyPath, + ClusterVerifyCN: credential.CertAllowedCN, + } + tiStore, err := (&driver.TiKVDriver{}).OpenWithOptions( + tiURL.String(), driver.WithSecurity(securityConfig), + ) + if err != nil { + return 0, errors.WrapError(errors.ErrNewStore, err) + } + defer func() { _ = tiStore.Close() }() + if err := upstream.DisablePDRouterClient(tiStore); err != nil { + return 0, errors.WrapError(errors.ErrNewStore, err) + } + + databases, err := meta.NewReader(tiStore.GetSnapshot(tidbkv.NewVersion(snapshotTS))).ListDatabases() + if err != nil { + return 0, errors.WrapError(errors.ErrMetaListDatabases, err) + } + return len(databases), nil +} + +func newCmdVerifyGCSafepoint(f factory.Factory) *cobra.Command { + o := &verifyGCSafepointOptions{} + command := &cobra.Command{ + Use: "verify-gc-safepoint", + Short: "Verify a keyspace GC safepoint by listing databases at its current snapshot", + Args: cobra.NoArgs, + Run: func(cmd *cobra.Command, _ []string) { + util.CheckErr(o.complete(f)) + util.CheckErr(o.run(cmd)) + }, + } + o.addFlags(command) + return command +} diff --git a/cmd/cdc/cli/cli_unsafe_verify_gc_safepoint_test.go b/cmd/cdc/cli/cli_unsafe_verify_gc_safepoint_test.go new file mode 100644 index 0000000000..46514d105a --- /dev/null +++ b/cmd/cdc/cli/cli_unsafe_verify_gc_safepoint_test.go @@ -0,0 +1,181 @@ +// Copyright 2026 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package cli + +import ( + "bytes" + "context" + "testing" + + "github.com/pingcap/kvproto/pkg/keyspacepb" + "github.com/pingcap/ticdc/pkg/errors" + "github.com/spf13/cobra" + "github.com/stretchr/testify/require" + pdgc "github.com/tikv/pd/client/clients/gc" +) + +type verifyGCSafepointTestPDClient struct { + pdgc.LegacyClientV2 + keyspaceID uint32 + txnSafePoint uint64 + gcSafePoint uint64 + legacySafePoint uint64 + loadedKeyspace string + requestedKeyspaceID uint32 + legacyKeyspaceID uint32 + gcStateRequested bool + closed bool +} + +func (c *verifyGCSafepointTestPDClient) LoadKeyspace(_ context.Context, keyspace string) (*keyspacepb.KeyspaceMeta, error) { + c.loadedKeyspace = keyspace + return &keyspacepb.KeyspaceMeta{Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: c.keyspaceID}}, nil +} + +func (c *verifyGCSafepointTestPDClient) GetGCStatesClient(keyspaceID uint32) pdgc.GCStatesClient { + c.gcStateRequested = true + c.requestedKeyspaceID = keyspaceID + return &verifyGCSafepointTestGCStatesClient{ + gcState: pdgc.NewGCStateWithoutGCBarriers( + keyspaceID, + c.txnSafePoint, + c.gcSafePoint, + ), + } +} + +func (c *verifyGCSafepointTestPDClient) GetMinServiceSafePointV2(_ context.Context, keyspaceID uint32) (uint64, error) { + c.legacyKeyspaceID = keyspaceID + return c.legacySafePoint, nil +} + +func (c *verifyGCSafepointTestPDClient) Close() { + c.closed = true +} + +type verifyGCSafepointTestGCStatesClient struct { + pdgc.GCStatesClient + gcState pdgc.GCState +} + +func (c *verifyGCSafepointTestGCStatesClient) GetGCState(context.Context, ...pdgc.GCStatesAPIOption) (pdgc.GCState, error) { + return c.gcState, nil +} + +func TestVerifyGCSafepointRun(t *testing.T) { + t.Run("uses the current keyspace transaction safepoint", func(t *testing.T) { + pdClient := &verifyGCSafepointTestPDClient{ + keyspaceID: 42, + txnSafePoint: 123, + gcSafePoint: 100, + } + o := &verifyGCSafepointOptions{ + keyspace: "essential-v1", + pdClient: pdClient, + listDatabases: func(_ context.Context, keyspace string, ts uint64) (int, error) { + require.Equal(t, "essential-v1", keyspace) + require.Equal(t, pdClient.txnSafePoint, ts) + return 3, nil + }, + } + cmd := &cobra.Command{} + output := new(bytes.Buffer) + cmd.SetOut(output) + + require.NoError(t, o.run(cmd)) + require.Equal(t, "essential-v1", pdClient.loadedKeyspace) + require.Equal(t, pdClient.keyspaceID, pdClient.requestedKeyspaceID) + require.True(t, pdClient.closed) + require.Contains(t, output.String(), "WARNING: this verification holds no service safepoint") + require.Contains(t, output.String(), "databases: 3") + }) + + t.Run("uses the legacy minimum service safepoint when requested", func(t *testing.T) { + pdClient := &verifyGCSafepointTestPDClient{ + keyspaceID: 42, + txnSafePoint: 123, + legacySafePoint: 456, + } + o := &verifyGCSafepointOptions{ + keyspace: "essential-v1", + legacySafepoint: true, + pdClient: pdClient, + listDatabases: func(_ context.Context, keyspace string, ts uint64) (int, error) { + require.Equal(t, "essential-v1", keyspace) + require.Equal(t, pdClient.legacySafePoint, ts) + return 3, nil + }, + } + cmd := &cobra.Command{} + cmd.SetContext(context.Background()) + cmd.SetOut(new(bytes.Buffer)) + + require.NoError(t, o.run(cmd)) + require.Equal(t, pdClient.keyspaceID, pdClient.legacyKeyspaceID) + require.False(t, pdClient.gcStateRequested) + require.True(t, pdClient.closed) + }) + + t.Run("snapshot error is returned", func(t *testing.T) { + pdClient := &verifyGCSafepointTestPDClient{ + keyspaceID: 42, + txnSafePoint: 123, + } + o := &verifyGCSafepointOptions{ + keyspace: "essential-v1", + pdClient: pdClient, + listDatabases: func(context.Context, string, uint64) (int, error) { + return 0, errors.WrapError(errors.ErrMetaListDatabases, context.Canceled) + }, + } + cmd := &cobra.Command{} + output := new(bytes.Buffer) + cmd.SetOut(output) + + err := o.run(cmd) + require.ErrorContains(t, err, "meta store list databases") + require.True(t, pdClient.closed) + require.Contains(t, output.String(), "before the read completes") + }) + + t.Run("zero safepoint is rejected", func(t *testing.T) { + pdClient := &verifyGCSafepointTestPDClient{ + keyspaceID: 42, + txnSafePoint: 0, + } + o := &verifyGCSafepointOptions{ + keyspace: "essential-v1", + pdClient: pdClient, + listDatabases: func(context.Context, string, uint64) (int, error) { + t.Fatal("listDatabases must not be called with a zero safepoint") + return 0, nil + }, + } + cmd := &cobra.Command{} + cmd.SetOut(new(bytes.Buffer)) + + err := o.run(cmd) + require.ErrorContains(t, err, "safepoint is zero") + require.True(t, pdClient.closed) + }) +} + +func TestVerifyGCSafepointFlags(t *testing.T) { + o := &verifyGCSafepointOptions{} + cmd := &cobra.Command{} + o.addFlags(cmd) + + require.NoError(t, cmd.ParseFlags([]string{"--legacy-safepoint"})) + require.True(t, o.legacySafepoint) +} diff --git a/cmd/cdc/factory/factory_impl.go b/cmd/cdc/factory/factory_impl.go index 31b8c2fd09..25b4bd6e07 100644 --- a/cmd/cdc/factory/factory_impl.go +++ b/cmd/cdc/factory/factory_impl.go @@ -138,6 +138,7 @@ func (f *factoryImpl) PdClient() (pd.Client, error) { pdClient, err := pd.NewClientWithContext( f.ctx, "cdc-factory", pdEndpoints, credential.PDSecurityOption(), pdopt.WithMaxErrorRetry(maxGetPDClientRetryTimes), + pdopt.WithEnableRouterClient(false), // Compatible with old PD which doesn't support the `QueryRegion` API. // TODO(hi-rustin): add gRPC metrics to Options. // See also: https://github.com/pingcap/tiflow/pull/2341#discussion_r673032407. pdopt.WithGRPCDialOptions( diff --git a/go.mod b/go.mod index de1799e46b..2ad074a1d4 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ require ( github.com/go-mysql-org/go-mysql v1.13.0 github.com/go-oauth2/oauth2/v4 v4.5.4 github.com/go-sql-driver/mysql v1.9.3 - github.com/goccy/go-json v0.10.5 + github.com/goccy/go-json v0.10.6 github.com/gogo/protobuf v1.3.2 github.com/golang-jwt/jwt/v5 v5.3.0 github.com/golang/mock v1.6.0 @@ -45,19 +45,19 @@ require ( github.com/integralist/go-findroot v0.0.0-20160518114804-ac90681525dc github.com/jarcoal/httpmock v1.2.0 github.com/json-iterator/go v1.1.12 - github.com/klauspost/compress v1.18.5 + github.com/klauspost/compress v1.19.0 github.com/linkedin/goavro/v2 v2.14.0 github.com/mailru/easyjson v0.9.1 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 - github.com/pierrec/lz4/v4 v4.1.26 + github.com/pierrec/lz4/v4 v4.1.27 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-20260716092138-22607720b19a + github.com/pingcap/kvproto v0.0.0-20260724054804-059694ae4472 github.com/pingcap/log v1.1.1-0.20250917021125-19901e015dc9 github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5 - github.com/pingcap/tidb v1.1.0-beta.0.20260625145450-3e4ee9fc99e7 + github.com/pingcap/tidb v1.1.0-beta.0.20260812023830-6338c2776726 github.com/pingcap/tidb-dashboard v0.0.0-20260316045729-aa6178a60657 - github.com/pingcap/tidb/pkg/parser v0.0.0-20260616034257-3adc8ec71ef3 + github.com/pingcap/tidb/pkg/parser v0.0.0-20260812023830-6338c2776726 github.com/pingcap/tiflow v0.0.0-20260723070929-e8736df4fe74 github.com/prometheus/client_golang v1.23.0 github.com/prometheus/client_model v0.6.2 @@ -70,9 +70,9 @@ require ( github.com/spf13/pflag v1.0.10 github.com/stretchr/testify v1.11.1 github.com/thanhpk/randstr v1.0.6 - github.com/tikv/client-go/v2 v2.0.8-0.20260618054307-6125c3b05c6c + github.com/tikv/client-go/v2 v2.0.8-0.20260807103401-b75f6efa8ddd github.com/tikv/pd v1.1.0-beta.0.20260604125942-9f1c47b1e851 - github.com/tikv/pd/client v0.0.0-20260604125942-9f1c47b1e851 + github.com/tikv/pd/client v0.0.0-20260805103528-afa43111d149 github.com/tinylib/msgp v1.5.0 github.com/uber-go/atomic v1.4.0 github.com/xdg/scram v1.0.5 @@ -90,8 +90,8 @@ require ( go.uber.org/zap v1.27.1 golang.org/x/net v0.56.0 golang.org/x/oauth2 v0.36.0 - golang.org/x/sync v0.21.0 - golang.org/x/sys v0.46.0 + golang.org/x/sync v0.22.0 + golang.org/x/sys v0.47.0 golang.org/x/term v0.44.0 golang.org/x/text v0.39.0 golang.org/x/time v0.14.0 @@ -138,11 +138,10 @@ require ( github.com/aliyun/alibaba-cloud-sdk-go v1.61.1581 // indirect github.com/aliyun/alibabacloud-oss-go-sdk-v2 v1.2.3 // indirect github.com/aliyun/credentials-go v1.4.7 // indirect - github.com/andybalholm/brotli v1.2.0 // indirect - github.com/apache/arrow-go/v18 v18.5.0 // indirect - github.com/apache/thrift v0.23.0 // indirect + github.com/andybalholm/brotli v1.2.2 // indirect + github.com/apache/arrow-go/v18 v18.6.1-0.20260713210906-efc145c067b6 // indirect + github.com/apache/thrift v0.24.0 // indirect github.com/ardielle/ardielle-go v1.5.2 // indirect - github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.14 // indirect github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.19.0 // indirect @@ -173,6 +172,7 @@ require ( github.com/cheggaaa/pb/v3 v3.0.8 // indirect github.com/cilium/ebpf v0.4.0 // indirect github.com/clbanning/mxj/v2 v2.7.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/cloudfoundry/gosigar v1.3.6 // indirect github.com/cloudwego/base64x v0.1.6 // indirect github.com/cockroachdb/errors v1.11.3 // indirect @@ -219,10 +219,10 @@ require ( github.com/godbus/dbus/v5 v5.0.4 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang/glog v1.2.5 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v1.0.0 // indirect - github.com/google/flatbuffers v25.9.23+incompatible // indirect + github.com/google/flatbuffers v25.12.19+incompatible // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/pprof v0.0.0-20250903194437-c28834ac2320 // indirect github.com/google/s2a-go v0.1.9 // indirect @@ -231,9 +231,9 @@ require ( github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hamba/avro/v2 v2.30.0 // indirect + github.com/hamba/avro/v2 v2.31.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect @@ -255,9 +255,8 @@ require ( github.com/joho/sqltocsv v0.0.0-20210428211105-a6d6801d59df // indirect github.com/jonboulle/clockwork v0.4.0 // indirect github.com/joomcode/errorx v1.0.1 // indirect - github.com/klauspost/asmfmt v1.3.2 // indirect github.com/klauspost/cpuid v1.3.1 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/klauspost/cpuid/v2 v2.4.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/ks3sdklib/aws-sdk-go v1.2.9 // indirect @@ -272,9 +271,9 @@ require ( github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect - github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect - github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect + github.com/mattn/go-runewidth v0.0.20 // indirect + github.com/mitchellh/copystructure v1.0.0 // indirect + github.com/mitchellh/reflectwalk v1.0.1 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -294,7 +293,7 @@ require ( github.com/pingcap/fn v1.0.0 // indirect github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 // indirect github.com/pingcap/metering_sdk v0.0.0-20260324055927-14fead745f1d // indirect - github.com/pingcap/tipb v0.0.0-20260617071407-7c071244534b // indirect + github.com/pingcap/tipb v0.0.0-20260623093813-5f9928e91afe // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -306,7 +305,6 @@ require ( github.com/quic-go/qpack v0.5.1 // indirect github.com/quic-go/quic-go v0.55.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/cors v1.7.0 // indirect @@ -350,7 +348,7 @@ require ( github.com/xdg/stringprep v1.0.3 // indirect github.com/xiang90/probing v0.0.0-20221125231312-a49e3df8f510 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - github.com/zeebo/xxh3 v1.0.2 // indirect + github.com/zeebo/xxh3 v1.1.0 // indirect github.com/zyedidia/generic v1.2.1 // indirect go.etcd.io/bbolt v1.3.10 // indirect go.etcd.io/etcd/client/v2 v2.305.15 // indirect @@ -364,15 +362,13 @@ require ( go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - go.opentelemetry.io/proto/otlp v1.7.1 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect golang.org/x/arch v0.22.0 // indirect golang.org/x/crypto v0.53.0 // indirect - golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect + golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect golang.org/x/mod v0.37.0 // indirect - golang.org/x/telemetry v0.0.0-20260625142307-59b4966ccb57 // indirect golang.org/x/tools v0.47.0 // indirect - golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect - google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect + google.golang.org/genproto v0.0.0-20250324211829-b45e905df463 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect gopkg.in/inf.v0 v0.9.1 // indirect @@ -396,8 +392,6 @@ require ( replace ( github.com/IBM/sarama v1.41.2 => github.com/pingcap/sarama v1.41.2-pingcap-20260622.1 - // Downgrade grpc to v1.63.2, as well as other related modules. - github.com/apache/arrow-go/v18 => github.com/joechenrh/arrow-go/v18 v18.0.0-20250911101656-62c34c9a3b82 // copy from TiDB github.com/go-ldap/ldap/v3 v3.4.4 => github.com/yangkeao/ldap/v3 v3.4.5-0.20230421065457-369a3bab1117 ) diff --git a/go.sum b/go.sum index 06a70a57fc..1fc9a65afb 100644 --- a/go.sum +++ b/go.sum @@ -125,19 +125,19 @@ github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmP github.com/aliyun/credentials-go v1.4.5/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= github.com/aliyun/credentials-go v1.4.7 h1:T17dLqEtPUFvjDRRb5giVvLh6dFT8IcNFJJb7MeyCxw= github.com/aliyun/credentials-go v1.4.7/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U= -github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= -github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= +github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow-go/v18 v18.6.1-0.20260713210906-efc145c067b6 h1:BxUaI96qgW9FzSrzbCmlnFvKOX/u7isAL6VrCWaVjEY= +github.com/apache/arrow-go/v18 v18.6.1-0.20260713210906-efc145c067b6/go.mod h1:PM6IigLJkdMwIpeHXnymo+xZ52f42a9EYiLtRel4p/A= github.com/apache/pulsar-client-go v0.13.0 h1:XB8jbcVgBZlRkswtTFj6Xy3Hv0mtpvT8xn/ovT1c0I0= github.com/apache/pulsar-client-go v0.13.0/go.mod h1:btNzPWaKtG9geL6naJNYwXnqJJ/codYM41awyZxZLQ4= -github.com/apache/thrift v0.23.0 h1:wKR6YnefQSEnxpEfmgTPuJibNG4bF0p2TK34tHLWi3s= -github.com/apache/thrift v0.23.0/go.mod h1:zPt6WxgvTOM6hF92y8C+MkEM5LMxZuk4JcQOiU4Esvs= +github.com/apache/thrift v0.24.0 h1:zy31L1a49QTNB2bG1BBfMXol3yJrTH975G3pPubQVLQ= +github.com/apache/thrift v0.24.0/go.mod h1:zPt6WxgvTOM6hF92y8C+MkEM5LMxZuk4JcQOiU4Esvs= github.com/ardielle/ardielle-go v1.5.2 h1:TilHTpHIQJ27R1Tl/iITBzMwiUGSlVfiVhwDNGM3Zj4= github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAFAONtv2Dr7HUI= github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= -github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.44.204/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= @@ -228,6 +228,8 @@ github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME= github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= 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/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= @@ -397,8 +399,8 @@ github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9L github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= -github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= +github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= @@ -420,8 +422,8 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU 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/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= @@ -446,8 +448,8 @@ github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/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/flatbuffers v25.9.23+incompatible h1:rGZKv+wOb6QPzIdkM2KxhBZCDrA0DeN6DNmRDrqIsQU= -github.com/google/flatbuffers v25.9.23+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/flatbuffers v25.12.19+incompatible h1:haMV2JRRJCe1998HeW/p0X9UaMTK6SDo0ffLn2+DbLs= +github.com/google/flatbuffers v25.12.19+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -505,12 +507,12 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92Bcuy github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= 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/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/hamba/avro/v2 v2.30.0 h1:OaIdh0+dZIJ331FO/+YYBwZZRdGVyyHuRSyHsjZLJoA= -github.com/hamba/avro/v2 v2.30.0/go.mod h1:X6gDhYv6DQVAT56VqOKuW+PLnQrEQqGB9l1nhlMdAdQ= +github.com/hamba/avro/v2 v2.31.0 h1:wv3nmua7lCEIwWsb6vqsTS3pXktTxcKg5eoyNu0VhrU= +github.com/hamba/avro/v2 v2.31.0/go.mod h1:t6lJYAGE5Mswfn17zjtyQsssRQgnqO6TXLBCHHWRqrw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -574,8 +576,6 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/joechenrh/arrow-go/v18 v18.0.0-20250911101656-62c34c9a3b82 h1:FgHYKbQYF2aD5vlSMCHiS9Xn5PPmFLSaCc+5OYInMRc= -github.com/joechenrh/arrow-go/v18 v18.0.0-20250911101656-62c34c9a3b82/go.mod h1:xBWjSZfpqLkg1mHuVUSF8lMTUfE7SdEUl/VVVd79MIw= github.com/johannesboyne/gofakes3 v0.0.0-20230506070712-04da935ef877 h1:O7syWuYGzre3s73s+NkgB8e0ZvsIVhT/zxNU7V1gHK8= github.com/johannesboyne/gofakes3 v0.0.0-20230506070712-04da935ef877/go.mod h1:AxgWC4DDX54O2WDoQO1Ceabtn6IbktjU/7bigor+66g= github.com/joho/sqltocsv v0.0.0-20210428211105-a6d6801d59df h1:Zrb0IbuLOGHL7nrO2WrcuNWgDTlzFv3zY69QMx4ggQE= @@ -598,17 +598,15 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= 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= -github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= -github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.19.0 h1:sXLILfc9jV2QYWkzFOPWStmcUVH2RHEB1JCdY2oVvCQ= +github.com/klauspost/compress v1.19.0/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/klauspost/cpuid/v2 v2.4.0 h1:S6Hrbc7+ywsr0r+RLapfGBHfyefhCTwEh3A0tV913Dw= +github.com/klauspost/cpuid/v2 v2.4.0/go.mod h1:19jmZ9mjzoF//ddRSUsv0zfBTJWh3QJh9FNxZTMrGxU= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -658,17 +656,18 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ= +github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/maxatome/go-testdeep v1.11.0 h1:Tgh5efyCYyJFGUYiT0qxBSIDeXw0F5zSoatlou685kk= github.com/maxatome/go-testdeep v1.11.0/go.mod h1:011SgQ6efzZYAen6fDn4BqQ+lUR72ysdyKe7Dyogw70= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs= github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= @@ -731,8 +730,8 @@ github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJ github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY= -github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= +github.com/pierrec/lz4/v4 v4.1.27 h1:+PhzhWDrjRj89TH2sw43nE3+4+W8lSxIuQadEHZyjUk= +github.com/pierrec/lz4/v4 v4.1.27/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pingcap/badger v1.5.1-0.20241015064302-38533b6cbf8d h1:eHcokyHxm7HVM+7+Qy1zZwC7NhX9wVNX8oQDcSZw1qI= github.com/pingcap/badger v1.5.1-0.20241015064302-38533b6cbf8d/go.mod h1:KiO2zumBCWx7yoVYoFRpb+DNrwEPk1pR1LF7NvOACMQ= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= @@ -750,8 +749,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-20191211054548-3c6b38ea5107/go.mod h1:WWLmULLO7l8IOcQG+t+ItJ3fEcrL5FxF0Wu+HrMy26w= -github.com/pingcap/kvproto v0.0.0-20260716092138-22607720b19a h1:byZN6kkQEzeBfkrA7DMasEJciMwpKLNuK2jZiJH1N+o= -github.com/pingcap/kvproto v0.0.0-20260716092138-22607720b19a/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-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= 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= @@ -763,16 +762,16 @@ github.com/pingcap/sarama v1.41.2-pingcap-20260622.1 h1:TrtpL+fs51pUc21CZ8mzIotO github.com/pingcap/sarama v1.41.2-pingcap-20260622.1/go.mod h1:PIL6ZKKKhm19IbQpmpJcFnybAi1yXtgLAitDAeBdNCw= github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5 h1:T4pXRhBflzDeAhmOQHNPRRogMYxP13V7BkYw3ZsoSfE= github.com/pingcap/sysutil v1.0.1-0.20240311050922-ae81ee01f3a5/go.mod h1:rlimy0GcTvjiJqvD5mXTRr8O2eNZPBrcUgiWVYp9530= -github.com/pingcap/tidb v1.1.0-beta.0.20260625145450-3e4ee9fc99e7 h1:xhPN8ZqzLT1A0ke34Pi1uFsIN7vABs4mVAXous84/W8= -github.com/pingcap/tidb v1.1.0-beta.0.20260625145450-3e4ee9fc99e7/go.mod h1:BcXJZ9gPRlZrFJJ9OGNap9rMuXvZpHsEGxz8NS7pYWY= +github.com/pingcap/tidb v1.1.0-beta.0.20260812023830-6338c2776726 h1:s1BM7T7lczhzwv9Rz7zaDAalExFVHBsqyl1mdj+dMjc= +github.com/pingcap/tidb v1.1.0-beta.0.20260812023830-6338c2776726/go.mod h1:bLoByS0sAk37XgFbvwcuDRtD1ai4mKggEZAmtzUIHYM= github.com/pingcap/tidb-dashboard v0.0.0-20260316045729-aa6178a60657 h1:o/epSPBAWPf4LC4qTAw/AkDRid5ejP4EOcV2CSZ06gw= github.com/pingcap/tidb-dashboard v0.0.0-20260316045729-aa6178a60657/go.mod h1:3C4RKDXCp3OtN0EsL4Qec3/LFXyJsWITsLCmvNV3bZ4= -github.com/pingcap/tidb/pkg/parser v0.0.0-20260616034257-3adc8ec71ef3 h1:Bk3QuNvNLAt9EtTWGw6JfsUSvn1mC9rALpnRU/vDtz0= -github.com/pingcap/tidb/pkg/parser v0.0.0-20260616034257-3adc8ec71ef3/go.mod h1:zDLDsfNBU5+L6T4J9/OgWAHc/WZvMUjbpgHqQ/t3yKo= +github.com/pingcap/tidb/pkg/parser v0.0.0-20260812023830-6338c2776726 h1:2D1pfDwFaoy1jGBDsFPU7tVbbZFrGN1HXjik6MVTWJM= +github.com/pingcap/tidb/pkg/parser v0.0.0-20260812023830-6338c2776726/go.mod h1:zDLDsfNBU5+L6T4J9/OgWAHc/WZvMUjbpgHqQ/t3yKo= github.com/pingcap/tiflow v0.0.0-20260723070929-e8736df4fe74 h1:nGUVwdQMqd590TVOMITxr268HVTzBtFGswDEvJSwQfE= github.com/pingcap/tiflow v0.0.0-20260723070929-e8736df4fe74/go.mod h1:t5vaLtgdBIX7TR8yY3AuIq+hUsbJio8o5j1WBsoX7SU= -github.com/pingcap/tipb v0.0.0-20260617071407-7c071244534b h1:10OHx2/2noFfPU1K3c3QXZshsw3XvKssk/mjbLdw8DI= -github.com/pingcap/tipb v0.0.0-20260617071407-7c071244534b/go.mod h1:RM8iRcMalzOthG2XJxnNBniM4xFGb/lDwHUwqkaVzt4= +github.com/pingcap/tipb v0.0.0-20260623093813-5f9928e91afe h1:9I5GHZesmR+hv68t00BO7tayKMFfywi+hlpn119GscM= +github.com/pingcap/tipb v0.0.0-20260623093813-5f9928e91afe/go.mod h1:RM8iRcMalzOthG2XJxnNBniM4xFGb/lDwHUwqkaVzt4= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -821,8 +820,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= -github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ= github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= @@ -944,12 +941,12 @@ github.com/tidwall/rtred v0.1.2 h1:exmoQtOLvDoO8ud++6LwVsAMTu0KPzLTUrMln8u1yu8= github.com/tidwall/rtred v0.1.2/go.mod h1:hd69WNXQ5RP9vHd7dqekAz+RIdtfBogmglkZSRxCHFQ= github.com/tidwall/tinyqueue v0.1.1 h1:SpNEvEggbpyN5DIReaJ2/1ndroY8iyEGxPYxoSaymYE= github.com/tidwall/tinyqueue v0.1.1/go.mod h1:O/QNHwrnjqr6IHItYrzoHAKYhBkLI67Q096fQP5zMYw= -github.com/tikv/client-go/v2 v2.0.8-0.20260618054307-6125c3b05c6c h1:DoEVLcE/x0Yz4GjGSTh32vcvYIUZKKMp+VeSIr6NAh4= -github.com/tikv/client-go/v2 v2.0.8-0.20260618054307-6125c3b05c6c/go.mod h1:ifrCFaHJeZDcz6kded2eVwn+t3Auvqve8hI9vLIoVBg= +github.com/tikv/client-go/v2 v2.0.8-0.20260807103401-b75f6efa8ddd h1:2A+FjDtw0Ej6TT6fX496j+/jDNj7wz4ENMXnjOqhc80= +github.com/tikv/client-go/v2 v2.0.8-0.20260807103401-b75f6efa8ddd/go.mod h1:Bid1lF4a8ESuhOH7CeVobOrWxUJvtg16ZLBxogNuZWk= github.com/tikv/pd v1.1.0-beta.0.20260604125942-9f1c47b1e851 h1:2beLPo1vMSw9gpdcC5Fam/P5HaXRPmX4TEN2fv+7nKE= github.com/tikv/pd v1.1.0-beta.0.20260604125942-9f1c47b1e851/go.mod h1:Pb3H0cSkdiEdj761wzNziNHFOLVYuQmNgxQKp35UoxQ= -github.com/tikv/pd/client v0.0.0-20260604125942-9f1c47b1e851 h1:WhOxs9dUc4hZv9TkRTQ3e+jEIWpn5B2S+yzXZE7qn38= -github.com/tikv/pd/client v0.0.0-20260604125942-9f1c47b1e851/go.mod h1:GP9u8OBXqYQ6e43htjprZILrzn3tuogzkEEmmiNlzc4= +github.com/tikv/pd/client v0.0.0-20260805103528-afa43111d149 h1:q5NgKsvuOdEHspG/pZEpKhWlPLrIfmO8P/lDFjTEdok= +github.com/tikv/pd/client v0.0.0-20260805103528-afa43111d149/go.mod h1:sfdha4LXeUkSs2Z7N5jLzDEtm0GE7x+Glm2pW3UgEpA= github.com/tinylib/msgp v1.5.0 h1:GWnqAE54wmnlFazjq2+vgr736Akg58iiHImh+kPY2pc= github.com/tinylib/msgp v1.5.0/go.mod h1:cvjFkb4RiC8qSBOPMGPSzSAx47nAsfhLVTCZZNuHv5o= github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= @@ -1027,8 +1024,8 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= +github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= github.com/zyedidia/generic v1.2.1 h1:Zv5KS/N2m0XZZiuLS82qheRG4X1o5gsWreGb0hR7XDc= github.com/zyedidia/generic v1.2.1/go.mod h1:ly2RBz4mnz1yeuVbQA/VFwGjK3mnHGRj1JuoG336Bis= go.etcd.io/bbolt v1.3.10 h1:+BqfJTcCzTItrop8mq/lbzL8wSGtj94UO/3U31shqG0= @@ -1071,8 +1068,8 @@ go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfC go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= -go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= -go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= @@ -1127,8 +1124,8 @@ golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto= golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o= -golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8= +golang.org/x/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU= +golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU= 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= @@ -1202,8 +1199,8 @@ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= -golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1244,11 +1241,9 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw= -golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= -golang.org/x/telemetry v0.0.0-20260625142307-59b4966ccb57 h1:nwGZBCt+FnXUrGsj5vjzAsEmkcaFvd82BbOjECiFYZc= -golang.org/x/telemetry v0.0.0-20260625142307-59b4966ccb57/go.mod h1:3AWMyWHS+caVoiEXpiq6+tzKA40J4vQT3MYr80ZtQpc= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1336,8 +1331,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE= -google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= +google.golang.org/genproto v0.0.0-20250324211829-b45e905df463 h1:qEFnJI6AnfZk0NNe8YTyXQh5i//Zxi4gBHwRgp76qpw= +google.golang.org/genproto v0.0.0-20250324211829-b45e905df463/go.mod h1:SqIx1NV9hcvqdLHo7uNZDS5lrUJybQ3evo3+z/WBfA0= google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= @@ -1355,8 +1350,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= -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/grpc/examples v0.0.0-20250407062114-b368379ef8f6 h1:ExN12ndbJ608cboPYflpTny6mXSzPrDLh0iTaVrRrds= +google.golang.org/grpc/examples v0.0.0-20250407062114-b368379ef8f6/go.mod h1:6ytKWczdvnpnO+m+JiG9NjEDzR1FJfsnmJdG7B8QVZ8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/maintainer/maintainer_manager_test.go b/maintainer/maintainer_manager_test.go index 9a78795494..9c3f1abe54 100644 --- a/maintainer/maintainer_manager_test.go +++ b/maintainer/maintainer_manager_test.go @@ -671,13 +671,13 @@ func TestStopNotExistsMaintainer(t *testing.T) { ctrl := gomock.NewController(t) defer ctrl.Finish() meta := &keyspacepb.KeyspaceMeta{ - Id: 0, - Name: "default", + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: 0}, + Name: "default", } if kerneltype.IsNextGen() { meta = &keyspacepb.KeyspaceMeta{ - Id: 1, - Name: "ks1", + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: 1}, + Name: "ks1", } } keyspaceManager := keyspace.NewMockManager(ctrl) diff --git a/pkg/common/span_op.go b/pkg/common/span_op.go index 16033dc2e8..56b31ab343 100644 --- a/pkg/common/span_op.go +++ b/pkg/common/span_op.go @@ -122,7 +122,7 @@ func GetKeyspaceTableRange(keyspaceID uint32, tableID int64) (startKey, endKey [ // But it actually use the keyspaceID only // We construct a KeyspaceMeta to make the codec happy meta := &keyspacepb.KeyspaceMeta{ - Id: keyspaceID, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: keyspaceID}, } codec, err := tikv.NewCodecV2(tikv.ModeTxn, meta) diff --git a/pkg/keyspace/keyspace_manager.go b/pkg/keyspace/keyspace_manager.go index 635f3679cf..aa4e293494 100644 --- a/pkg/keyspace/keyspace_manager.go +++ b/pkg/keyspace/keyspace_manager.go @@ -54,8 +54,8 @@ type manager struct { } var defaultKeyspaceMeta = &keyspacepb.KeyspaceMeta{ - Name: common.DefaultKeyspaceName, - Id: common.DefaultKeyspaceID, + Name: common.DefaultKeyspaceName, + Keyspace: &keyspacepb.KeyspaceMeta_Id{Id: common.DefaultKeyspaceID}, } func (k *manager) LoadKeyspace(ctx context.Context, keyspace string) (*keyspacepb.KeyspaceMeta, error) { diff --git a/pkg/upstream/upstream.go b/pkg/upstream/upstream.go index d407c75a16..16ef36d622 100644 --- a/pkg/upstream/upstream.go +++ b/pkg/upstream/upstream.go @@ -131,7 +131,7 @@ func CreateTiStore(ctx context.Context, urls string, credential *security.Creden if err != nil { return err } - return disablePDRouterClient(tiStore) + return DisablePDRouterClient(tiStore) }, retry.WithMaxTries(defaultMaxRetry), retry.WithBackoffBaseDelay(200), retry.WithBackoffMaxDelay(4000), @@ -144,7 +144,9 @@ func CreateTiStore(ctx context.Context, urls string, credential *security.Creden return tiStore, nil } -func disablePDRouterClient(storage tidbkv.Storage) error { +// DisablePDRouterClient disables the streaming PD router used by a TiKV storage. +// To be compatible with old PD which doesn't support the `QueryRegion` API. +func DisablePDRouterClient(storage tidbkv.Storage) error { provider, ok := storage.(pdClientProvider) if !ok { return nil @@ -179,6 +181,7 @@ func initUpstream(ctx context.Context, up *Upstream, cfg *NodeTopologyCfg) (err if !up.isDefaultUpstream { up.PDClient, err = pd.NewClientWithContext( ctx, "cdc-upstream", up.PdEndpoints, up.SecurityConfig.PDSecurityOption(), + pdopt.WithEnableRouterClient(false), // Compatible with old PD which doesn't support the `QueryRegion` API. // the default `timeout` is 3s, maybe too small if the pd is busy, // set to 10s to avoid frequent timeout. pdopt.WithCustomTimeoutOption(10*time.Second), diff --git a/pkg/upstream/upstream_test.go b/pkg/upstream/upstream_test.go index d9388cfb43..dfc7885364 100644 --- a/pkg/upstream/upstream_test.go +++ b/pkg/upstream/upstream_test.go @@ -23,14 +23,38 @@ import ( "github.com/pingcap/errors" "github.com/pingcap/ticdc/pkg/etcd" "github.com/pingcap/ticdc/pkg/node" + tidbkv "github.com/pingcap/tidb/pkg/kv" "github.com/prometheus/client_golang/prometheus" "github.com/stretchr/testify/require" + pd "github.com/tikv/pd/client" + pdopt "github.com/tikv/pd/client/opt" "go.etcd.io/etcd/client/pkg/v3/logutil" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) +type pdRouterOptionRecorder struct { + pd.Client + option pdopt.DynamicOption + value any +} + +func (c *pdRouterOptionRecorder) UpdateOption(option pdopt.DynamicOption, value any) error { + c.option = option + c.value = value + return nil +} + +type pdClientStorage struct { + tidbkv.Storage + client pd.Client +} + +func (s pdClientStorage) GetPDClient() pd.Client { + return s.client +} + func TestUpstreamShouldClose(t *testing.T) { t.Parallel() @@ -149,3 +173,12 @@ func TestIsCreateTiStoreRetryable(t *testing.T) { require.False(t, isCreateTiStoreRetryable(canceledCtx, context.Canceled)) require.False(t, isCreateTiStoreRetryable(canceledCtx, errors.Trace(context.Canceled))) } + +func TestDisablePDRouterClient(t *testing.T) { + t.Parallel() + + client := &pdRouterOptionRecorder{} + require.NoError(t, DisablePDRouterClient(pdClientStorage{client: client})) + require.Equal(t, pdopt.EnableRouterClient, client.option) + require.Equal(t, false, client.value) +} diff --git a/server/server_prepare.go b/server/server_prepare.go index 60621e4dc7..b5ab9e32f8 100644 --- a/server/server_prepare.go +++ b/server/server_prepare.go @@ -71,7 +71,7 @@ func (c *server) prepare(ctx context.Context) (err error) { MinConnectTimeout: 3 * time.Second, }), ), - pdopt.WithEnableRouterClient(false), + pdopt.WithEnableRouterClient(false), // Compatible with old PD which doesn't support the `QueryRegion` API. pdopt.WithForwardingOption(config.EnablePDForwarding)) if err != nil { return errors.Trace(err)