From e675bd4b77b25090c4a86f2132644e1670dada72 Mon Sep 17 00:00:00 2001 From: dongmen <414110582@qq.com> Date: Wed, 8 Feb 2023 10:35:58 +0800 Subject: [PATCH] *(all): update dependencies on tidb and pd. (#8126) close pingcap/tiflow#8110, ref pingcap/tiflow#8115 (cherry picked from commit 5a38ed9a89e2a8b0d65dc5d04bbd6a10a807f8b3) --- Makefile | 21 +- cdc/api/v2/changefeed_test.go | 2 +- cdc/entry/schema/snapshot.go | 35 +- cdc/entry/schema/snapshot_test.go | 5 +- cdc/entry/schema_storage.go | 4 +- cdc/entry/schema_storage_test.go | 21 +- cdc/owner/schema_test.go | 4 +- cdc/server/server_test.go | 2 +- cdc/sink/codec/maxwell/maxwell_message.go | 2 +- dm/master/election_test.go | 2 +- dm/master/etcd_test.go | 2 +- dm/master/openapi_view_test.go | 2 +- dm/master/server_test.go | 1596 +++++++++-------- dm/master/workerrpc/workerrpc_test.go | 2 +- dm/pkg/election/election_test.go | 2 +- dm/pkg/etcdutil/etcdutil_test.go | 2 +- dm/pkg/retry/errors.go | 12 +- dm/tests/all_mode/run.sh | 2 +- dm/tests/check_task/run.sh | 2 +- dm/tests/full_mode/run.sh | 4 +- dm/tests/handle_error/run.sh | 2 +- dm/tests/lightning_mode/run.sh | 55 +- dm/tests/many_tables/run.sh | 2 +- dm/tests/print_status/run.sh | 2 +- dm/tests/shardddl1_1/run.sh | 2 +- dm/tests/sync_collation/run.sh | 8 +- dm/tests/tracker_ignored_ddl/run.sh | 2 +- dm/unit/unit_test.go | 55 + dm/worker/server_test.go | 2 +- dm/worker/source_worker_test.go | 2 +- .../integration_tests/dm_collation/run.sh | 2 +- .../integration_tests/dm_full_mode/run.sh | 4 +- go.mod | 105 +- go.sum | 841 ++++++--- pkg/etcd/etcd.go | 2 +- pkg/p2p/message_router_test.go | 2 +- pkg/pdutil/utils.go | 9 +- pkg/pdutil/utils_test.go | 47 + pkg/txnutil/gc/testing.go | 8 +- pkg/version/check_test.go | 2 +- tests/integration_tests/multi_source/main.go | 4 +- 41 files changed, 1681 insertions(+), 1201 deletions(-) create mode 100644 pkg/pdutil/utils_test.go diff --git a/Makefile b/Makefile index aa0c7de75ef..50e2e48c3fe 100644 --- a/Makefile +++ b/Makefile @@ -40,14 +40,23 @@ ifeq (${CDC_ENABLE_VENDOR}, 1) GOVENDORFLAG := -mod=vendor endif -GOBUILD := CGO_ENABLED=0 $(GO) build $(BUILD_FLAG) -trimpath $(GOVENDORFLAG) +# Since TiDB add a new dependency on github.com/cloudfoundry/gosigar, +# We need to add CGO_ENABLED=1 to make it work when build TiCDC in Darwin OS. +# These logic is to check if the OS is Darwin, if so, add CGO_ENABLED=1. +# ref: https://github.com/cloudfoundry/gosigar/issues/58#issuecomment-1150925711 +# ref: https://github.com/pingcap/tidb/pull/39526#issuecomment-1407952955 +OS := "$(shell go env GOOS)" +ifeq (${OS}, "linux") + CGO := 0 +else ifeq (${OS}, "darwin") + CGO := 1 +endif + +GOBUILD := CGO_ENABLED=$(CGO) $(GO) build $(BUILD_FLAG) -trimpath $(GOVENDORFLAG) GOBUILDNOVENDOR := CGO_ENABLED=0 $(GO) build $(BUILD_FLAG) -trimpath -GOTEST := CGO_ENABLED=1 $(GO) test -p $(P) --race +GOTEST := CGO_ENABLED=1 $(GO) test -p $(P) --race --tags=intest GOTESTNORACE := CGO_ENABLED=1 $(GO) test -p $(P) -ARCH := "$(shell uname -s)" -LINUX := "Linux" -MAC := "Darwin" CDC_PKG := github.com/pingcap/tiflow DM_PKG := github.com/pingcap/tiflow/dm ENGINE_PKG := github.com/pingcap/tiflow/engine @@ -163,7 +172,7 @@ unit_test_in_verify_ci: check_failpoint_ctl tools/bin/gotestsum tools/bin/gocov mkdir -p "$(TEST_DIR)" $(FAILPOINT_ENABLE) @export log_level=error;\ - CGO_ENABLED=1 tools/bin/gotestsum --junitfile cdc-junit-report.xml -- -v -timeout 5m -p $(P) --race \ + CGO_ENABLED=1 tools/bin/gotestsum --junitfile cdc-junit-report.xml -- -v -timeout 5m -p $(P) --race --tags=intest \ -covermode=atomic -coverprofile="$(TEST_DIR)/cov.unit.out" $(PACKAGES_TICDC) \ || { $(FAILPOINT_DISABLE); exit 1; } tools/bin/gocov convert "$(TEST_DIR)/cov.unit.out" | tools/bin/gocov-xml > cdc-coverage.xml diff --git a/cdc/api/v2/changefeed_test.go b/cdc/api/v2/changefeed_test.go index 1c5b4bdcbb7..9906dffc0aa 100644 --- a/cdc/api/v2/changefeed_test.go +++ b/cdc/api/v2/changefeed_test.go @@ -235,7 +235,7 @@ func TestUpdateChangefeed(t *testing.T) { cp.EXPECT().IsOwner().Return(true).AnyTimes() // case 1 invalid id - invalidID := "#Invalid_" + invalidID := "Invalid_#" w := httptest.NewRecorder() req, _ := http.NewRequestWithContext(context.Background(), update.method, fmt.Sprintf(update.url, invalidID), nil) diff --git a/cdc/entry/schema/snapshot.go b/cdc/entry/schema/snapshot.go index 34d1d26a146..f3d4955ae6a 100644 --- a/cdc/entry/schema/snapshot.go +++ b/cdc/entry/schema/snapshot.go @@ -121,7 +121,7 @@ func NewSingleSnapshotFromMeta(meta *timeta.Meta, currentTs uint64, forceReplica // meta is nil only in unit tests if meta == nil { snap := NewEmptySnapshot(forceReplicate) - snap.InitConcurrentDDLTables() + snap.InitPreExistingTables() snap.inner.currentTs = currentTs return snap, nil } @@ -210,12 +210,16 @@ const ( mdlCreateTable = "create table mysql.tidb_mdl_info(job_id BIGINT NOT NULL PRIMARY KEY, version BIGINT NOT NULL, table_ids text(65535));" ) -// InitConcurrentDDLTables imitates the creating table logic for concurrent DDL. +// InitPreExistingTables initializes the pre-existing tables in an empty Snapshot. // Since v6.2.0, tables of concurrent DDL will be directly written as meta KV in // TiKV, without being written to history DDL jobs. So the Snapshot which is not // build from meta needs this method to handle history DDL. -func (s *Snapshot) InitConcurrentDDLTables() { - tableIDs := [...]int64{ddl.JobTableID, ddl.ReorgTableID, ddl.HistoryTableID} +// Since v6.5.0, Backfill tables is written as meta KV in TiKV, so the Snapshot +// which is not build from meta needs this method to handle history DDL. +// See:https://github.com/pingcap/tidb/pull/39616 +func (s *Snapshot) InitPreExistingTables() { + ddlJobTableIDs := [...]int64{ddl.JobTableID, ddl.ReorgTableID, ddl.HistoryTableID} + backfillTableIDs := [...]int64{ddl.BackfillTableID, ddl.BackfillHistoryTableID} mysqlDBInfo := &timodel.DBInfo{ ID: mysqlDBID, @@ -231,10 +235,20 @@ func (s *Snapshot) InitConcurrentDDLTables() { stmt, _ := p.ParseOneStmt(table.SQL, "", "") tblInfo, _ := ddl.BuildTableInfoFromAST(stmt.(*ast.CreateTableStmt)) tblInfo.State = timodel.StatePublic - tblInfo.ID = tableIDs[i] + tblInfo.ID = ddlJobTableIDs[i] wrapped := model.WrapTableInfo(mysqlDBID, mysql.SystemDB, dummyTS, tblInfo) _ = s.inner.createTable(wrapped, dummyTS) } + + for i, table := range session.BackfillTables { + stmt, _ := p.ParseOneStmt(table.SQL, "", "") + tblInfo, _ := ddl.BuildTableInfoFromAST(stmt.(*ast.CreateTableStmt)) + tblInfo.State = timodel.StatePublic + tblInfo.ID = backfillTableIDs[i] + wrapped := model.WrapTableInfo(mysqlDBID, mysql.SystemDB, dummyTS, tblInfo) + _ = s.inner.createTable(wrapped, dummyTS) + } + stmt, _ := p.ParseOneStmt(mdlCreateTable, "", "") tblInfo, _ := ddl.BuildTableInfoFromAST(stmt.(*ast.CreateTableStmt)) tblInfo.State = timodel.StatePublic @@ -514,8 +528,14 @@ func (s *Snapshot) DoHandleDDL(job *timodel.Job) error { } // TableCount counts tables in the snapshot. It's only for tests. -func (s *Snapshot) TableCount(includeIneligible bool) (count int) { - s.IterTables(includeIneligible, func(i *model.TableInfo) { count += 1 }) +func (s *Snapshot) TableCount(includeIneligible bool, + filter func(schema, table string) bool, +) (count int) { + s.IterTables(includeIneligible, func(i *model.TableInfo) { + if filter(i.TableName.Schema, i.TableName.Table) { + count++ + } + }) return } @@ -552,7 +572,6 @@ func (s *Snapshot) DumpToString() string { schema, _ := s.inner.schemaByID(schemaID) tableNames = append(tableNames, fmt.Sprintf("%s.%s:%d", schema.Name.O, table, target)) }) - return fmt.Sprintf("%s\n%s\n%s\n%s\n%s", strings.Join(schemas, "\t"), strings.Join(tables, "\t"), diff --git a/cdc/entry/schema/snapshot_test.go b/cdc/entry/schema/snapshot_test.go index bbad05db651..d8248784f6c 100644 --- a/cdc/entry/schema/snapshot_test.go +++ b/cdc/entry/schema/snapshot_test.go @@ -199,9 +199,10 @@ func TestTable(t *testing.T) { require.False(t, snap.IsIneligibleTableID(12)) require.False(t, snap.IsIneligibleTableID(12+65536)) } - // IterTables should get no available tables. - require.Equal(t, snap.TableCount(true), 0) + require.Equal(t, snap.TableCount(true, func(table, schema string) bool { + return true + }), 0) } } diff --git a/cdc/entry/schema_storage.go b/cdc/entry/schema_storage.go index db76bb14faa..a415383b468 100644 --- a/cdc/entry/schema_storage.go +++ b/cdc/entry/schema_storage.go @@ -74,7 +74,7 @@ func NewSchemaStorage( ) if meta == nil { snap = schema.NewEmptySnapshot(forceReplicate) - snap.InitConcurrentDDLTables() + snap.InitPreExistingTables() } else { snap, err = schema.NewSnapshotFromMeta(meta, startTs, forceReplicate) if err != nil { @@ -188,7 +188,7 @@ func (s *schemaStorageImpl) HandleDDLJob(job *timodel.Job) error { snap = lastSnap.Copy() } else { snap = schema.NewEmptySnapshot(s.forceReplicate) - snap.InitConcurrentDDLTables() + snap.InitPreExistingTables() } if err := snap.HandleDDL(job); err != nil { log.Error("handle DDL failed", diff --git a/cdc/entry/schema_storage_test.go b/cdc/entry/schema_storage_test.go index 9975a586c07..9a09313f8d7 100644 --- a/cdc/entry/schema_storage_test.go +++ b/cdc/entry/schema_storage_test.go @@ -618,7 +618,7 @@ func TestMultiVersionStorage(t *testing.T) { require.False(t, exist) lastSchemaTs := storage.DoGC(0) - // Snapshot.InitConcurrentDDLTables will create a schema with ts = 1 + // Snapshot.InitPreExistingTables will create a schema with ts = 1 require.Equal(t, uint64(1), lastSchemaTs) snap, err = storage.GetSnapshot(ctx, 100) @@ -729,12 +729,21 @@ func TestExplicitTables(t *testing.T) { snap3, err := schema.NewSnapshotFromMeta(meta2, ver2.Ver, true /* forceReplicate */) require.Nil(t, err) - require.Equal(t, snap2.TableCount(true)-snap1.TableCount(true), 5) - // some system tables are also ineligible - require.GreaterOrEqual(t, snap2.TableCount(false), 4) + // we don't need to count system tables since TiCDC + // don't replicate them and TiDB change them frequently, + // so we don't need to consider them in the table count + systemTablesFilter := func(dbName, tableName string) bool { + return dbName != "mysql" && dbName != "information_schema" + } + require.Equal(t, 5, snap2.TableCount(true, + systemTablesFilter)-snap1.TableCount(true, systemTablesFilter)) + // only test simple_test1 included + require.Equal(t, 1, snap2.TableCount(false, systemTablesFilter)) - require.Equal(t, snap3.TableCount(true)-snap1.TableCount(true), 5) - require.Equal(t, snap3.TableCount(false), 45) + require.Equal(t, 5, snap3.TableCount(true, + systemTablesFilter)-snap1.TableCount(true, systemTablesFilter)) + // since we create a snapshot from meta2 and forceReplicate is true, so all tables are included + require.Equal(t, 5, snap3.TableCount(false, systemTablesFilter)) } /* diff --git a/cdc/owner/schema_test.go b/cdc/owner/schema_test.go index d7a670fe67c..dc109c3f37b 100644 --- a/cdc/owner/schema_test.go +++ b/cdc/owner/schema_test.go @@ -95,7 +95,7 @@ func TestAllTables(t *testing.T) { require.Equal(t, tableName, model.TableName{ Schema: "test", Table: "t1", - TableID: 76, + TableID: 84, }) // add ineligible table require.Nil(t, schema.HandleDDL(helper.DDL2Job("create table test.t2(id int)"))) @@ -104,7 +104,7 @@ func TestAllTables(t *testing.T) { require.Equal(t, tableName, model.TableName{ Schema: "test", Table: "t1", - TableID: 76, + TableID: 84, }) } diff --git a/cdc/server/server_test.go b/cdc/server/server_test.go index 6cc83a53199..06eabda569f 100644 --- a/cdc/server/server_test.go +++ b/cdc/server/server_test.go @@ -40,7 +40,7 @@ import ( "github.com/pingcap/tiflow/pkg/security" "github.com/pingcap/tiflow/pkg/util" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/server/v3/embed" "golang.org/x/sync/errgroup" diff --git a/cdc/sink/codec/maxwell/maxwell_message.go b/cdc/sink/codec/maxwell/maxwell_message.go index 0ef5836f655..3af26023907 100644 --- a/cdc/sink/codec/maxwell/maxwell_message.go +++ b/cdc/sink/codec/maxwell/maxwell_message.go @@ -21,7 +21,7 @@ import ( "github.com/pingcap/tiflow/cdc/model" "github.com/pingcap/tiflow/cdc/sink/codec/internal" cerror "github.com/pingcap/tiflow/pkg/errors" - "github.com/tikv/pd/pkg/tsoutil" + "github.com/tikv/pd/pkg/utils/tsoutil" ) type maxwellMessage struct { diff --git a/dm/master/election_test.go b/dm/master/election_test.go index cdfde465f91..06fab3eae86 100644 --- a/dm/master/election_test.go +++ b/dm/master/election_test.go @@ -24,7 +24,7 @@ import ( "github.com/pingcap/tiflow/dm/pkg/etcdutil" "github.com/pingcap/tiflow/dm/pkg/log" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" ) func TestFailToStartLeader(t *testing.T) { diff --git a/dm/master/etcd_test.go b/dm/master/etcd_test.go index 67ddc68135a..2987612e334 100644 --- a/dm/master/etcd_test.go +++ b/dm/master/etcd_test.go @@ -26,7 +26,7 @@ import ( "github.com/pingcap/tiflow/dm/pkg/log" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/pingcap/tiflow/dm/pkg/utils" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/server/v3/embed" ) diff --git a/dm/master/openapi_view_test.go b/dm/master/openapi_view_test.go index dffd7b061bd..4e46327dee6 100644 --- a/dm/master/openapi_view_test.go +++ b/dm/master/openapi_view_test.go @@ -43,7 +43,7 @@ import ( "github.com/pingcap/tiflow/dm/pkg/utils" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" ) // some data for test. diff --git a/dm/master/server_test.go b/dm/master/server_test.go index 760329faa92..b69716b396f 100644 --- a/dm/master/server_test.go +++ b/dm/master/server_test.go @@ -20,6 +20,7 @@ import ( "io" "io/ioutil" "net" + "net/http" "os" "path/filepath" "sort" @@ -31,7 +32,6 @@ import ( "github.com/DATA-DOG/go-sqlmock" "github.com/go-mysql-org/go-mysql/mysql" "github.com/golang/mock/gomock" - "github.com/pingcap/check" "github.com/pingcap/errors" "github.com/pingcap/failpoint" tiddl "github.com/pingcap/tidb/ddl" @@ -44,7 +44,10 @@ import ( "github.com/pingcap/tiflow/dm/checker" common2 "github.com/pingcap/tiflow/dm/common" "github.com/pingcap/tiflow/dm/config" + "github.com/pingcap/tiflow/dm/config/dbconfig" + "github.com/pingcap/tiflow/dm/config/security" "github.com/pingcap/tiflow/dm/ctl/common" + "github.com/pingcap/tiflow/dm/loader" "github.com/pingcap/tiflow/dm/master/scheduler" "github.com/pingcap/tiflow/dm/master/shardddl" "github.com/pingcap/tiflow/dm/master/workerrpc" @@ -62,7 +65,8 @@ import ( "github.com/pingcap/tiflow/dm/pkg/utils" "github.com/pingcap/tiflow/pkg/version" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/stretchr/testify/suite" + "github.com/tikv/pd/pkg/utils/tempurl" clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/server/v3/verify" "go.etcd.io/etcd/tests/v3/integration" @@ -89,7 +93,6 @@ mysql-instances: - source-id: "mysql-replica-01" block-allow-list: "instance" route-rules: ["sharding-route-rules-table", "sharding-route-rules-schema"] - column-mapping-rules: ["instance-1"] mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" @@ -97,7 +100,6 @@ mysql-instances: - source-id: "mysql-replica-02" block-allow-list: "instance" route-rules: ["sharding-route-rules-table", "sharding-route-rules-schema"] - column-mapping-rules: ["instance-2"] mydumper-config-name: "global" loader-config-name: "global" syncer-config-name: "global" @@ -120,23 +122,6 @@ routes: schema-pattern: sharding* target-schema: db_target -column-mappings: - instance-1: - schema-pattern: "sharding*" - table-pattern: "t*" - expression: "partition id" - source-column: "id" - target-column: "id" - arguments: ["1", "sharding", "t"] - - instance-2: - schema-pattern: "sharding*" - table-pattern: "t*" - expression: "partition id" - source-column: "id" - target-column: "id" - arguments: ["2", "sharding", "t"] - mydumpers: global: threads: 4 @@ -163,40 +148,29 @@ var ( keepAliveTTL = int64(10) ) -type testMaster struct { +type testMasterSuite struct { + suite.Suite + workerClients map[string]workerrpc.Client saveMaxRetryNum int electionTTLBackup int - testT *testing.T testEtcdCluster *integration.ClusterV3 etcdTestCli *clientv3.Client } -var ( - testSuite = check.SerialSuites(&testMaster{}) - pwd string -) - -func TestMaster(t *testing.T) { - err := log.InitLogger(&log.Config{}) - if err != nil { - t.Fatal(err) - } - pwd, err = os.Getwd() - if err != nil { - t.Fatal(err) - } - integration.BeforeTestExternal(t) - // inject *testing.T to testMaster - s := testSuite.(*testMaster) - s.testT = t - - check.TestingT(t) +func TestMasterSuite(t *testing.T) { + suite.Run(t, new(testMasterSuite)) } -func (t *testMaster) SetUpSuite(c *check.C) { - c.Assert(log.InitLogger(&log.Config{}), check.IsNil) +var pwd string + +func (t *testMasterSuite) SetupSuite() { + require.NoError(t.T(), log.InitLogger(&log.Config{})) + var err error + pwd, err = os.Getwd() + require.NoError(t.T(), err) + integration.BeforeTestExternal(t.T()) t.workerClients = make(map[string]workerrpc.Client) t.saveMaxRetryNum = maxRetryNum t.electionTTLBackup = electionTTL @@ -205,36 +179,38 @@ func (t *testMaster) SetUpSuite(c *check.C) { checkAndAdjustSourceConfigForDMCtlFunc = checkAndNoAdjustSourceConfigMock } -func (t *testMaster) TearDownSuite(c *check.C) { +func (t *testMasterSuite) TearDownSuite() { maxRetryNum = t.saveMaxRetryNum electionTTL = t.electionTTLBackup checkAndAdjustSourceConfigForDMCtlFunc = checkAndAdjustSourceConfig } -func (t *testMaster) SetUpTest(c *check.C) { - t.testEtcdCluster = integration.NewClusterV3(t.testT, &integration.ClusterConfig{Size: 1}) +func (t *testMasterSuite) SetupTest() { + t.testEtcdCluster = integration.NewClusterV3(t.T(), &integration.ClusterConfig{Size: 1}) t.etcdTestCli = t.testEtcdCluster.RandClient() - t.clearEtcdEnv(c) + t.clearEtcdEnv() } -func (t *testMaster) TearDownTest(c *check.C) { - t.clearEtcdEnv(c) - t.testEtcdCluster.Terminate(t.testT) +func (t *testMasterSuite) TearDownTest() { + t.clearEtcdEnv() + t.testEtcdCluster.Terminate(t.T()) } -func (t *testMaster) clearEtcdEnv(c *check.C) { - c.Assert(ha.ClearTestInfoOperation(t.etcdTestCli), check.IsNil) +func (t *testMasterSuite) clearEtcdEnv() { + require.NoError(t.T(), ha.ClearTestInfoOperation(t.etcdTestCli)) } -func (t testMaster) clearSchedulerEnv(c *check.C, cancel context.CancelFunc, wg *sync.WaitGroup) { +func (t *testMasterSuite) clearSchedulerEnv(cancel context.CancelFunc, wg *sync.WaitGroup) { cancel() wg.Wait() - t.clearEtcdEnv(c) + t.clearEtcdEnv() } -func stageDeepEqualExcludeRev(c *check.C, stage, expectStage ha.Stage) { +func stageDeepEqualExcludeRev(t *testing.T, stage, expectStage ha.Stage) { + t.Helper() + expectStage.Revision = stage.Revision - c.Assert(stage, check.DeepEquals, expectStage) + require.Equal(t, expectStage, stage) } func mockRevelantWorkerClient(mockWorkerClient *pbmock.MockWorkerClient, taskName, sourceID string, masterReq interface{}) { @@ -302,19 +278,15 @@ func mockRevelantWorkerClient(mockWorkerClient *pbmock.MockWorkerClient, taskNam ).Return(queryResp, nil).MaxTimes(maxRetryNum) } -func createTableInfo(c *check.C, p *parser.Parser, se sessionctx.Context, tableID int64, sql string) *model.TableInfo { +func createTableInfo(t *testing.T, p *parser.Parser, se sessionctx.Context, tableID int64, sql string) *model.TableInfo { + t.Helper() + node, err := p.ParseOneStmt(sql, "utf8mb4", "utf8mb4_bin") - if err != nil { - c.Fatalf("fail to parse stmt, %v", err) - } + require.NoError(t, err) createStmtNode, ok := node.(*ast.CreateTableStmt) - if !ok { - c.Fatalf("%s is not a CREATE TABLE statement", sql) - } + require.True(t, ok, "%s is not a CREATE TABLE statement", sql) info, err := tiddl.MockTableInfo(se, createStmtNode, tableID) - if err != nil { - c.Fatalf("fail to create table info, %v", err) - } + require.NoError(t, err) return info } @@ -353,11 +325,13 @@ func makeWorkerClientsForHandle(ctrl *gomock.Controller, taskName string, source return workerClients } -func testDefaultMasterServer(c *check.C) *Server { +func testDefaultMasterServer(t *testing.T) *Server { + t.Helper() + cfg := NewConfig() err := cfg.FromContent(SampleConfig) - c.Assert(err, check.IsNil) - cfg.DataDir = c.MkDir() + require.NoError(t, err) + cfg.DataDir = t.TempDir() server := NewServer(cfg) server.leader.Store(oneselfLeader) go server.ap.Start(context.Background()) @@ -365,86 +339,101 @@ func testDefaultMasterServer(c *check.C) *Server { return server } -func (t *testMaster) testMockScheduler(ctx context.Context, wg *sync.WaitGroup, c *check.C, sources, workers []string, password string, workerClients map[string]workerrpc.Client) (*scheduler.Scheduler, []context.CancelFunc) { +func (t *testMasterSuite) testMockScheduler( + ctx context.Context, + wg *sync.WaitGroup, + sources, workers []string, + password string, + workerClients map[string]workerrpc.Client, +) (*scheduler.Scheduler, []context.CancelFunc) { logger := log.L() - scheduler2 := scheduler.NewScheduler(&logger, config.Security{}) + scheduler2 := scheduler.NewScheduler(&logger, security.Security{}) err := scheduler2.Start(ctx, t.etcdTestCli) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) cancels := make([]context.CancelFunc, 0, 2) for i := range workers { // add worker to scheduler's workers map name := workers[i] - c.Assert(scheduler2.AddWorker(name, workers[i]), check.IsNil) + require.NoError(t.T(), scheduler2.AddWorker(name, workers[i])) scheduler2.SetWorkerClientForTest(name, workerClients[workers[i]]) // operate mysql config on this worker cfg := config.NewSourceConfig() cfg.SourceID = sources[i] cfg.From.Password = password - c.Assert(scheduler2.AddSourceCfg(cfg), check.IsNil, check.Commentf("all sources: %v", sources)) + require.NoError(t.T(), scheduler2.AddSourceCfg(cfg)) wg.Add(1) ctx1, cancel1 := context.WithCancel(ctx) cancels = append(cancels, cancel1) go func(ctx context.Context, workerName string) { defer wg.Done() - c.Assert(ha.KeepAlive(ctx, t.etcdTestCli, workerName, keepAliveTTL), check.IsNil) + require.NoError(t.T(), ha.KeepAlive(ctx, t.etcdTestCli, workerName, keepAliveTTL)) }(ctx1, name) idx := i - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { w := scheduler2.GetWorkerBySource(sources[idx]) return w != nil && w.BaseInfo().Name == name - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) } return scheduler2, cancels } -func (t *testMaster) testMockSchedulerForRelay(ctx context.Context, wg *sync.WaitGroup, c *check.C, sources, workers []string, password string, workerClients map[string]workerrpc.Client) (*scheduler.Scheduler, []context.CancelFunc) { +func (t *testMasterSuite) testMockSchedulerForRelay( + ctx context.Context, + wg *sync.WaitGroup, + sources, workers []string, + password string, + workerClients map[string]workerrpc.Client, +) (*scheduler.Scheduler, []context.CancelFunc) { logger := log.L() - scheduler2 := scheduler.NewScheduler(&logger, config.Security{}) + scheduler2 := scheduler.NewScheduler(&logger, security.Security{}) err := scheduler2.Start(ctx, t.etcdTestCli) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) cancels := make([]context.CancelFunc, 0, 2) for i := range workers { // add worker to scheduler's workers map name := workers[i] - c.Assert(scheduler2.AddWorker(name, workers[i]), check.IsNil) + require.NoError(t.T(), scheduler2.AddWorker(name, workers[i])) scheduler2.SetWorkerClientForTest(name, workerClients[workers[i]]) // operate mysql config on this worker cfg := config.NewSourceConfig() cfg.SourceID = sources[i] cfg.From.Password = password - c.Assert(scheduler2.AddSourceCfg(cfg), check.IsNil, check.Commentf("all sources: %v", sources)) + require.NoError(t.T(), scheduler2.AddSourceCfg(cfg)) wg.Add(1) ctx1, cancel1 := context.WithCancel(ctx) cancels = append(cancels, cancel1) go func(ctx context.Context, workerName string) { defer wg.Done() - c.Assert(ha.KeepAlive(ctx, t.etcdTestCli, workerName, keepAliveTTL), check.IsNil) + require.NoError(t.T(), ha.KeepAlive(ctx, t.etcdTestCli, workerName, keepAliveTTL)) }(ctx1, name) // wait the mock worker has alive - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { resp, err2 := t.etcdTestCli.Get(ctx, common2.WorkerKeepAliveKeyAdapter.Encode(name)) - c.Assert(err2, check.IsNil) + require.NoError(t.T(), err2) return resp.Count == 1 - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) - c.Assert(scheduler2.StartRelay(sources[i], []string{workers[i]}), check.IsNil) + require.NoError(t.T(), scheduler2.StartRelay(sources[i], []string{workers[i]})) idx := i - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { relayWorkers, err2 := scheduler2.GetRelayWorkers(sources[idx]) - c.Assert(err2, check.IsNil) + require.NoError(t.T(), err2) return len(relayWorkers) == 1 && relayWorkers[0].BaseInfo().Name == name - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) } return scheduler2, cancels } -func generateServerConfig(c *check.C, name string) *Config { +func generateServerConfig(t *testing.T, name string) *Config { + t.Helper() + // create a new cluster cfg1 := NewConfig() - c.Assert(cfg1.FromContent(SampleConfig), check.IsNil) + err := cfg1.FromContent(SampleConfig) + require.NoError(t, err) cfg1.Name = name - cfg1.DataDir = c.MkDir() + cfg1.DataDir = t.TempDir() cfg1.MasterAddr = tempurl.Alloc()[len("http://"):] cfg1.AdvertiseAddr = cfg1.MasterAddr cfg1.PeerUrls = tempurl.Alloc() @@ -453,11 +442,11 @@ func generateServerConfig(c *check.C, name string) *Config { return cfg1 } -func (t *testMaster) TestQueryStatus(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestQueryStatus() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) sources, workers := defaultWorkerSource() var cancels []context.CancelFunc @@ -475,14 +464,14 @@ func (t *testMaster) TestQueryStatus(c *check.C) { } var wg sync.WaitGroup ctx, cancel := context.WithCancel(context.Background()) - server.scheduler, cancels = t.testMockScheduler(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, cancels = t.testMockScheduler(ctx, &wg, sources, workers, "", t.workerClients) for _, cancelFunc := range cancels { defer cancelFunc() } resp, err := server.QueryStatus(context.Background(), &pb.QueryStatusListRequest{}) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + t.clearSchedulerEnv(cancel, &wg) // query specified sources for _, worker := range workers { @@ -497,36 +486,36 @@ func (t *testMaster) TestQueryStatus(c *check.C) { t.workerClients[worker] = newMockRPCClient(mockWorkerClient) } ctx, cancel = context.WithCancel(context.Background()) - server.scheduler, cancels = t.testMockSchedulerForRelay(ctx, &wg, c, sources, workers, "passwd", t.workerClients) + server.scheduler, cancels = t.testMockSchedulerForRelay(ctx, &wg, sources, workers, "passwd", t.workerClients) for _, cancelFunc := range cancels { defer cancelFunc() } resp, err = server.QueryStatus(context.Background(), &pb.QueryStatusListRequest{ Sources: sources, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) // query with invalid dm-worker[s] resp, err = server.QueryStatus(context.Background(), &pb.QueryStatusListRequest{ Sources: []string{"invalid-source1", "invalid-source2"}, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, "sources .* haven't been added") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Regexp(t.T(), "sources .* haven't been added", resp.Msg) // query with invalid task name resp, err = server.QueryStatus(context.Background(), &pb.QueryStatusListRequest{ Name: "invalid-task-name", }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, "task .* has no source or not exist") - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Regexp(t.T(), "task .* has no source or not exist", resp.Msg) + t.clearSchedulerEnv(cancel, &wg) // TODO: test query with correct task name, this needs to add task first } -func (t *testMaster) TestWaitOperationOkRightResult(c *check.C) { +func (t *testMasterSuite) TestWaitOperationOkRightResult() { cases := []struct { req interface{} resp *pb.QueryStatusResponse @@ -564,7 +553,7 @@ func (t *testMaster) TestWaitOperationOkRightResult(c *check.C) { }, } - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() ctx := context.Background() duration, _ := time.ParseDuration("1s") @@ -578,13 +567,17 @@ func (t *testMaster) TestWaitOperationOkRightResult(c *check.C) { mockWorker := scheduler.NewMockWorker(newMockRPCClient(mockWorkerClient)) ok, msg, _, err := s.waitOperationOk(ctx, mockWorker, "", "", ca.req) - c.Assert(err, check.IsNil) - c.Assert(ok, check.Equals, ca.expectedOK) - c.Assert(msg == "", check.Equals, ca.expectedEmptyMsg) + require.NoError(t.T(), err) + require.Equal(t.T(), ca.expectedOK, ok) + if ca.expectedEmptyMsg { + require.Empty(t.T(), msg) + } else { + require.NotEmpty(t.T(), msg) + } } } -func (t *testMaster) TestStopTaskWithExceptRight(c *check.C) { +func (t *testMasterSuite) TestStopTaskWithExceptRight() { taskName := "test-stop-task" responeses := [][]*pb.QueryStatusResponse{{ &pb.QueryStatusResponse{ @@ -620,7 +613,7 @@ func (t *testMaster) TestStopTaskWithExceptRight(c *check.C) { Op: pb.TaskOp_Delete, Name: taskName, } - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() ctx := context.Background() s := &Server{cfg: &Config{RPCTimeout: time.Second}} @@ -633,13 +626,13 @@ func (t *testMaster) TestStopTaskWithExceptRight(c *check.C) { ).Return(item[0], nil).Return(item[1], nil).MaxTimes(2) mockWorker := scheduler.NewMockWorker(newMockRPCClient(mockWorkerClient)) ok, msg, _, err := s.waitOperationOk(ctx, mockWorker, taskName, "", req) - c.Assert(err, check.IsNil) - c.Assert(ok, check.IsTrue) - c.Assert(msg, check.HasLen, 0) + require.NoError(t.T(), err) + require.True(t.T(), ok) + require.Empty(t.T(), msg) } } -func (t *testMaster) TestFillUnsyncedStatus(c *check.C) { +func (t *testMasterSuite) TestFillUnsyncedStatus() { var ( logger = log.L() task1 = "task1" @@ -799,10 +792,10 @@ func (t *testMaster) TestFillUnsyncedStatus(c *check.C) { for _, ca := range cases { s := &Server{} s.pessimist = shardddl.NewPessimist(&logger, func(task string) []string { return sources }) - c.Assert(s.pessimist.Start(context.Background(), t.etcdTestCli), check.IsNil) + require.NoError(t.T(), s.pessimist.Start(context.Background(), t.etcdTestCli)) for _, i := range ca.infos { _, err := pessimism.PutInfo(t.etcdTestCli, i) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) } if len(ca.infos) > 0 { utils.WaitSomething(20, 100*time.Millisecond, func() bool { @@ -811,23 +804,23 @@ func (t *testMaster) TestFillUnsyncedStatus(c *check.C) { } s.fillUnsyncedStatus(ca.input) - c.Assert(ca.input, check.DeepEquals, ca.expected) + require.Equal(t.T(), ca.expected, ca.input) _, err := pessimism.DeleteInfosOperations(t.etcdTestCli, ca.infos, nil) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) } } -func (t *testMaster) TestCheckTask(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestCheckTask() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) sources, workers := defaultWorkerSource() t.workerClients = makeNilWorkerClients(workers) var wg sync.WaitGroup ctx, cancel := context.WithCancel(context.Background()) - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", t.workerClients) mock := conn.InitVersionDB() defer func() { conn.DefaultDBProvider = &conn.DefaultDBProviderImpl{} @@ -837,36 +830,36 @@ func (t *testMaster) TestCheckTask(c *check.C) { resp, err := server.CheckTask(context.Background(), &pb.CheckTaskRequest{ Task: taskConfig, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) // decode task with error resp, err = server.CheckTask(context.Background(), &pb.CheckTaskRequest{ Task: "invalid toml config", }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + t.clearSchedulerEnv(cancel, &wg) // simulate invalid password returned from scheduler, but config was supported plaintext mysql password, so cfg.SubTaskConfigs will success ctx, cancel = context.WithCancel(context.Background()) - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "invalid-encrypt-password", t.workerClients) + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "invalid-encrypt-password", t.workerClients) mock = conn.InitVersionDB() mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) resp, err = server.CheckTask(context.Background(), &pb.CheckTaskRequest{ Task: taskConfig, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestStartTask(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestStartTask() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) server.etcdClient = t.etcdTestCli sources, workers := defaultWorkerSource() @@ -874,8 +867,8 @@ func (t *testMaster) TestStartTask(c *check.C) { resp, err := server.StartTask(context.Background(), &pb.StartTaskRequest{ Task: "invalid toml config", }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) // test start task successfully var wg sync.WaitGroup @@ -886,7 +879,7 @@ func (t *testMaster) TestStartTask(c *check.C) { Task: taskConfig, Sources: sources, } - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, taskName, sources, workers, req)) mock := conn.InitVersionDB() defer func() { @@ -895,15 +888,15 @@ func (t *testMaster) TestStartTask(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) resp, err = server.StartTask(context.Background(), req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) tcm, _, err2 := ha.GetSubTaskCfg(t.etcdTestCli, source, taskName, 0) - c.Assert(err2, check.IsNil) - c.Assert(tcm, check.HasKey, taskName) - c.Assert(tcm[taskName].Name, check.Equals, taskName) - c.Assert(tcm[taskName].SourceID, check.Equals, source) + require.NoError(t.T(), err2) + require.Contains(t.T(), tcm, taskName) + require.Equal(t.T(), taskName, tcm[taskName].Name) + require.Equal(t.T(), source, tcm[taskName].SourceID) } // check start-task with an invalid source @@ -915,11 +908,11 @@ func (t *testMaster) TestStartTask(c *check.C) { Task: taskConfig, Sources: []string{invalidSource}, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Sources, check.HasLen, 1) - c.Assert(resp.Sources[0].Result, check.IsFalse) - c.Assert(resp.Sources[0].Source, check.Equals, invalidSource) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Len(t.T(), resp.Sources, 1) + require.False(t.T(), resp.Sources[0].Result) + require.Equal(t.T(), invalidSource, resp.Sources[0].Source) // test start task, but the first step check-task fails bakCheckSyncConfigFunc := checker.CheckSyncConfigFunc @@ -936,17 +929,17 @@ func (t *testMaster) TestStartTask(c *check.C) { Task: taskConfig, Sources: sources, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.CheckResult, check.Matches, errCheckSyncConfigReg) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Regexp(t.T(), errCheckSyncConfigReg, resp.CheckResult) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestStartTaskWithRemoveMeta() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) sources, workers := defaultWorkerSource() server.etcdClient = t.etcdTestCli @@ -955,7 +948,7 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { // taskName is relative to taskConfig cfg := config.NewTaskConfig() err := cfg.Decode(taskConfig) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) taskName := cfg.Name ctx, cancel := context.WithCancel(context.Background()) logger := log.L() @@ -967,7 +960,7 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { Sources: sources, RemoveMeta: true, } - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, taskName, sources, workers, req)) server.pessimist = shardddl.NewPessimist(&logger, func(task string) []string { return sources }) server.optimist = shardddl.NewOptimist(&logger, server.scheduler.GetDownstreamMetaByTask) @@ -980,13 +973,13 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { op2 = pessimism.NewOperation(ID, taskName, sources[0], DDLs, true, false) ) _, err = pessimism.PutInfo(t.etcdTestCli, i11) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) _, succ, err := pessimism.PutOperations(t.etcdTestCli, false, op2) - c.Assert(succ, check.IsTrue) - c.Assert(err, check.IsNil) + require.True(t.T(), succ) + require.NoError(t.T(), err) - c.Assert(server.pessimist.Start(ctx, t.etcdTestCli), check.IsNil) - c.Assert(server.optimist.Start(ctx, t.etcdTestCli), check.IsNil) + require.NoError(t.T(), server.pessimist.Start(ctx, t.etcdTestCli)) + require.NoError(t.T(), server.optimist.Start(ctx, t.etcdTestCli)) verMock := conn.InitVersionDB() defer func() { @@ -994,7 +987,8 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { }() verMock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) - mock := conn.InitMockDB(c) + mock, err := conn.MockDefaultDBProvider() + require.NoError(t.T(), err) mock.ExpectBegin() mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.LoaderCheckpoint(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.LightningCheckpoint(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) @@ -1005,8 +999,9 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.ValidatorPendingChange(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.ValidatorErrorChange(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.ValidatorTableStatus(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectExec(fmt.Sprintf("DROP DATABASE IF EXISTS `%s`", loader.GetTaskInfoSchemaName(cfg.MetaSchema, cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() - c.Assert(len(server.pessimist.Locks()), check.Greater, 0) + require.Greater(t.T(), len(server.pessimist.Locks()), 0) resp, err := server.StartTask(context.Background(), req) wg.Add(1) @@ -1018,35 +1013,31 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { verMock2.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) resp1, err1 := server.StartTask(context.Background(), req) - c.Assert(err1, check.IsNil) - c.Assert(resp1.Result, check.IsFalse) - c.Assert(resp1.Msg, check.Equals, terror.Annotate(terror.ErrSchedulerSubTaskExist.Generate(cfg.Name, sources), - "while remove-meta is true").Error()) + require.NoError(t.T(), err1) + require.False(t.T(), resp1.Result) + require.Equal(t.T(), terror.Annotate(terror.ErrSchedulerSubTaskExist.Generate(cfg.Name, sources), + "while remove-meta is true").Error(), resp1.Msg) }() - c.Assert(err, check.IsNil) - if !resp.Result { - c.Errorf("start task failed: %s", resp.Msg) - } + require.NoError(t.T(), err) + require.True(t.T(), resp.Result, "start task failed: %s", resp.Msg) for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) tcm, _, err2 := ha.GetSubTaskCfg(t.etcdTestCli, source, taskName, 0) - c.Assert(err2, check.IsNil) - c.Assert(tcm, check.HasKey, taskName) - c.Assert(tcm[taskName].Name, check.Equals, taskName) - c.Assert(tcm[taskName].SourceID, check.Equals, source) + require.NoError(t.T(), err2) + require.Contains(t.T(), tcm, taskName) + require.Equal(t.T(), taskName, tcm[taskName].Name) + require.Equal(t.T(), source, tcm[taskName].SourceID) } - c.Assert(server.pessimist.Locks(), check.HasLen, 0) - if err = mock.ExpectationsWereMet(); err != nil { - c.Errorf("db unfulfilled expectations: %s", err) - } + require.Len(t.T(), server.pessimist.Locks(), 0) + require.NoError(t.T(), mock.ExpectationsWereMet()) ifm, _, err := pessimism.GetAllInfo(t.etcdTestCli) - c.Assert(err, check.IsNil) - c.Assert(ifm, check.HasLen, 0) + require.NoError(t.T(), err) + require.Len(t.T(), ifm, 0) opm, _, err := pessimism.GetAllOperations(t.etcdTestCli) - c.Assert(err, check.IsNil) - c.Assert(opm, check.HasLen, 0) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.Len(t.T(), opm, 0) + t.clearSchedulerEnv(cancel, &wg) // test remove meta with optimist ctx, cancel = context.WithCancel(context.Background()) @@ -1056,7 +1047,7 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { Sources: sources, RemoveMeta: true, } - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, taskName, sources, workers, req)) server.pessimist = shardddl.NewPessimist(&logger, func(task string) []string { return sources }) server.optimist = shardddl.NewOptimist(&logger, server.scheduler.GetDownstreamMetaByTask) @@ -1068,30 +1059,31 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { st1 = optimism.NewSourceTables(taskName, sources[0]) DDLs1 = []string{"ALTER TABLE bar ADD COLUMN c1 INT"} - tiBefore = createTableInfo(c, p, se, tblID, `CREATE TABLE bar (id INT PRIMARY KEY)`) - tiAfter1 = createTableInfo(c, p, se, tblID, `CREATE TABLE bar (id INT PRIMARY KEY, c1 TEXT)`) + tiBefore = createTableInfo(t.T(), p, se, tblID, `CREATE TABLE bar (id INT PRIMARY KEY)`) + tiAfter1 = createTableInfo(t.T(), p, se, tblID, `CREATE TABLE bar (id INT PRIMARY KEY, c1 TEXT)`) info1 = optimism.NewInfo(taskName, sources[0], "foo-1", "bar-1", schema, table, DDLs1, tiBefore, []*model.TableInfo{tiAfter1}) op1 = optimism.NewOperation(ID, taskName, sources[0], info1.UpSchema, info1.UpTable, DDLs1, optimism.ConflictNone, "", false, []string{}) ) st1.AddTable("foo-1", "bar-1", schema, table) _, err = optimism.PutSourceTables(t.etcdTestCli, st1) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) _, err = optimism.PutInfo(t.etcdTestCli, info1) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) _, succ, err = optimism.PutOperation(t.etcdTestCli, false, op1, 0) - c.Assert(succ, check.IsTrue) - c.Assert(err, check.IsNil) + require.True(t.T(), succ) + require.NoError(t.T(), err) err = server.pessimist.Start(ctx, t.etcdTestCli) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) err = server.optimist.Start(ctx, t.etcdTestCli) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) verMock = conn.InitVersionDB() verMock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) - mock = conn.InitMockDB(c) + mock, err = conn.MockDefaultDBProvider() + require.NoError(t.T(), err) mock.ExpectBegin() mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.LoaderCheckpoint(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.LightningCheckpoint(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) @@ -1102,8 +1094,9 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.ValidatorPendingChange(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.ValidatorErrorChange(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectExec(fmt.Sprintf("DROP TABLE IF EXISTS `%s`.`%s`", cfg.MetaSchema, cputil.ValidatorTableStatus(cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) + mock.ExpectExec(fmt.Sprintf("DROP DATABASE IF EXISTS `%s`", loader.GetTaskInfoSchemaName(cfg.MetaSchema, cfg.Name))).WillReturnResult(sqlmock.NewResult(1, 1)) mock.ExpectCommit() - c.Assert(len(server.optimist.Locks()), check.Greater, 0) + require.Greater(t.T(), len(server.optimist.Locks()), 0) resp, err = server.StartTask(context.Background(), req) wg.Add(1) @@ -1115,48 +1108,46 @@ func (t *testMaster) TestStartTaskWithRemoveMeta(c *check.C) { vermock2.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) resp1, err1 := server.StartTask(context.Background(), req) - c.Assert(err1, check.IsNil) - c.Assert(resp1.Result, check.IsFalse) - c.Assert(resp1.Msg, check.Equals, terror.Annotate(terror.ErrSchedulerSubTaskExist.Generate(cfg.Name, sources), - "while remove-meta is true").Error()) + require.NoError(t.T(), err1) + require.False(t.T(), resp1.Result) + require.Equal(t.T(), terror.Annotate(terror.ErrSchedulerSubTaskExist.Generate(cfg.Name, sources), + "while remove-meta is true").Error(), resp1.Msg) }() - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) tcm, _, err2 := ha.GetSubTaskCfg(t.etcdTestCli, source, taskName, 0) - c.Assert(err2, check.IsNil) - c.Assert(tcm, check.HasKey, taskName) - c.Assert(tcm[taskName].Name, check.Equals, taskName) - c.Assert(tcm[taskName].SourceID, check.Equals, source) + require.NoError(t.T(), err2) + require.Contains(t.T(), tcm, taskName) + require.Equal(t.T(), taskName, tcm[taskName].Name) + require.Equal(t.T(), source, tcm[taskName].SourceID) } - c.Assert(server.optimist.Locks(), check.HasLen, 0) - if err = mock.ExpectationsWereMet(); err != nil { - c.Errorf("db unfulfilled expectations: %s", err) - } + require.Len(t.T(), server.optimist.Locks(), 0) + require.NoError(t.T(), mock.ExpectationsWereMet()) ifm2, _, err := optimism.GetAllInfo(t.etcdTestCli) - c.Assert(err, check.IsNil) - c.Assert(ifm2, check.HasLen, 0) + require.NoError(t.T(), err) + require.Len(t.T(), ifm2, 0) opm2, _, err := optimism.GetAllOperations(t.etcdTestCli) - c.Assert(err, check.IsNil) - c.Assert(opm2, check.HasLen, 0) + require.NoError(t.T(), err) + require.Len(t.T(), opm2, 0) tbm, _, err := optimism.GetAllSourceTables(t.etcdTestCli) - c.Assert(err, check.IsNil) - c.Assert(tbm, check.HasLen, 0) + require.NoError(t.T(), err) + require.Len(t.T(), tbm, 0) - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestOperateTask(c *check.C) { +func (t *testMasterSuite) TestOperateTask() { var ( taskName = "unit-test-task" pauseOp = pb.TaskOp_Pause ) - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) server.etcdClient = t.etcdTestCli sources, workers := defaultWorkerSource() @@ -1165,9 +1156,9 @@ func (t *testMaster) TestOperateTask(c *check.C) { Op: pauseOp, Name: taskName, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Equals, fmt.Sprintf("task %s has no source or not exist, please check the task name and status", taskName)) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Equal(t.T(), fmt.Sprintf("task %s has no source or not exist, please check the task name and status", taskName), resp.Msg) // 1. start task taskName = "test" @@ -1195,7 +1186,7 @@ func (t *testMaster) TestOperateTask(c *check.C) { Name: taskName, } sourceResps := []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}, {Result: true, Source: sources[1]}} - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, taskName, sources, workers, startReq, pauseReq, resumeReq, stopReq1, stopReq2)) mock := conn.InitVersionDB() defer func() { @@ -1204,48 +1195,50 @@ func (t *testMaster) TestOperateTask(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) stResp, err := server.StartTask(context.Background(), startReq) - c.Assert(err, check.IsNil) - c.Assert(stResp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), stResp.Result) for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) } - c.Assert(stResp.Sources, check.DeepEquals, sourceResps) + + require.Equal(t.T(), sourceResps, stResp.Sources) // 2. pause task resp, err = server.OperateTask(context.Background(), pauseReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Paused) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Paused) } - c.Assert(resp.Sources, check.DeepEquals, sourceResps) + + require.Equal(t.T(), sourceResps, resp.Sources) // 3. resume task resp, err = server.OperateTask(context.Background(), resumeReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) } - c.Assert(resp.Sources, check.DeepEquals, sourceResps) + require.Equal(t.T(), sourceResps, resp.Sources) // 4. test stop task successfully, remove partial sources resp, err = server.OperateTask(context.Background(), stopReq1) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - c.Assert(server.getTaskSourceNameList(taskName), check.DeepEquals, []string{sources[1]}) - c.Assert(resp.Sources, check.DeepEquals, []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}}) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Equal(t.T(), []string{sources[1]}, server.getTaskSourceNameList(taskName)) + require.Equal(t.T(), []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}}, resp.Sources) // 5. test stop task successfully, remove all workers resp, err = server.OperateTask(context.Background(), stopReq2) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - c.Assert(len(server.getTaskSourceNameList(taskName)), check.Equals, 0) - c.Assert(resp.Sources, check.DeepEquals, []*pb.CommonWorkerResponse{{Result: true, Source: sources[1]}}) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Len(t.T(), server.getTaskSourceNameList(taskName), 0) + require.Equal(t.T(), []*pb.CommonWorkerResponse{{Result: true, Source: sources[1]}}, resp.Sources) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestPurgeWorkerRelay(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestPurgeWorkerRelay() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) sources, workers := defaultWorkerSource() var ( now = time.Now().Unix() @@ -1282,7 +1275,7 @@ func (t *testMaster) TestPurgeWorkerRelay(c *check.C) { var wg sync.WaitGroup ctx, cancel := context.WithCancel(context.Background()) - server.scheduler, _ = t.testMockSchedulerForRelay(ctx, &wg, c, nil, nil, "", t.workerClients) + server.scheduler, _ = t.testMockSchedulerForRelay(ctx, &wg, nil, nil, "", t.workerClients) // test PurgeWorkerRelay with invalid dm-worker[s] resp, err := server.PurgeWorkerRelay(context.Background(), &pb.PurgeWorkerRelayRequest{ @@ -1290,56 +1283,56 @@ func (t *testMaster) TestPurgeWorkerRelay(c *check.C) { Time: now, Filename: filename, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - c.Assert(resp.Sources, check.HasLen, 2) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Len(t.T(), resp.Sources, 2) for _, w := range resp.Sources { - c.Assert(w.Result, check.IsFalse) - c.Assert(w.Msg, check.Matches, "relay worker for source .* not found.*") + require.False(t.T(), w.Result) + require.Regexp(t.T(), "relay worker for source .* not found.*", w.Msg) } - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) ctx, cancel = context.WithCancel(context.Background()) // test PurgeWorkerRelay successfully mockPurgeRelay(true) - server.scheduler, _ = t.testMockSchedulerForRelay(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, _ = t.testMockSchedulerForRelay(ctx, &wg, sources, workers, "", t.workerClients) resp, err = server.PurgeWorkerRelay(context.Background(), &pb.PurgeWorkerRelayRequest{ Sources: sources, Time: now, Filename: filename, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - c.Assert(resp.Sources, check.HasLen, 2) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Len(t.T(), resp.Sources, 2) for _, w := range resp.Sources { - c.Assert(w.Result, check.IsTrue) + require.True(t.T(), w.Result) } - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) ctx, cancel = context.WithCancel(context.Background()) // test PurgeWorkerRelay with error response mockPurgeRelay(false) - server.scheduler, _ = t.testMockSchedulerForRelay(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, _ = t.testMockSchedulerForRelay(ctx, &wg, sources, workers, "", t.workerClients) resp, err = server.PurgeWorkerRelay(context.Background(), &pb.PurgeWorkerRelayRequest{ Sources: sources, Time: now, Filename: filename, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) - c.Assert(resp.Sources, check.HasLen, 2) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Len(t.T(), resp.Sources, 2) for _, w := range resp.Sources { - c.Assert(w.Result, check.IsFalse) - c.Assert(w.Msg, check.Matches, errGRPCFailedReg) + require.False(t.T(), w.Result) + require.Regexp(t.T(), errGRPCFailedReg, w.Msg) } - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestOperateWorkerRelayTask(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestOperateWorkerRelayTask() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) sources, workers := defaultWorkerSource() var wg sync.WaitGroup ctx, cancel := context.WithCancel(context.Background()) @@ -1351,7 +1344,7 @@ func (t *testMaster) TestOperateWorkerRelayTask(c *check.C) { Sources: sources, Op: pb.RelayOp_ResumeRelay, } - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, "", sources, workers, pauseReq, resumeReq)) // test OperateWorkerRelayTask with invalid dm-worker[s] @@ -1359,83 +1352,83 @@ func (t *testMaster) TestOperateWorkerRelayTask(c *check.C) { Sources: []string{"invalid-source1", "invalid-source2"}, Op: pb.RelayOp_PauseRelay, }) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, `[\s\S]*need to update expectant relay stage not exist[\s\S]*`) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "need to update expectant relay stage not exist") sourceResps := []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}, {Result: true, Source: sources[1]}} // 1. test pause-relay successfully resp, err = server.OperateWorkerRelayTask(context.Background(), pauseReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) for _, source := range sources { - t.relayStageMatch(c, server.scheduler, source, pb.Stage_Paused) + t.relayStageMatch(server.scheduler, source, pb.Stage_Paused) } - c.Assert(resp.Sources, check.DeepEquals, sourceResps) + require.Equal(t.T(), sourceResps, resp.Sources) // 2. test resume-relay successfully resp, err = server.OperateWorkerRelayTask(context.Background(), resumeReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) for _, source := range sources { - t.relayStageMatch(c, server.scheduler, source, pb.Stage_Running) + t.relayStageMatch(server.scheduler, source, pb.Stage_Running) } - c.Assert(resp.Sources, check.DeepEquals, sourceResps) - t.clearSchedulerEnv(c, cancel, &wg) + require.Equal(t.T(), sourceResps, resp.Sources) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestServer(c *check.C) { +func (t *testMasterSuite) TestServer() { var err error cfg := NewConfig() - c.Assert(cfg.FromContent(SampleConfig), check.IsNil) + require.NoError(t.T(), cfg.FromContent(SampleConfig)) cfg.PeerUrls = "http://127.0.0.1:8294" - cfg.DataDir = c.MkDir() + cfg.DataDir = t.T().TempDir() cfg.MasterAddr = tempurl.Alloc()[len("http://"):] cfg.AdvertiseAddr = cfg.MasterAddr - basicServiceCheck := func(c *check.C, cfg *Config) { - t.testHTTPInterface(c, fmt.Sprintf("http://%s/status", cfg.AdvertiseAddr), []byte(version.GetRawInfo())) - t.testHTTPInterface(c, fmt.Sprintf("http://%s/debug/pprof/", cfg.AdvertiseAddr), []byte("Types of profiles available")) + basicServiceCheck := func(cfg *Config) { + t.testHTTPInterface(fmt.Sprintf("http://%s/status", cfg.AdvertiseAddr), []byte(version.GetRawInfo())) + t.testHTTPInterface(fmt.Sprintf("http://%s/debug/pprof/", cfg.AdvertiseAddr), []byte("Types of profiles available")) // HTTP API in this unit test is unstable, but we test it in `http_apis` in integration test. - // t.testHTTPInterface(c, fmt.Sprintf("http://%s/apis/v1alpha1/status/test-task", cfg.AdvertiseAddr), []byte("task test-task has no source or not exist")) + // t.testHTTPInterface( fmt.Sprintf("http://%s/apis/v1alpha1/status/test-task", cfg.AdvertiseAddr), []byte("task test-task has no source or not exist")) } - t.testNormalServerLifecycle(c, cfg, func(c *check.C, cfg *Config) { - basicServiceCheck(c, cfg) + t.testNormalServerLifecycle(cfg, func(cfg *Config) { + basicServiceCheck(cfg) // try to start another server with the same address. Expect it to fail // unset an etcd variable because it will cause checking on exit, and block forever err = os.Unsetenv(verify.ENV_VERIFY) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) dupServer := NewServer(cfg) ctx, cancel := context.WithCancel(context.Background()) defer cancel() err1 := dupServer.Start(ctx) - c.Assert(terror.ErrMasterStartEmbedEtcdFail.Equal(err1), check.IsTrue) - c.Assert(err1.Error(), check.Matches, ".*bind: address already in use.*") + require.True(t.T(), terror.ErrMasterStartEmbedEtcdFail.Equal(err1)) + require.Contains(t.T(), err1.Error(), "bind: address already in use") err = os.Setenv(verify.ENV_VERIFY, verify.ENV_VERIFY_ALL_VALUE) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) }) // test the listen address is 0.0.0.0 masterAddrStr := tempurl.Alloc()[len("http://"):] _, masterPort, err := net.SplitHostPort(masterAddrStr) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) cfg2 := NewConfig() *cfg2 = *cfg cfg2.MasterAddr = fmt.Sprintf("0.0.0.0:%s", masterPort) cfg2.AdvertiseAddr = masterAddrStr - t.testNormalServerLifecycle(c, cfg2, basicServiceCheck) + t.testNormalServerLifecycle(cfg2, basicServiceCheck) } -func (t *testMaster) TestMasterTLS(c *check.C) { +func (t *testMasterSuite) TestMasterTLS() { var err error masterAddr := tempurl.Alloc()[len("http://"):] peerAddr := tempurl.Alloc()[len("http://"):] _, masterPort, err := net.SplitHostPort(masterAddr) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) _, peerPort, err := net.SplitHostPort(peerAddr) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) caPath := pwd + "/tls_for_test/ca.pem" certPath := pwd + "/tls_for_test/dm.pem" @@ -1443,9 +1436,9 @@ func (t *testMaster) TestMasterTLS(c *check.C) { // all with `https://` prefix cfg := NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=https://%s", masterAddr), fmt.Sprintf("--advertise-addr=https://%s", masterAddr), fmt.Sprintf("--peer-urls=https://%s", peerAddr), @@ -1454,19 +1447,20 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) - c.Assert(cfg.MasterAddr, check.Equals, masterAddr) - c.Assert(cfg.AdvertiseAddr, check.Equals, masterAddr) - c.Assert(cfg.PeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.AdvertisePeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.InitialCluster, check.Equals, "master-tls=https://"+peerAddr) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) + require.Equal(t.T(), masterAddr, cfg.MasterAddr) + require.Equal(t.T(), masterAddr, cfg.AdvertiseAddr) + require.Equal(t.T(), "https://"+peerAddr, cfg.PeerUrls) + require.Equal(t.T(), "https://"+peerAddr, cfg.AdvertisePeerUrls) + require.Equal(t.T(), "master-tls=https://"+peerAddr, cfg.InitialCluster) // no `https://` prefix for `--master-addr` cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=%s", masterAddr), fmt.Sprintf("--advertise-addr=https://%s", masterAddr), fmt.Sprintf("--peer-urls=https://%s", peerAddr), @@ -1475,14 +1469,15 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) // no `https://` prefix for `--master-addr` and `--advertise-addr` cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=%s", masterAddr), fmt.Sprintf("--advertise-addr=%s", masterAddr), fmt.Sprintf("--peer-urls=https://%s", peerAddr), @@ -1491,14 +1486,15 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) // no `https://` prefix for `--master-addr`, `--advertise-addr` and `--peer-urls` cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=%s", masterAddr), fmt.Sprintf("--advertise-addr=%s", masterAddr), fmt.Sprintf("--peer-urls=%s", peerAddr), @@ -1507,14 +1503,15 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) // no `https://` prefix for `--master-addr`, `--advertise-addr`, `--peer-urls` and `--advertise-peer-urls` cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=%s", masterAddr), fmt.Sprintf("--advertise-addr=%s", masterAddr), fmt.Sprintf("--peer-urls=%s", peerAddr), @@ -1523,14 +1520,15 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) // all without `https://`/`http://` prefix cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=%s", masterAddr), fmt.Sprintf("--advertise-addr=%s", masterAddr), fmt.Sprintf("--peer-urls=%s", peerAddr), @@ -1539,19 +1537,20 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) - c.Assert(cfg.MasterAddr, check.Equals, masterAddr) - c.Assert(cfg.AdvertiseAddr, check.Equals, masterAddr) - c.Assert(cfg.PeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.AdvertisePeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.InitialCluster, check.Equals, "master-tls=https://"+peerAddr) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) + require.Equal(t.T(), masterAddr, cfg.MasterAddr) + require.Equal(t.T(), masterAddr, cfg.AdvertiseAddr) + require.Equal(t.T(), "https://"+peerAddr, cfg.PeerUrls) + require.Equal(t.T(), "https://"+peerAddr, cfg.AdvertisePeerUrls) + require.Equal(t.T(), "master-tls=https://"+peerAddr, cfg.InitialCluster) // all with `http://` prefix, but with TLS enabled. cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=http://%s", masterAddr), fmt.Sprintf("--advertise-addr=http://%s", masterAddr), fmt.Sprintf("--peer-urls=http://%s", peerAddr), @@ -1560,18 +1559,19 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - c.Assert(cfg.MasterAddr, check.Equals, masterAddr) - c.Assert(cfg.AdvertiseAddr, check.Equals, masterAddr) - c.Assert(cfg.PeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.AdvertisePeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.InitialCluster, check.Equals, "master-tls=https://"+peerAddr) + }) + require.NoError(t.T(), err) + require.Equal(t.T(), masterAddr, cfg.MasterAddr) + require.Equal(t.T(), masterAddr, cfg.AdvertiseAddr) + require.Equal(t.T(), "https://"+peerAddr, cfg.PeerUrls) + require.Equal(t.T(), "https://"+peerAddr, cfg.AdvertisePeerUrls) + require.Equal(t.T(), "master-tls=https://"+peerAddr, cfg.InitialCluster) // different prefix for `--peer-urls` and `--initial-cluster` cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=https://%s", masterAddr), fmt.Sprintf("--advertise-addr=https://%s", masterAddr), fmt.Sprintf("--peer-urls=https://%s", peerAddr), @@ -1580,19 +1580,20 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - c.Assert(cfg.MasterAddr, check.Equals, masterAddr) - c.Assert(cfg.AdvertiseAddr, check.Equals, masterAddr) - c.Assert(cfg.PeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.AdvertisePeerUrls, check.Equals, "https://"+peerAddr) - c.Assert(cfg.InitialCluster, check.Equals, "master-tls=https://"+peerAddr) - t.testTLSPrefix(c, cfg) + }) + require.NoError(t.T(), err) + require.Equal(t.T(), masterAddr, cfg.MasterAddr) + require.Equal(t.T(), masterAddr, cfg.AdvertiseAddr) + require.Equal(t.T(), "https://"+peerAddr, cfg.PeerUrls) + require.Equal(t.T(), "https://"+peerAddr, cfg.AdvertisePeerUrls) + require.Equal(t.T(), "master-tls=https://"+peerAddr, cfg.InitialCluster) + t.testTLSPrefix(cfg) // listen address set to 0.0.0.0 cfg = NewConfig() - c.Assert(cfg.Parse([]string{ + err = cfg.Parse([]string{ "--name=master-tls", - fmt.Sprintf("--data-dir=%s", c.MkDir()), + fmt.Sprintf("--data-dir=%s", t.T().TempDir()), fmt.Sprintf("--master-addr=0.0.0.0:%s", masterPort), fmt.Sprintf("--advertise-addr=https://%s", masterAddr), fmt.Sprintf("--peer-urls=0.0.0.0:%s", peerPort), @@ -1601,64 +1602,65 @@ func (t *testMaster) TestMasterTLS(c *check.C) { "--ssl-ca=" + caPath, "--ssl-cert=" + certPath, "--ssl-key=" + keyPath, - }), check.IsNil) - t.testTLSPrefix(c, cfg) + }) + require.NoError(t.T(), err) + t.testTLSPrefix(cfg) } -func (t *testMaster) testTLSPrefix(c *check.C, cfg *Config) { - t.testNormalServerLifecycle(c, cfg, func(c *check.C, cfg *Config) { - t.testHTTPInterface(c, fmt.Sprintf("https://%s/status", cfg.AdvertiseAddr), []byte(version.GetRawInfo())) - t.testHTTPInterface(c, fmt.Sprintf("https://%s/debug/pprof/", cfg.AdvertiseAddr), []byte("Types of profiles available")) +func (t *testMasterSuite) testTLSPrefix(cfg *Config) { + t.testNormalServerLifecycle(cfg, func(cfg *Config) { + t.testHTTPInterface(fmt.Sprintf("https://%s/status", cfg.AdvertiseAddr), []byte(version.GetRawInfo())) + t.testHTTPInterface(fmt.Sprintf("https://%s/debug/pprof/", cfg.AdvertiseAddr), []byte("Types of profiles available")) }) } -func (t *testMaster) testNormalServerLifecycle(c *check.C, cfg *Config, checkLogic func(*check.C, *Config)) { +func (t *testMasterSuite) testNormalServerLifecycle(cfg *Config, checkLogic func(*Config)) { var err error s := NewServer(cfg) ctx, cancel := context.WithCancel(context.Background()) err = s.Start(ctx) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) - checkLogic(c, cfg) + checkLogic(cfg) // close cancel() s.Close() - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { return s.closed.Load() - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) } -func (t *testMaster) testHTTPInterface(c *check.C, url string, contain []byte) { +func (t *testMasterSuite) testHTTPInterface(url string, contain []byte) { // we use HTTPS in some test cases. tlsConfig, err := toolutils.NewTLSConfig( toolutils.WithCAPath(pwd+"/tls_for_test/ca.pem"), toolutils.WithCertAndKeyPath(pwd+"/tls_for_test/dm.pem", pwd+"/tls_for_test/dm.key"), ) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) cli := toolutils.ClientWithTLS(tlsConfig) // nolint:noctx resp, err := cli.Get(url) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) defer resp.Body.Close() - c.Assert(resp.StatusCode, check.Equals, 200) + require.Equal(t.T(), http.StatusOK, resp.StatusCode) body, err := io.ReadAll(resp.Body) - c.Assert(err, check.IsNil) - c.Assert(bytes.Contains(body, contain), check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), bytes.Contains(body, contain)) } -func (t *testMaster) TestJoinMember(c *check.C) { +func (t *testMasterSuite) TestJoinMember() { ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) // create a new cluster cfg1 := NewConfig() - c.Assert(cfg1.FromContent(SampleConfig), check.IsNil) + require.NoError(t.T(), cfg1.FromContent(SampleConfig)) cfg1.Name = "dm-master-1" - cfg1.DataDir = c.MkDir() + cfg1.DataDir = t.T().TempDir() cfg1.MasterAddr = tempurl.Alloc()[len("http://"):] cfg1.AdvertiseAddr = cfg1.MasterAddr cfg1.PeerUrls = tempurl.Alloc() @@ -1666,19 +1668,19 @@ func (t *testMaster) TestJoinMember(c *check.C) { cfg1.InitialCluster = fmt.Sprintf("%s=%s", cfg1.Name, cfg1.AdvertisePeerUrls) s1 := NewServer(cfg1) - c.Assert(s1.Start(ctx), check.IsNil) + require.NoError(t.T(), s1.Start(ctx)) defer s1.Close() // wait the first one become the leader - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { return s1.election.IsLeader() - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) // join to an existing cluster cfg2 := NewConfig() - c.Assert(cfg2.FromContent(SampleConfig), check.IsNil) + require.NoError(t.T(), cfg2.FromContent(SampleConfig)) cfg2.Name = "dm-master-2" - cfg2.DataDir = c.MkDir() + cfg2.DataDir = t.T().TempDir() cfg2.MasterAddr = tempurl.Alloc()[len("http://"):] cfg2.AdvertiseAddr = cfg2.MasterAddr cfg2.PeerUrls = tempurl.Alloc() @@ -1686,34 +1688,34 @@ func (t *testMaster) TestJoinMember(c *check.C) { cfg2.Join = cfg1.MasterAddr // join to an existing cluster s2 := NewServer(cfg2) - c.Assert(s2.Start(ctx), check.IsNil) + require.NoError(t.T(), s2.Start(ctx)) defer s2.Close() client, err := etcdutil.CreateClient(strings.Split(cfg1.AdvertisePeerUrls, ","), nil) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) defer client.Close() // verify members listResp, err := etcdutil.ListMembers(client) - c.Assert(err, check.IsNil) - c.Assert(listResp.Members, check.HasLen, 2) + require.NoError(t.T(), err) + require.Len(t.T(), listResp.Members, 2) names := make(map[string]struct{}, len(listResp.Members)) for _, m := range listResp.Members { names[m.Name] = struct{}{} } - c.Assert(names, check.HasKey, cfg1.Name) - c.Assert(names, check.HasKey, cfg2.Name) + require.Contains(t.T(), names, cfg1.Name) + require.Contains(t.T(), names, cfg2.Name) // s1 is still the leader _, leaderID, _, err := s2.election.LeaderInfo(ctx) - c.Assert(err, check.IsNil) - c.Assert(leaderID, check.Equals, cfg1.Name) + require.NoError(t.T(), err) + require.Equal(t.T(), leaderID, cfg1.Name) cfg3 := NewConfig() - c.Assert(cfg3.FromContent(SampleConfig), check.IsNil) + require.NoError(t.T(), cfg3.FromContent(SampleConfig)) cfg3.Name = "dm-master-3" - cfg3.DataDir = c.MkDir() + cfg3.DataDir = t.T().TempDir() cfg3.MasterAddr = tempurl.Alloc()[len("http://"):] cfg3.AdvertiseAddr = cfg3.MasterAddr cfg3.PeerUrls = tempurl.Alloc() @@ -1721,42 +1723,42 @@ func (t *testMaster) TestJoinMember(c *check.C) { cfg3.Join = cfg1.MasterAddr // join to an existing cluster // mock join master without wal dir - c.Assert(os.Mkdir(filepath.Join(cfg3.DataDir, "member"), privateDirMode), check.IsNil) - c.Assert(os.Mkdir(filepath.Join(cfg3.DataDir, "member", "join"), privateDirMode), check.IsNil) + require.NoError(t.T(), os.Mkdir(filepath.Join(cfg3.DataDir, "member"), privateDirMode)) + require.NoError(t.T(), os.Mkdir(filepath.Join(cfg3.DataDir, "member", "join"), privateDirMode)) s3 := NewServer(cfg3) // avoid join a unhealthy cluster - c.Assert(utils.WaitSomething(30, 1000*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { return s3.Start(ctx) == nil - }), check.IsTrue) + }, 30*time.Second, time.Second) defer s3.Close() // verify members listResp, err = etcdutil.ListMembers(client) - c.Assert(err, check.IsNil) - c.Assert(listResp.Members, check.HasLen, 3) + require.NoError(t.T(), err) + require.Len(t.T(), listResp.Members, 3) names = make(map[string]struct{}, len(listResp.Members)) for _, m := range listResp.Members { names[m.Name] = struct{}{} } - c.Assert(names, check.HasKey, cfg1.Name) - c.Assert(names, check.HasKey, cfg2.Name) - c.Assert(names, check.HasKey, cfg3.Name) + require.Contains(t.T(), names, cfg1.Name) + require.Contains(t.T(), names, cfg2.Name) + require.Contains(t.T(), names, cfg3.Name) cancel() - t.clearEtcdEnv(c) + t.clearEtcdEnv() } -func (t *testMaster) TestOperateSource(c *check.C) { +func (t *testMasterSuite) TestOperateSource() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() // create a new cluster cfg1 := NewConfig() - c.Assert(cfg1.FromContent(SampleConfig), check.IsNil) + require.NoError(t.T(), cfg1.FromContent(SampleConfig)) cfg1.Name = "dm-master-1" - cfg1.DataDir = c.MkDir() + cfg1.DataDir = t.T().TempDir() cfg1.MasterAddr = tempurl.Alloc()[len("http://"):] cfg1.AdvertiseAddr = cfg1.MasterAddr cfg1.PeerUrls = tempurl.Alloc() @@ -1765,13 +1767,13 @@ func (t *testMaster) TestOperateSource(c *check.C) { s1 := NewServer(cfg1) s1.leader.Store(oneselfLeader) - c.Assert(s1.Start(ctx), check.IsNil) + require.NoError(t.T(), s1.Start(ctx)) defer s1.Close() mysqlCfg, err := config.ParseYamlAndVerify(config.SampleSourceConfig) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) mysqlCfg.From.Password = os.Getenv("MYSQL_PSWD") task, err := mysqlCfg.Yaml() - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) sourceID := mysqlCfg.SourceID // 1. wait for scheduler to start time.Sleep(3 * time.Second) @@ -1779,41 +1781,41 @@ func (t *testMaster) TestOperateSource(c *check.C) { // 2. try to add a new mysql source req := &pb.OperateSourceRequest{Op: pb.SourceOp_StartSource, Config: []string{task}} resp, err := s1.OperateSource(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.Equals, true) - c.Assert(resp.Sources, check.DeepEquals, []*pb.CommonWorkerResponse{{ + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Equal(t.T(), []*pb.CommonWorkerResponse{{ Result: true, Msg: "source is added but there is no free worker to bound", Source: sourceID, - }}) + }}, resp.Sources) unBoundSources := s1.scheduler.UnboundSources() - c.Assert(unBoundSources, check.HasLen, 1) - c.Assert(unBoundSources[0], check.Equals, sourceID) + require.Len(t.T(), unBoundSources, 1) + require.Equal(t.T(), sourceID, unBoundSources[0]) // 3. try to add multiple source // 3.1 duplicated source id sourceID2 := "mysql-replica-02" mysqlCfg.SourceID = sourceID2 task2, err := mysqlCfg.Yaml() - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) req = &pb.OperateSourceRequest{Op: pb.SourceOp_StartSource, Config: []string{task2, task2}} resp, err = s1.OperateSource(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.Equals, false) - c.Assert(resp.Msg, check.Matches, ".*source config with ID "+sourceID2+" already exists.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "source config with ID "+sourceID2+" already exists") // 3.2 run same command after correction sourceID3 := "mysql-replica-03" mysqlCfg.SourceID = sourceID3 task3, err := mysqlCfg.Yaml() - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) req = &pb.OperateSourceRequest{Op: pb.SourceOp_StartSource, Config: []string{task2, task3}} resp, err = s1.OperateSource(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.Equals, true) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) sort.Slice(resp.Sources, func(i, j int) bool { return resp.Sources[i].Source < resp.Sources[j].Source }) - c.Assert(resp.Sources, check.DeepEquals, []*pb.CommonWorkerResponse{{ + require.Equal(t.T(), []*pb.CommonWorkerResponse{{ Result: true, Msg: "source is added but there is no free worker to bound", Source: sourceID2, @@ -1821,54 +1823,54 @@ func (t *testMaster) TestOperateSource(c *check.C) { Result: true, Msg: "source is added but there is no free worker to bound", Source: sourceID3, - }}) + }}, resp.Sources) unBoundSources = s1.scheduler.UnboundSources() - c.Assert(unBoundSources, check.HasLen, 3) - c.Assert(unBoundSources[0], check.Equals, sourceID) - c.Assert(unBoundSources[1], check.Equals, sourceID2) - c.Assert(unBoundSources[2], check.Equals, sourceID3) + require.Len(t.T(), unBoundSources, 3) + require.Equal(t.T(), sourceID, unBoundSources[0]) + require.Equal(t.T(), sourceID2, unBoundSources[1]) + require.Equal(t.T(), sourceID3, unBoundSources[2]) // 4. try to stop a non-exist-source req.Op = pb.SourceOp_StopSource mysqlCfg.SourceID = "not-exist-source" task4, err := mysqlCfg.Yaml() - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) req.Config = []string{task4} resp, err = s1.OperateSource(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.Equals, false) - c.Assert(resp.Msg, check.Matches, `[\s\S]*source config with ID `+mysqlCfg.SourceID+` not exists[\s\S]*`) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "source config with ID "+mysqlCfg.SourceID+" not exists") - // 5. start workers, the unbounded sources should be bounded + // 5. start workers, the unbound sources should be bound var wg sync.WaitGroup workerName1 := "worker1" workerName2 := "worker2" workerName3 := "worker3" defer func() { - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) }() - c.Assert(s1.scheduler.AddWorker(workerName1, "172.16.10.72:8262"), check.IsNil) + require.NoError(t.T(), s1.scheduler.AddWorker(workerName1, "172.16.10.72:8262")) wg.Add(1) go func(ctx context.Context, workerName string) { defer wg.Done() - c.Assert(ha.KeepAlive(ctx, s1.etcdClient, workerName, keepAliveTTL), check.IsNil) + require.NoError(t.T(), ha.KeepAlive(ctx, s1.etcdClient, workerName, keepAliveTTL)) }(ctx, workerName1) - c.Assert(s1.scheduler.AddWorker(workerName2, "172.16.10.72:8263"), check.IsNil) + require.NoError(t.T(), s1.scheduler.AddWorker(workerName2, "172.16.10.72:8263")) wg.Add(1) go func(ctx context.Context, workerName string) { defer wg.Done() - c.Assert(ha.KeepAlive(ctx, s1.etcdClient, workerName, keepAliveTTL), check.IsNil) + require.NoError(t.T(), ha.KeepAlive(ctx, s1.etcdClient, workerName, keepAliveTTL)) }(ctx, workerName2) - c.Assert(s1.scheduler.AddWorker(workerName3, "172.16.10.72:8264"), check.IsNil) + require.NoError(t.T(), s1.scheduler.AddWorker(workerName3, "172.16.10.72:8264")) wg.Add(1) go func(ctx context.Context, workerName string) { defer wg.Done() - c.Assert(ha.KeepAlive(ctx, s1.etcdClient, workerName, keepAliveTTL), check.IsNil) + require.NoError(t.T(), ha.KeepAlive(ctx, s1.etcdClient, workerName, keepAliveTTL)) }(ctx, workerName3) - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { w := s1.scheduler.GetWorkerBySource(sourceID) return w != nil - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) // 6. stop sources req.Config = []string{task, task2, task3} @@ -1884,9 +1886,9 @@ func (t *testMaster) TestOperateSource(c *check.C) { mockRevelantWorkerClient(mockWorkerClient3, "", sourceID3, req) s1.scheduler.SetWorkerClientForTest(workerName3, newMockRPCClient(mockWorkerClient3)) resp, err = s1.OperateSource(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.Equals, true) - c.Assert(resp.Sources, check.DeepEquals, []*pb.CommonWorkerResponse{{ + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) + require.Equal(t.T(), []*pb.CommonWorkerResponse{{ Result: true, Source: sourceID, }, { @@ -1895,21 +1897,21 @@ func (t *testMaster) TestOperateSource(c *check.C) { }, { Result: true, Source: sourceID3, - }}) + }}, resp.Sources) scm, _, err := ha.GetSourceCfg(t.etcdTestCli, sourceID, 0) - c.Assert(err, check.IsNil) - c.Assert(scm, check.HasLen, 0) - t.clearSchedulerEnv(c, cancel, &wg) + require.NoError(t.T(), err) + require.Len(t.T(), scm, 0) + t.clearSchedulerEnv(cancel, &wg) cancel() } -func (t *testMaster) TestOfflineMember(c *check.C) { +func (t *testMasterSuite) TestOfflineMember() { ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) - cfg1 := generateServerConfig(c, "dm-master-1") - cfg2 := generateServerConfig(c, "dm-master-2") - cfg3 := generateServerConfig(c, "dm-master-3") + cfg1 := generateServerConfig(t.T(), "dm-master-1") + cfg2 := generateServerConfig(t.T(), "dm-master-2") + cfg3 := generateServerConfig(t.T(), "dm-master-3") initialCluster := fmt.Sprintf("%s=%s", cfg1.Name, cfg1.AdvertisePeerUrls) + "," + fmt.Sprintf("%s=%s", cfg2.Name, cfg2.AdvertisePeerUrls) + "," + @@ -1926,7 +1928,7 @@ func (t *testMaster) TestOfflineMember(c *check.C) { }() wg.Add(1) go func() { - c.Assert(s1.Start(ctx), check.IsNil) + require.NoError(t.T(), s1.Start(ctx)) wg.Done() }() @@ -1937,13 +1939,13 @@ func (t *testMaster) TestOfflineMember(c *check.C) { }() wg.Add(1) go func() { - c.Assert(s2.Start(ctx), check.IsNil) + require.NoError(t.T(), s2.Start(ctx)) wg.Done() }() ctx3, cancel3 := context.WithCancel(ctx) s3 := NewServer(cfg3) - c.Assert(s3.Start(ctx3), check.IsNil) + require.NoError(t.T(), s3.Start(ctx3)) defer func() { cancel3() s3.Close() @@ -1953,7 +1955,7 @@ func (t *testMaster) TestOfflineMember(c *check.C) { var leaderID string // ensure s2 has got the right leader info, because it will be used to `OfflineMember`. - c.Assert(utils.WaitSomething(30, 100*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { s2.RLock() leader := s2.leader.Load() s2.RUnlock() @@ -1966,7 +1968,7 @@ func (t *testMaster) TestOfflineMember(c *check.C) { leaderID = s2.leader.Load() } return true - }), check.IsTrue) + }, 3*time.Second, 100*time.Millisecond) // master related operations req := &pb.OfflineMemberRequest{ @@ -1975,23 +1977,23 @@ func (t *testMaster) TestOfflineMember(c *check.C) { } // test offline member with wrong type resp, err := s2.OfflineMember(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Equals, terror.ErrMasterInvalidOfflineType.Generate(req.Type).Error()) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, terror.ErrMasterInvalidOfflineType.Generate(req.Type).Error()) // test offline member with invalid master name req.Type = common.Master resp, err = s2.OfflineMember(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, `[\s\S]*dm-master with name `+req.Name+` not exists[\s\S]*`) + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, `dm-master with name `+req.Name+` not exists`) // test offline member with correct master name cli := s2.etcdClient listResp, err := etcdutil.ListMembers(cli) - c.Assert(err, check.IsNil) - c.Assert(listResp.Members, check.HasLen, 3) + require.NoError(t.T(), err) + require.Len(t.T(), listResp.Members, 3) // make sure s3 is not the leader, otherwise it will take some time to campaign a new leader after close s3, and it may cause timeout - c.Assert(utils.WaitSomething(20, 500*time.Millisecond, func() bool { + require.Eventually(t.T(), func() bool { _, leaderID, _, err = s1.election.LeaderInfo(ctx) if err != nil { return false @@ -2001,38 +2003,38 @@ func (t *testMaster) TestOfflineMember(c *check.C) { _, err = s3.OperateLeader(ctx, &pb.OperateLeaderRequest{ Op: pb.LeaderOp_EvictLeaderOp, }) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) } return leaderID != s3.cfg.Name - }), check.IsTrue) + }, 10*time.Second, 500*time.Millisecond) cancel3() s3.Close() req.Name = s3.cfg.Name resp, err = s2.OfflineMember(ctx, req) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Equals, "") - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.Equal(t.T(), "", resp.Msg) + require.True(t.T(), resp.Result) listResp, err = etcdutil.ListMembers(cli) - c.Assert(err, check.IsNil) - c.Assert(listResp.Members, check.HasLen, 2) + require.NoError(t.T(), err) + require.Len(t.T(), listResp.Members, 2) if listResp.Members[0].Name == cfg2.Name { listResp.Members[0], listResp.Members[1] = listResp.Members[1], listResp.Members[0] } - c.Assert(listResp.Members[0].Name, check.Equals, cfg1.Name) - c.Assert(listResp.Members[1].Name, check.Equals, cfg2.Name) + require.Equal(t.T(), cfg1.Name, listResp.Members[0].Name) + require.Equal(t.T(), cfg2.Name, listResp.Members[1].Name) _, leaderID2, _, err := s1.election.LeaderInfo(ctx) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) if leaderID == cfg3.Name { // s3 is leader before, leader should re-campaign - c.Assert(leaderID != leaderID2, check.IsTrue) + require.False(t.T(), leaderID != leaderID2) } else { // s3 isn't leader before, leader should keep the same - c.Assert(leaderID, check.Equals, leaderID2) + require.Equal(t.T(), leaderID, leaderID2) } // worker related operations @@ -2043,8 +2045,8 @@ func (t *testMaster) TestOfflineMember(c *check.C) { Address: "127.0.0.1:1000", } regReq, err := s1.RegisterWorker(ectx, req1) - c.Assert(err, check.IsNil) - c.Assert(regReq.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), regReq.Result) req2 := &pb.OfflineMemberRequest{ Type: common.Worker, @@ -2052,30 +2054,30 @@ func (t *testMaster) TestOfflineMember(c *check.C) { } { res, err := s1.OfflineMember(ectx, req2) - c.Assert(err, check.IsNil) - c.Assert(res.Result, check.IsFalse) - c.Assert(res.Msg, check.Matches, `[\s\S]*dm-worker with name `+req2.Name+` not exists[\s\S]*`) + require.NoError(t.T(), err) + require.False(t.T(), res.Result) + require.Contains(t.T(), res.Msg, `dm-worker with name `+req2.Name+` not exists`) } { req2.Name = "xixi" res, err := s1.OfflineMember(ectx, req2) - c.Assert(err, check.IsNil) - c.Assert(res.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), res.Result) } { // register offline worker again. TICASE-962, 963 resp, err := s1.RegisterWorker(ectx, req1) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) } - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) TestGetCfg(c *check.C) { - ctrl := gomock.NewController(c) +func (t *testMasterSuite) TestGetCfg() { + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) sources, workers := defaultWorkerSource() var wg sync.WaitGroup @@ -2085,7 +2087,7 @@ func (t *testMaster) TestGetCfg(c *check.C) { Task: taskConfig, Sources: sources, } - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, taskName, sources, workers, req)) server.etcdClient = t.etcdTestCli @@ -2097,8 +2099,8 @@ func (t *testMaster) TestGetCfg(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) resp, err := server.StartTask(context.Background(), req) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp.Result) // get task config req1 := &pb.GetCfgRequest{ @@ -2106,9 +2108,9 @@ func (t *testMaster) TestGetCfg(c *check.C) { Type: pb.CfgType_TaskType, } resp1, err := server.GetCfg(context.Background(), req1) - c.Assert(err, check.IsNil) - c.Assert(resp1.Result, check.IsTrue) - c.Assert(strings.Contains(resp1.Cfg, "name: test"), check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp1.Result) + require.Contains(t.T(), resp1.Cfg, "name: test") // not exist task name taskName2 := "wrong" @@ -2117,117 +2119,117 @@ func (t *testMaster) TestGetCfg(c *check.C) { Type: pb.CfgType_TaskType, } resp2, err := server.GetCfg(context.Background(), req2) - c.Assert(err, check.IsNil) - c.Assert(resp2.Result, check.IsFalse) - c.Assert(resp2.Msg, check.Equals, "task not found") + require.NoError(t.T(), err) + require.False(t.T(), resp2.Result) + require.Contains(t.T(), resp2.Msg, "task not found") // generate a template named `wrong`, test get this task template openapiTask, err := fixtures.GenNoShardOpenAPITaskForTest() - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) openapiTask.Name = taskName2 - c.Assert(ha.PutOpenAPITaskTemplate(t.etcdTestCli, openapiTask, true), check.IsNil) - c.Assert(failpoint.Enable("github.com/pingcap/tiflow/dm/master/MockSkipAdjustTargetDB", `return(true)`), check.IsNil) + require.NoError(t.T(), ha.PutOpenAPITaskTemplate(t.etcdTestCli, openapiTask, true)) + require.NoError(t.T(), failpoint.Enable("github.com/pingcap/tiflow/dm/master/MockSkipAdjustTargetDB", `return(true)`)) resp2, err = server.GetCfg(context.Background(), &pb.GetCfgRequest{Name: taskName2, Type: pb.CfgType_TaskTemplateType}) - c.Assert(failpoint.Disable("github.com/pingcap/tiflow/dm/master/MockSkipAdjustTargetDB"), check.IsNil) - c.Assert(err, check.IsNil) - c.Assert(resp2.Result, check.IsTrue) - c.Assert(strings.Contains(resp2.Cfg, fmt.Sprintf("name: %s", taskName2)), check.IsTrue) + require.NoError(t.T(), failpoint.Disable("github.com/pingcap/tiflow/dm/master/MockSkipAdjustTargetDB")) + require.NoError(t.T(), err) + require.True(t.T(), resp2.Result) + require.Contains(t.T(), resp2.Cfg, "name: "+taskName2) // test restart master server.scheduler.Close() - c.Assert(server.scheduler.Start(ctx, t.etcdTestCli), check.IsNil) + require.NoError(t.T(), server.scheduler.Start(ctx, t.etcdTestCli)) resp3, err := server.GetCfg(context.Background(), req1) - c.Assert(err, check.IsNil) - c.Assert(resp3.Result, check.IsTrue) - c.Assert(resp3.Cfg, check.Equals, resp1.Cfg) + require.NoError(t.T(), err) + require.True(t.T(), resp3.Result) + require.Equal(t.T(), resp1.Cfg, resp3.Cfg) req3 := &pb.GetCfgRequest{ Name: "dm-master", Type: pb.CfgType_MasterType, } resp4, err := server.GetCfg(context.Background(), req3) - c.Assert(err, check.IsNil) - c.Assert(resp4.Result, check.IsTrue) - c.Assert(strings.Contains(resp4.Cfg, "name = \"dm-master\""), check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), resp4.Result) + require.Contains(t.T(), resp4.Cfg, `name = "dm-master"`) req4 := &pb.GetCfgRequest{ Name: "haha", Type: pb.CfgType_MasterType, } resp5, err := server.GetCfg(context.Background(), req4) - c.Assert(err, check.IsNil) - c.Assert(resp5.Result, check.IsFalse) - c.Assert(resp5.Msg, check.Equals, "master not found") + require.NoError(t.T(), err) + require.False(t.T(), resp5.Result) + require.Contains(t.T(), resp5.Msg, "master not found") req5 := &pb.GetCfgRequest{ Name: "haha", Type: pb.CfgType_WorkerType, } resp6, err := server.GetCfg(context.Background(), req5) - c.Assert(err, check.IsNil) - c.Assert(resp6.Result, check.IsFalse) - c.Assert(resp6.Msg, check.Equals, "worker not found") + require.NoError(t.T(), err) + require.False(t.T(), resp6.Result) + require.Contains(t.T(), resp6.Msg, "worker not found") req6 := &pb.GetCfgRequest{ Name: "mysql-replica-01", Type: pb.CfgType_SourceType, } resp7, err := server.GetCfg(context.Background(), req6) - c.Assert(err, check.IsNil) - c.Assert(resp7.Result, check.IsTrue) - c.Assert(strings.Contains(resp7.Cfg, "source-id: mysql-replica-01"), check.IsTrue, check.Commentf(resp7.Cfg)) + require.NoError(t.T(), err) + require.True(t.T(), resp7.Result) + require.Contains(t.T(), resp7.Cfg, `source-id: mysql-replica-01`) req7 := &pb.GetCfgRequest{ Name: "haha", Type: pb.CfgType_SourceType, } resp8, err := server.GetCfg(context.Background(), req7) - c.Assert(err, check.IsNil) - c.Assert(resp8.Result, check.IsFalse) - c.Assert(resp8.Msg, check.Equals, "source not found") + require.NoError(t.T(), err) + require.False(t.T(), resp8.Result) + require.Equal(t.T(), resp8.Msg, "source not found") - t.clearSchedulerEnv(c, cancel, &wg) + t.clearSchedulerEnv(cancel, &wg) } -func (t *testMaster) relayStageMatch(c *check.C, s *scheduler.Scheduler, source string, expectStage pb.Stage) { +func (t *testMasterSuite) relayStageMatch(s *scheduler.Scheduler, source string, expectStage pb.Stage) { stage := ha.NewRelayStage(expectStage, source) - stageDeepEqualExcludeRev(c, s.GetExpectRelayStage(source), stage) + stageDeepEqualExcludeRev(t.T(), s.GetExpectRelayStage(source), stage) eStage, _, err := ha.GetRelayStage(t.etcdTestCli, source) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) switch expectStage { case pb.Stage_Running, pb.Stage_Paused: - stageDeepEqualExcludeRev(c, eStage, stage) + stageDeepEqualExcludeRev(t.T(), eStage, stage) } } -func (t *testMaster) subTaskStageMatch(c *check.C, s *scheduler.Scheduler, task, source string, expectStage pb.Stage) { +func (t *testMasterSuite) subTaskStageMatch(s *scheduler.Scheduler, task, source string, expectStage pb.Stage) { stage := ha.NewSubTaskStage(expectStage, source, task) - c.Assert(s.GetExpectSubTaskStage(task, source), check.DeepEquals, stage) + require.Equal(t.T(), s.GetExpectSubTaskStage(task, source), stage) eStageM, _, err := ha.GetSubTaskStage(t.etcdTestCli, source, task) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) switch expectStage { case pb.Stage_Running, pb.Stage_Paused: - c.Assert(eStageM, check.HasLen, 1) - stageDeepEqualExcludeRev(c, eStageM[task], stage) + require.Len(t.T(), eStageM, 1) + stageDeepEqualExcludeRev(t.T(), eStageM[task], stage) default: - c.Assert(eStageM, check.HasLen, 0) + require.Len(t.T(), eStageM, 0) } } -func (t *testMaster) TestGRPCLongResponse(c *check.C) { - c.Assert(failpoint.Enable("github.com/pingcap/tiflow/dm/master/LongRPCResponse", `return()`), check.IsNil) +func (t *testMasterSuite) TestGRPCLongResponse() { + require.NoError(t.T(), failpoint.Enable("github.com/pingcap/tiflow/dm/master/LongRPCResponse", `return()`)) //nolint:errcheck defer failpoint.Disable("github.com/pingcap/tiflow/dm/master/LongRPCResponse") - c.Assert(failpoint.Enable("github.com/pingcap/tiflow/dm/ctl/common/SkipUpdateMasterClient", `return()`), check.IsNil) + require.NoError(t.T(), failpoint.Enable("github.com/pingcap/tiflow/dm/ctl/common/SkipUpdateMasterClient", `return()`)) //nolint:errcheck defer failpoint.Disable("github.com/pingcap/tiflow/dm/ctl/common/SkipUpdateMasterClient") masterAddr := tempurl.Alloc()[len("http://"):] lis, err := net.Listen("tcp", masterAddr) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) defer lis.Close() server := grpc.NewServer() pb.RegisterMasterServer(server, &Server{}) @@ -2237,35 +2239,35 @@ func (t *testMaster) TestGRPCLongResponse(c *check.C) { conn, err := grpc.Dial(utils.UnwrapScheme(masterAddr), grpc.WithInsecure(), grpc.WithBlock()) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) defer conn.Close() common.GlobalCtlClient.MasterClient = pb.NewMasterClient(conn) ctx := context.Background() resp := &pb.StartTaskResponse{} err = common.SendRequest(ctx, "StartTask", &pb.StartTaskRequest{}, &resp) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) } -func (t *testMaster) TestStartStopValidation(c *check.C) { +func (t *testMasterSuite) TestStartStopValidation() { var ( wg sync.WaitGroup taskName = "test" ) - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) server.etcdClient = t.etcdTestCli sources, workers := defaultWorkerSource() ctx, cancel := context.WithCancel(context.Background()) - defer t.clearSchedulerEnv(c, cancel, &wg) + defer t.clearSchedulerEnv(cancel, &wg) // start task without validation startReq := &pb.StartTaskRequest{ Task: taskConfig, Sources: sources, } sourceResps := []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}, {Result: true, Source: sources[1]}} - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", makeWorkerClientsForHandle(ctrl, taskName, sources, workers, startReq)) mock := conn.InitVersionDB() defer func() { @@ -2274,12 +2276,13 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) stResp, err := server.StartTask(context.Background(), startReq) - c.Assert(err, check.IsNil) - c.Assert(stResp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), stResp.Result) + for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) } - c.Assert(stResp.Sources, check.DeepEquals, sourceResps) + require.Equal(t.T(), sourceResps, stResp.Sources) // (fail) start all validator of the task with explicit but invalid mode validatorStartReq := &pb.StartValidationRequest{ @@ -2287,13 +2290,13 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { TaskName: taskName, } startResp, err := server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*validation mode should be either `full` or `fast`.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_InvalidStage) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationNone, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Contains(t.T(), startResp.Msg, "validation mode should be either `full` or `fast`") + t.validatorStageMatch(taskName, sources[0], pb.Stage_InvalidStage) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationNone, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) start with explicit but invalid start-time validatorStartReq = &pb.StartValidationRequest{ @@ -2301,39 +2304,39 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { TaskName: taskName, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*start-time should be in the format like.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_InvalidStage) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationNone, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Contains(t.T(), startResp.Msg, "start-time should be in the format like") + t.validatorStageMatch(taskName, sources[0], pb.Stage_InvalidStage) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationNone, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) start for non-existed subtask validatorStartReq = &pb.StartValidationRequest{ TaskName: "not-exist-name", } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*cannot get subtask by task name.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_InvalidStage) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationNone, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Contains(t.T(), startResp.Msg, "cannot get subtask by task name") + t.validatorStageMatch(taskName, sources[0], pb.Stage_InvalidStage) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationNone, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) start for non-exist source validatorStartReq = &pb.StartValidationRequest{ Sources: []string{"xxx"}, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*cannot get subtask by sources.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_InvalidStage) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationNone, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Contains(t.T(), startResp.Msg, "cannot get subtask by sources") + t.validatorStageMatch(taskName, sources[0], pb.Stage_InvalidStage) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationNone, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (success) start validation without explicit mode for source 0 validatorStartReq = &pb.StartValidationRequest{ @@ -2341,12 +2344,12 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { Sources: []string{sources[0]}, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.True(t.T(), startResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) start all validator with explicit mode validatorStartReq = &pb.StartValidationRequest{ @@ -2354,13 +2357,13 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { TaskName: taskName, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*some of target validator.* has already enabled.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Regexp(t.T(), ".*some of target validator.* has already enabled.*", startResp.Msg) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) start validation with explicit mode for source 0 again validatorStartReq = &pb.StartValidationRequest{ @@ -2369,26 +2372,26 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { Sources: []string{sources[0]}, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*all target validator has enabled, cannot do 'validation start' with explicit mode or start-time.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Contains(t.T(), startResp.Msg, "all target validator has enabled, cannot do 'validation start' with explicit mode or start-time") + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) start all validator without explicit mode validatorStartReq = &pb.StartValidationRequest{ TaskName: taskName, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsFalse) - c.Assert(startResp.Msg, check.Matches, ".*some of target validator.* has already enabled.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), startResp.Result) + require.Regexp(t.T(), ".*some of target validator.* has already enabled.*", startResp.Msg) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) stop validator of source 1 validatorStopReq := &pb.StopValidationRequest{ @@ -2396,26 +2399,26 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { Sources: sources[1:], } stopResp, err := server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsFalse) - c.Assert(stopResp.Msg, check.Matches, ".*some target validator.* is not enabled.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), stopResp.Result) + require.Regexp(t.T(), ".*some target validator.* is not enabled.*", stopResp.Msg) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (fail) stop all validator validatorStopReq = &pb.StopValidationRequest{ TaskName: taskName, } stopResp, err = server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsFalse) - c.Assert(stopResp.Msg, check.Matches, ".*some target validator.* is not enabled.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_InvalidStage) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationNone, "") + require.NoError(t.T(), err) + require.False(t.T(), stopResp.Result) + require.Regexp(t.T(), ".*some target validator.* is not enabled.*", stopResp.Msg) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_InvalidStage) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationNone, "") // (success) start validation with fast mode and start-time for source 1 validatorStartReq = &pb.StartValidationRequest{ @@ -2425,12 +2428,12 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { Sources: []string{sources[1]}, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Running) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.True(t.T(), startResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Running) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // now validator of the 2 subtask is enabled(running) @@ -2439,38 +2442,38 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { TaskName: taskName, } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Running) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.True(t.T(), startResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Running) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // (fail) stop non-existed subtask's validator validatorStopReq = &pb.StopValidationRequest{ TaskName: "not-exist-name", } stopResp, err = server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsFalse) - c.Assert(stopResp.Msg, check.Matches, ".*cannot get subtask by task name.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Running) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.False(t.T(), stopResp.Result) + require.Contains(t.T(), stopResp.Msg, "cannot get subtask by task name") + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Running) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // (fail) stop all task but with non-exist source validatorStopReq = &pb.StopValidationRequest{ Sources: []string{"xxx"}, } stopResp, err = server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsFalse) - c.Assert(stopResp.Msg, check.Matches, ".*cannot get subtask by sources.*") - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Running) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.False(t.T(), stopResp.Result) + require.Contains(t.T(), stopResp.Msg, "cannot get subtask by source") + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Running) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // (success) stop validation of source 0 validatorStopReq = &pb.StopValidationRequest{ @@ -2478,86 +2481,86 @@ func (t *testMaster) TestStartStopValidation(c *check.C) { Sources: []string{sources[0]}, } stopResp, err = server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Stopped) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Running) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.True(t.T(), stopResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Stopped) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Running) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // (success) stop all validatorStopReq = &pb.StopValidationRequest{ TaskName: "", } stopResp, err = server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Stopped) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Stopped) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.True(t.T(), stopResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Stopped) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Stopped) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // (success) stop all again validatorStopReq = &pb.StopValidationRequest{ TaskName: "", } stopResp, err = server.StopValidation(context.Background(), validatorStopReq) - c.Assert(err, check.IsNil) - c.Assert(stopResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Stopped) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Stopped) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.True(t.T(), stopResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Stopped) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Stopped) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") // (success) start all tasks validatorStartReq = &pb.StartValidationRequest{ TaskName: "", } startResp, err = server.StartValidation(context.Background(), validatorStartReq) - c.Assert(err, check.IsNil) - c.Assert(startResp.Result, check.IsTrue) - t.validatorStageMatch(c, taskName, sources[0], pb.Stage_Running) - t.validatorStageMatch(c, taskName, sources[1], pb.Stage_Running) - t.validatorModeMatch(c, server.scheduler, taskName, sources[0], config.ValidationFull, "") - t.validatorModeMatch(c, server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") + require.NoError(t.T(), err) + require.True(t.T(), startResp.Result) + t.validatorStageMatch(taskName, sources[0], pb.Stage_Running) + t.validatorStageMatch(taskName, sources[1], pb.Stage_Running) + t.validatorModeMatch(server.scheduler, taskName, sources[0], config.ValidationFull, "") + t.validatorModeMatch(server.scheduler, taskName, sources[1], config.ValidationFast, "2006-01-02 15:04:05") } -// nolint:unparam -func (t *testMaster) validatorStageMatch(c *check.C, taskName, source string, expectStage pb.Stage) { +//nolint:unparam +func (t *testMasterSuite) validatorStageMatch(taskName, source string, expectStage pb.Stage) { stage := ha.NewValidatorStage(expectStage, source, taskName) stageM, _, err := ha.GetValidatorStage(t.etcdTestCli, source, taskName, 0) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) switch expectStage { case pb.Stage_Running, pb.Stage_Stopped: - c.Assert(stageM, check.HasLen, 1) - stageDeepEqualExcludeRev(c, stageM[taskName], stage) + require.Len(t.T(), stageM, 1) + stageDeepEqualExcludeRev(t.T(), stageM[taskName], stage) default: - c.Assert(stageM, check.HasLen, 0) + require.Len(t.T(), stageM, 0) } } //nolint:unparam -func (t *testMaster) validatorModeMatch(c *check.C, s *scheduler.Scheduler, task, source string, +func (t *testMasterSuite) validatorModeMatch(s *scheduler.Scheduler, task, source string, expectMode, expectedStartTime string, ) { cfgs := s.GetSubTaskCfgsByTaskAndSource(task, []string{source}) v, ok := cfgs[task] - c.Assert(ok, check.IsTrue) + require.True(t.T(), ok) cfg, ok := v[source] - c.Assert(ok, check.IsTrue) - c.Assert(cfg.ValidatorCfg.Mode, check.Equals, expectMode) - c.Assert(cfg.ValidatorCfg.StartTime, check.Equals, expectedStartTime) + require.True(t.T(), ok) + require.Equal(t.T(), expectMode, cfg.ValidatorCfg.Mode) + require.Equal(t.T(), expectedStartTime, cfg.ValidatorCfg.StartTime) } -func (t *testMaster) TestGetValidatorStatus(c *check.C) { +func (t *testMasterSuite) TestGetValidatorStatus() { var ( wg sync.WaitGroup taskName = "test" ) - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) server.etcdClient = t.etcdTestCli sources, workers := defaultWorkerSource() startReq := &pb.StartTaskRequest{ @@ -2593,10 +2596,10 @@ func (t *testMaster) TestGetValidatorStatus(c *check.C) { t.workerClients[worker] = newMockRPCClient(mockWorkerClient) } ctx, cancel := context.WithCancel(context.Background()) - defer t.clearSchedulerEnv(c, cancel, &wg) + defer t.clearSchedulerEnv(cancel, &wg) // start task without validation sourceResps := []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}, {Result: true, Source: sources[1]}} - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", t.workerClients) mock := conn.InitVersionDB() defer func() { conn.DefaultDBProvider = &conn.DefaultDBProviderImpl{} @@ -2604,56 +2607,57 @@ func (t *testMaster) TestGetValidatorStatus(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) stResp, err := server.StartTask(context.Background(), startReq) - c.Assert(err, check.IsNil) - c.Assert(stResp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), stResp.Result) + for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) } - c.Assert(stResp.Sources, check.DeepEquals, sourceResps) + require.Equal(t.T(), sourceResps, stResp.Sources) // 1. query existing task's status statusReq := &pb.GetValidationStatusRequest{ TaskName: taskName, } resp, err := server.GetValidationStatus(context.Background(), statusReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Equals, "") - c.Assert(resp.Result, check.IsTrue) - c.Assert(len(resp.TableStatuses), check.Equals, 2) + require.NoError(t.T(), err) + require.Equal(t.T(), "", resp.Msg) + require.True(t.T(), resp.Result) + require.Equal(t.T(), 2, len(resp.TableStatuses)) // 2. query invalid task's status statusReq.TaskName = "invalid-task" resp, err = server.GetValidationStatus(context.Background(), statusReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Matches, ".*cannot get subtask by task name.*") - c.Assert(resp.Result, check.IsFalse) + require.NoError(t.T(), err) + require.Contains(t.T(), resp.Msg, "cannot get subtask by task name") + require.False(t.T(), resp.Result) // 3. query invalid stage statusReq.TaskName = taskName statusReq.FilterStatus = pb.Stage_Paused // invalid stage resp, err = server.GetValidationStatus(context.Background(), statusReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Matches, ".*filtering stage should be either.*") - c.Assert(resp.Result, check.IsFalse) + require.NoError(t.T(), err) + require.Contains(t.T(), resp.Msg, "filtering stage should be either") + require.False(t.T(), resp.Result) // 4. worker error statusReq.FilterStatus = pb.Stage_Running resp, err = server.GetValidationStatus(context.Background(), statusReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, ".*something wrong in worker.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "something wrong in worker") // 5. grpc error statusReq.FilterStatus = pb.Stage_Running resp, err = server.GetValidationStatus(context.Background(), statusReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, ".*grpc error.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "grpc error") } -func (t *testMaster) TestGetValidationError(c *check.C) { +func (t *testMasterSuite) TestGetValidationError() { var ( wg sync.WaitGroup taskName = "test" ) - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) server.etcdClient = t.etcdTestCli sources, workers := defaultWorkerSource() startReq := &pb.StartTaskRequest{ @@ -2690,10 +2694,10 @@ func (t *testMaster) TestGetValidationError(c *check.C) { t.workerClients[worker] = newMockRPCClient(mockWorkerClient) } ctx, cancel := context.WithCancel(context.Background()) - defer t.clearSchedulerEnv(c, cancel, &wg) + defer t.clearSchedulerEnv(cancel, &wg) // start task without validation sourceResps := []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}, {Result: true, Source: sources[1]}} - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", t.workerClients) mock := conn.InitVersionDB() defer func() { conn.DefaultDBProvider = &conn.DefaultDBProviderImpl{} @@ -2701,57 +2705,58 @@ func (t *testMaster) TestGetValidationError(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) stResp, err := server.StartTask(context.Background(), startReq) - c.Assert(err, check.IsNil) - c.Assert(stResp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), stResp.Result) + for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) } - c.Assert(stResp.Sources, check.DeepEquals, sourceResps) + require.Equal(t.T(), sourceResps, stResp.Sources) // 1. query existing task's error errReq := &pb.GetValidationErrorRequest{ TaskName: taskName, ErrState: pb.ValidateErrorState_InvalidErr, } resp, err := server.GetValidationError(context.Background(), errReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Equals, "") - c.Assert(resp.Result, check.IsTrue) - c.Assert(len(resp.Error), check.Equals, 2) + require.NoError(t.T(), err) + require.Equal(t.T(), "", resp.Msg) + require.True(t.T(), resp.Result) + require.Len(t.T(), resp.Error, 2) // 2. query invalid task's error errReq.TaskName = "invalid-task" resp, err = server.GetValidationError(context.Background(), errReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Matches, ".*cannot get subtask by task name.*") - c.Assert(resp.Result, check.IsFalse) + require.NoError(t.T(), err) + require.Contains(t.T(), resp.Msg, "cannot get subtask by task name") + require.False(t.T(), resp.Result) // 3. query invalid state errReq.TaskName = taskName errReq.ErrState = pb.ValidateErrorState_ResolvedErr // invalid state resp, err = server.GetValidationError(context.Background(), errReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Matches, ".*only support querying `all`, `unprocessed`, and `ignored` error.*") - c.Assert(resp.Result, check.IsFalse) + require.NoError(t.T(), err) + require.Contains(t.T(), resp.Msg, "only support querying `all`, `unprocessed`, and `ignored` error") + require.False(t.T(), resp.Result) // 4. worker error errReq.TaskName = taskName errReq.ErrState = pb.ValidateErrorState_InvalidErr resp, err = server.GetValidationError(context.Background(), errReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, ".*something wrong in worker.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "something wrong in worker") // 5. grpc error resp, err = server.GetValidationError(context.Background(), errReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, ".*grpc error.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "grpc error") } -func (t *testMaster) TestOperateValidationError(c *check.C) { +func (t *testMasterSuite) TestOperateValidationError() { var ( wg sync.WaitGroup taskName = "test" ) - ctrl := gomock.NewController(c) + ctrl := gomock.NewController(t.T()) defer ctrl.Finish() - server := testDefaultMasterServer(c) + server := testDefaultMasterServer(t.T()) server.etcdClient = t.etcdTestCli sources, workers := defaultWorkerSource() startReq := &pb.StartTaskRequest{ @@ -2783,10 +2788,10 @@ func (t *testMaster) TestOperateValidationError(c *check.C) { t.workerClients[worker] = newMockRPCClient(mockWorkerClient) } ctx, cancel := context.WithCancel(context.Background()) - defer t.clearSchedulerEnv(c, cancel, &wg) + defer t.clearSchedulerEnv(cancel, &wg) // start task without validation sourceResps := []*pb.CommonWorkerResponse{{Result: true, Source: sources[0]}, {Result: true, Source: sources[1]}} - server.scheduler, _ = t.testMockScheduler(ctx, &wg, c, sources, workers, "", t.workerClients) + server.scheduler, _ = t.testMockScheduler(ctx, &wg, sources, workers, "", t.workerClients) mock := conn.InitVersionDB() defer func() { conn.DefaultDBProvider = &conn.DefaultDBProviderImpl{} @@ -2794,63 +2799,64 @@ func (t *testMaster) TestOperateValidationError(c *check.C) { mock.ExpectQuery("SHOW GLOBAL VARIABLES LIKE 'version'").WillReturnRows(sqlmock.NewRows([]string{"Variable_name", "Value"}). AddRow("version", "5.7.25-TiDB-v4.0.2")) stResp, err := server.StartTask(context.Background(), startReq) - c.Assert(err, check.IsNil) - c.Assert(stResp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.True(t.T(), stResp.Result) + for _, source := range sources { - t.subTaskStageMatch(c, server.scheduler, taskName, source, pb.Stage_Running) + t.subTaskStageMatch(server.scheduler, taskName, source, pb.Stage_Running) } - c.Assert(stResp.Sources, check.DeepEquals, sourceResps) + require.Equal(t.T(), sourceResps, stResp.Sources) // 1. query existing task's error opReq := &pb.OperateValidationErrorRequest{ TaskName: taskName, IsAllError: true, } resp, err := server.OperateValidationError(context.Background(), opReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Equals, "") - c.Assert(resp.Result, check.IsTrue) + require.NoError(t.T(), err) + require.Equal(t.T(), resp.Msg, "") + require.True(t.T(), resp.Result) // 2. query invalid task's error opReq.TaskName = "invalid-task" resp, err = server.OperateValidationError(context.Background(), opReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Msg, check.Matches, ".*cannot get subtask by task name.*") - c.Assert(resp.Result, check.IsFalse) + require.NoError(t.T(), err) + require.Contains(t.T(), resp.Msg, "cannot get subtask by task name") + require.False(t.T(), resp.Result) // 3. worker error opReq.TaskName = taskName resp, err = server.OperateValidationError(context.Background(), opReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, ".*something wrong in worker.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "something wrong in worker") // 4. grpc error opReq.TaskName = taskName resp, err = server.OperateValidationError(context.Background(), opReq) - c.Assert(err, check.IsNil) - c.Assert(resp.Result, check.IsFalse) - c.Assert(resp.Msg, check.Matches, ".*grpc error.*") + require.NoError(t.T(), err) + require.False(t.T(), resp.Result) + require.Contains(t.T(), resp.Msg, "grpc error") } -func (t *testMaster) TestDashboardAddress(c *check.C) { +func (t *testMasterSuite) TestDashboardAddress() { // Temp file for test log output - file, err := ioutil.TempFile(c.MkDir(), "*") - c.Assert(err, check.IsNil) + file, err := ioutil.TempFile(t.T().TempDir(), "*") + require.NoError(t.T(), err) defer os.Remove(file.Name()) cfg := NewConfig() err = cfg.FromContent(SampleConfig) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) err = log.InitLogger(&log.Config{ File: file.Name(), }) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) defer func() { err = log.InitLogger(&log.Config{}) - c.Assert(err, check.IsNil) + require.NoError(t.T(), err) }() cfg.OpenAPI = true cfg.LogFile = file.Name() - cfg.DataDir = c.MkDir() + cfg.DataDir = t.T().TempDir() server := NewServer(cfg) server.leader.Store(oneselfLeader) @@ -2858,7 +2864,7 @@ func (t *testMaster) TestDashboardAddress(c *check.C) { go server.ap.Start(ctx) go func() { err2 := server.Start(ctx) - c.Assert(err2, check.IsNil) + require.NoError(t.T(), err2) }() defer server.Close() defer cancel() @@ -2867,42 +2873,42 @@ func (t *testMaster) TestDashboardAddress(c *check.C) { time.Sleep(time.Second * 3) content, err := ioutil.ReadFile(file.Name()) - c.Assert(err, check.IsNil) - c.Assert(string(content), check.Matches, "[\\s\\S]*Web UI enabled[\\s\\S]*") + require.NoError(t.T(), err) + require.Contains(t.T(), string(content), "Web UI enabled") } -func (t *testMaster) TestGetLatestMeta(*check.C) { +func (t *testMasterSuite) TestGetLatestMeta() { _, mockDB, err := conn.InitMockDBFull() - require.NoError(t.testT, err) + require.NoError(t.T(), err) getMasterStatusError := errors.New("failed to get master status") mockDB.ExpectQuery(`SHOW MASTER STATUS`).WillReturnError(getMasterStatusError) - meta, err := GetLatestMeta(context.Background(), "", &config.DBConfig{}) - require.Contains(t.testT, err.Error(), getMasterStatusError.Error()) - require.Nil(t.testT, meta) + meta, err := GetLatestMeta(context.Background(), "", &dbconfig.DBConfig{}) + require.Contains(t.T(), err.Error(), getMasterStatusError.Error()) + require.Nil(t.T(), meta) _, mockDB, err = conn.InitMockDBFull() - require.NoError(t.testT, err) + require.NoError(t.T(), err) rows := mockDB.NewRows([]string{"File", "Position", "Binlog_Do_DB", "Binlog_Ignore_DB", "Executed_Gtid_Set"}) mockDB.ExpectQuery(`SHOW MASTER STATUS`).WillReturnRows(rows) - meta, err = GetLatestMeta(context.Background(), "", &config.DBConfig{}) - require.True(t.testT, terror.ErrNoMasterStatus.Equal(err)) - require.Nil(t.testT, meta) + meta, err = GetLatestMeta(context.Background(), "", &dbconfig.DBConfig{}) + require.True(t.T(), terror.ErrNoMasterStatus.Equal(err)) + require.Nil(t.T(), meta) _, mockDB, err = conn.InitMockDBFull() - require.NoError(t.testT, err) + require.NoError(t.T(), err) // 5 columns for MySQL rows = mockDB.NewRows([]string{"File", "Position", "Binlog_Do_DB", "Binlog_Ignore_DB", "Executed_Gtid_Set"}).AddRow( "mysql-bin.000009", 11232, "do_db", "ignore_db", "", ) mockDB.ExpectQuery(`SHOW MASTER STATUS`).WillReturnRows(rows) - meta, err = GetLatestMeta(context.Background(), mysql.MySQLFlavor, &config.DBConfig{}) - require.NoError(t.testT, err) - require.Equal(t.testT, meta.BinLogName, "mysql-bin.000009") - require.Equal(t.testT, meta.BinLogPos, uint32(11232)) - require.Equal(t.testT, meta.BinLogGTID, "") + meta, err = GetLatestMeta(context.Background(), mysql.MySQLFlavor, &dbconfig.DBConfig{}) + require.NoError(t.T(), err) + require.Equal(t.T(), meta.BinLogName, "mysql-bin.000009") + require.Equal(t.T(), meta.BinLogPos, uint32(11232)) + require.Equal(t.T(), meta.BinLogGTID, "") _, mockDB, err = conn.InitMockDBFull() - require.NoError(t.testT, err) + require.NoError(t.T(), err) // 4 columns for MariaDB rows = mockDB.NewRows([]string{"File", "Position", "Binlog_Do_DB", "Binlog_Ignore_DB"}).AddRow( "mysql-bin.000009", 11232, "do_db", "ignore_db", @@ -2910,9 +2916,9 @@ func (t *testMaster) TestGetLatestMeta(*check.C) { mockDB.ExpectQuery(`SHOW MASTER STATUS`).WillReturnRows(rows) rows = mockDB.NewRows([]string{"Variable_name", "Value"}).AddRow("gtid_binlog_pos", "1-2-100") mockDB.ExpectQuery(`SHOW GLOBAL VARIABLES LIKE 'gtid_binlog_pos'`).WillReturnRows(rows) - meta, err = GetLatestMeta(context.Background(), mysql.MariaDBFlavor, &config.DBConfig{}) - require.NoError(t.testT, err) - require.Equal(t.testT, meta.BinLogName, "mysql-bin.000009") - require.Equal(t.testT, meta.BinLogPos, uint32(11232)) - require.Equal(t.testT, meta.BinLogGTID, "1-2-100") + meta, err = GetLatestMeta(context.Background(), mysql.MariaDBFlavor, &dbconfig.DBConfig{}) + require.NoError(t.T(), err) + require.Equal(t.T(), meta.BinLogName, "mysql-bin.000009") + require.Equal(t.T(), meta.BinLogPos, uint32(11232)) + require.Equal(t.T(), meta.BinLogGTID, "1-2-100") } diff --git a/dm/master/workerrpc/workerrpc_test.go b/dm/master/workerrpc/workerrpc_test.go index 5ca0d57a469..1445cd55b42 100644 --- a/dm/master/workerrpc/workerrpc_test.go +++ b/dm/master/workerrpc/workerrpc_test.go @@ -25,7 +25,7 @@ import ( "github.com/pingcap/tiflow/dm/pb" "github.com/pingcap/tiflow/dm/pbmock" "github.com/pingcap/tiflow/dm/pkg/terror" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" ) var _ = Suite(&testWorkerRPCSuite{}) diff --git a/dm/pkg/election/election_test.go b/dm/pkg/election/election_test.go index 75443c99154..dcd87cee460 100644 --- a/dm/pkg/election/election_test.go +++ b/dm/pkg/election/election_test.go @@ -27,7 +27,7 @@ import ( "github.com/pingcap/tiflow/dm/pkg/log" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/pingcap/tiflow/dm/pkg/utils" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/server/v3/embed" ) diff --git a/dm/pkg/etcdutil/etcdutil_test.go b/dm/pkg/etcdutil/etcdutil_test.go index e1145a11a83..d03ec8a61da 100644 --- a/dm/pkg/etcdutil/etcdutil_test.go +++ b/dm/pkg/etcdutil/etcdutil_test.go @@ -25,7 +25,7 @@ import ( "github.com/pingcap/tiflow/dm/pkg/log" "github.com/pingcap/tiflow/dm/pkg/terror" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" "go.etcd.io/etcd/api/v3/etcdserverpb" v3rpc "go.etcd.io/etcd/api/v3/v3rpc/rpctypes" clientv3 "go.etcd.io/etcd/client/v3" diff --git a/dm/pkg/retry/errors.go b/dm/pkg/retry/errors.go index 5f4baf33401..4ba84834dcb 100644 --- a/dm/pkg/retry/errors.go +++ b/dm/pkg/retry/errors.go @@ -36,17 +36,17 @@ var ( "Unsupported collation", "Invalid default value for", "Unsupported drop primary key", - "Error 1059: Identifier name", // Limitations on identifier length - "Error 1117: Too many columns", - "Error 1069: Too many keys specified", + "Error 1059", + "Error 1117", + "Error 1069", } // UnsupportedDMLMsgs list the error messages of some un-recoverable DML, which is used in task auto recovery. UnsupportedDMLMsgs = []string{ - "Error 1062: Duplicate", - "Error 1406: Data too long for column", + "Error 1062", + "Error 1406", "Error 1366", - "Error 8025: entry too large", + "Error 8025", } // ReplicationErrMsgs list the error message of un-recoverable replication error. diff --git a/dm/tests/all_mode/run.sh b/dm/tests/all_mode/run.sh index b0bf3d09084..f6d109ca97e 100755 --- a/dm/tests/all_mode/run.sh +++ b/dm/tests/all_mode/run.sh @@ -621,7 +621,7 @@ function run() { run_sql_source1 "create table all_mode.db_error (c int primary key);" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status $ILLEGAL_CHAR_NAME" \ - "Error 1049: Unknown database" 1 + "Error 1049 (42000): Unknown database" 1 # stop task, task state should be cleaned run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ diff --git a/dm/tests/check_task/run.sh b/dm/tests/check_task/run.sh index 892eb893801..7c8aa4d97ca 100644 --- a/dm/tests/check_task/run.sh +++ b/dm/tests/check_task/run.sh @@ -51,7 +51,7 @@ function test_privileges_can_migrate() { run_sql_source1 "create table checktask1.test_privilege(id int primary key, b varchar(10))" run_sql_source1 "insert into checktask1.test_privilege values (1, 'a'),(2, 'b');" run_sql_tidb "create user 'test1'@'%' identified by '123456';" - run_sql_tidb "grant select, create, insert, update, delete, alter, drop, index on *.* to 'test1'@'%';" + run_sql_tidb "grant select, create, insert, update, delete, alter, drop, index, config on *.* to 'test1'@'%';" run_sql_tidb "flush privileges;" run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "start-task $cur/conf/task-priv.yaml --remove-meta" \ diff --git a/dm/tests/full_mode/run.sh b/dm/tests/full_mode/run.sh index be84467adf4..0a37edc5bdc 100755 --- a/dm/tests/full_mode/run.sh +++ b/dm/tests/full_mode/run.sh @@ -53,8 +53,8 @@ function fail_acquire_global_lock() { run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ "\"stage\": \"Paused\"" 2 \ - "LOCK TABLES \`full_mode\`.\`t1\` READ: Error 1044: Access denied" 1 \ - "LOCK TABLES \`full_mode\`.\`t2\` READ: Error 1044: Access denied" 1 + "LOCK TABLES \`full_mode\`.\`t1\` READ: Error 1044 (42000): Access denied" 1 \ + "LOCK TABLES \`full_mode\`.\`t2\` READ: Error 1044 (42000): Access denied" 1 cleanup_process $* cleanup_data full_mode diff --git a/dm/tests/handle_error/run.sh b/dm/tests/handle_error/run.sh index 17c940c02ad..131ec1aee38 100644 --- a/dm/tests/handle_error/run.sh +++ b/dm/tests/handle_error/run.sh @@ -521,7 +521,7 @@ function DM_EXEC_ERROR_SKIP_CASE() { run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Error 1062: Duplicate " 1 + "Error 1062 (23000): Duplicate " 1 run_sql_tidb "insert into ${db}.${tb} values(5,3,3);" run_sql_tidb "insert into ${db}.${tb} values(6,4,4);" diff --git a/dm/tests/lightning_mode/run.sh b/dm/tests/lightning_mode/run.sh index 6a9da556f14..d414ef7937b 100755 --- a/dm/tests/lightning_mode/run.sh +++ b/dm/tests/lightning_mode/run.sh @@ -13,6 +13,9 @@ function run() { run_downstream_cluster $WORK_DIR + run_sql_tidb "drop database if exists lightning_mode;" + export GO_FAILPOINTS='github.com/pingcap/tiflow/dm/pkg/conn/VeryLargeTable=return("t1")' + run_sql_both_source "SET @@GLOBAL.SQL_MODE='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'" run_sql_file $cur/data/db1.prepare.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 @@ -38,9 +41,54 @@ function run() { check_rpc_alive $cur/../bin/check_worker_online 127.0.0.1:$WORKER2_PORT dmctl_operate_source create $WORK_DIR/source2.yaml $SOURCE_ID2 - # start DM task only - cp $cur/conf/dm-task.yaml $WORK_DIR/dm-task.yaml - dmctl_start_task "$WORK_DIR/dm-task.yaml" "--remove-meta" + run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "check-task $cur/conf/dm-task.yaml" \ + "Downstream doesn't have enough space" 1 \ + "but we need 4EiB" 1 + + export GO_FAILPOINTS='' + kill_dm_master + run_dm_master_info_log $WORK_DIR/master $MASTER_PORT $cur/conf/dm-master.toml + check_rpc_alive $cur/../bin/check_master_online 127.0.0.1:$MASTER_PORT + + # start DM task + dmctl_start_task "$cur/conf/dm-task-dup.yaml" "--remove-meta" + run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "query-status test" \ + "\"stage\": \"Paused\"" 1 \ + '"progress": "100.00 %"' 2 \ + "please check \`dm_meta_test\`.\`conflict_error_v1\` to see the duplication" 1 + run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "resume-task test" \ + "\"result\": true" 3 + run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "query-status test" \ + 'unit": "Sync"' 2 + run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "stop-task test" \ + "\"result\": true" 3 + run_sql_tidb "drop database if exists lightning_mode;" + + # if not set duplicate detection, checksum will fail + cp $cur/conf/dm-task-dup.yaml $WORK_DIR/dm-task-dup.yaml + sed -i "/on-duplicate-physical/d" $WORK_DIR/dm-task-dup.yaml + dmctl_start_task "$WORK_DIR/dm-task-dup.yaml" "--remove-meta" + run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "query-status test" \ + "checksum mismatched, KV number in source files: 6, KV number in TiDB cluster: 3" 1 \ + '"unit": "Load"' 2 + run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "resume-task test" + run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "query-status test" \ + 'unit": "Sync"' 2 + + run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ + "stop-task test" \ + "\"result\": true" 3 + run_sql_tidb "drop database if exists lightning_mode;" + + dmctl_start_task "$cur/conf/dm-task.yaml" "--remove-meta" # use sync_diff_inspector to check full dump loader check_sync_diff $WORK_DIR $cur/conf/diff_config.toml @@ -71,6 +119,7 @@ function run() { killall -9 pd-server 2>/dev/null || true rm -rf /tmp/tidb || true run_tidb_server 4000 $TIDB_PASSWORD + export GO_FAILPOINTS='' } cleanup_data lightning_mode diff --git a/dm/tests/many_tables/run.sh b/dm/tests/many_tables/run.sh index fb35872ed5d..bdbb7d818fa 100644 --- a/dm/tests/many_tables/run.sh +++ b/dm/tests/many_tables/run.sh @@ -103,7 +103,7 @@ function run() { run_sql_tidb "select count(*) from dm_meta.test_syncer_checkpoint" check_contains "count(*): $(($TABLE_NUM + 1))" - check_log_contains $WORK_DIR/worker1/log/dm-worker.log 'Error 8004: Transaction is too large' + check_log_contains $WORK_DIR/worker1/log/dm-worker.log 'Error 8004 (HY000): Transaction is too large' # check https://github.com/pingcap/tiflow/issues/5063 check_time=100 diff --git a/dm/tests/print_status/run.sh b/dm/tests/print_status/run.sh index c3bafe08d4c..9404cc7aa70 100755 --- a/dm/tests/print_status/run.sh +++ b/dm/tests/print_status/run.sh @@ -74,7 +74,7 @@ function check_print_status() { # check load unit print status status_file=$WORK_DIR/worker1/log/loader_status.log - grep -oP "\[unit=lightning-load\] \[IsCanceled=false\] \[finished_bytes=59637\] \[total_bytes=59637\] \[progress=.*\]" $WORK_DIR/worker1/log/dm-worker.log >$status_file + grep -oP "\[unit=lightning-load\] \[IsCanceled=false\] \[finished_bytes=59834\] \[total_bytes=59834\] \[progress=.*\]" $WORK_DIR/worker1/log/dm-worker.log >$status_file status_count=$(wc -l $status_file | awk '{print $1}') [ $status_count -eq 1 ] # must have a non-zero speed in log diff --git a/dm/tests/shardddl1_1/run.sh b/dm/tests/shardddl1_1/run.sh index 8c516a88b4d..5d866ea71fc 100644 --- a/dm/tests/shardddl1_1/run.sh +++ b/dm/tests/shardddl1_1/run.sh @@ -253,7 +253,7 @@ function DM_027_CASE() { run_sql_source1 "insert into ${shardddl1}.${tb3} values (5,6)" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Error 1054: Unknown column 'val' in 'field list'" 1 + "Error 1054 (42S22): Unknown column 'val' in 'field list'" 1 } function DM_027() { diff --git a/dm/tests/sync_collation/run.sh b/dm/tests/sync_collation/run.sh index 18ce6d444ae..0d7ddb46802 100755 --- a/dm/tests/sync_collation/run.sh +++ b/dm/tests/sync_collation/run.sh @@ -100,8 +100,8 @@ function run() { echo "check full phase error" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status ${TASK_NAME}" \ - "Error 1273: Unsupported collation when new collation is enabled: 'latin1_swedish_ci'" 1 \ - "Error 1273: Unsupported collation when new collation is enabled: 'utf8mb4_0900_ai_ci'" 1 + "Error 1273 (HY000): Unsupported collation when new collation is enabled: 'latin1_swedish_ci'" 1 \ + "Error 1273 (HY000): Unsupported collation when new collation is enabled: 'utf8mb4_0900_ai_ci'" 1 dmctl_stop_task $TASK_NAME $MASTER_PORT @@ -118,8 +118,8 @@ function run() { echo "check incremental phase error" run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status ${TASK_NAME}" \ - "Error 1273: Unsupported collation when new collation is enabled: 'latin1_swedish_ci'" 1 \ - "Error 1273: Unsupported collation when new collation is enabled: 'utf8mb4_0900_ai_ci'" 1 + "Error 1273 (HY000): Unsupported collation when new collation is enabled: 'latin1_swedish_ci'" 1 \ + "Error 1273 (HY000): Unsupported collation when new collation is enabled: 'utf8mb4_0900_ai_ci'" 1 } cleanup_data $TEST_NAME diff --git a/dm/tests/tracker_ignored_ddl/run.sh b/dm/tests/tracker_ignored_ddl/run.sh index 8dc7ecdfc80..5809ebff4c8 100644 --- a/dm/tests/tracker_ignored_ddl/run.sh +++ b/dm/tests/tracker_ignored_ddl/run.sh @@ -36,7 +36,7 @@ function run() { run_sql_file $cur/data/db.increment2.sql $MYSQL_HOST1 $MYSQL_PORT1 $MYSQL_PASSWORD1 run_dm_ctl_with_retry $WORK_DIR "127.0.0.1:$MASTER_PORT" \ "query-status test" \ - "Error 1054: Unknown column" 1 + "Error 1054 (42S22): Unknown column" 1 # force a resume, the error is still there, but we want to check https://github.com/pingcap/tiflow/issues/5272#issuecomment-1109283279 run_dm_ctl $WORK_DIR "127.0.0.1:$MASTER_PORT" \ diff --git a/dm/unit/unit_test.go b/dm/unit/unit_test.go index 607211c7fbe..c57cd51b1b5 100644 --- a/dm/unit/unit_test.go +++ b/dm/unit/unit_test.go @@ -19,8 +19,11 @@ import ( "github.com/pingcap/check" "github.com/pingcap/errors" + "github.com/pingcap/tidb/br/pkg/lightning/common" + tmysql "github.com/pingcap/tidb/parser/mysql" "github.com/pingcap/tiflow/dm/pb" "github.com/pingcap/tiflow/dm/pkg/terror" + "github.com/stretchr/testify/require" ) func TestSuite(t *testing.T) { @@ -56,3 +59,55 @@ func (t *testUnitSuite) TestJoinProcessErrors(c *check.C) { c.Assert(JoinProcessErrors(errs), check.Equals, `ErrCode:10001 ErrClass:"database" ErrScope:"not-set" ErrLevel:"high" Message:"database driver error" Workaround:"Please check the database connection and the database config in configuration file." , ErrCode:36014 ErrClass:"sync-unit" ErrScope:"internal" ErrLevel:"high" Message:"only support ROW format binlog, unexpected DML statement found in query event" `) } + +func TestIsResumableError(t *testing.T) { + testCases := []struct { + err error + resumable bool + }{ + // only DM new error is checked + {&tmysql.SQLError{Code: 1105, Message: "unsupported modify column length 20 is less than origin 40", State: tmysql.DefaultMySQLState}, true}, + {&tmysql.SQLError{Code: 1105, Message: "unsupported drop integer primary key", State: tmysql.DefaultMySQLState}, true}, + {&tmysql.SQLError{Code: 1072, Message: "column c id 3 does not exist, this column may have been updated by other DDL ran in parallel", State: tmysql.DefaultMySQLState}, true}, + {terror.ErrDBExecuteFailed.Generate("file test.t3.sql: execute statement failed: USE `test_abc`;: context canceled"), true}, + {terror.ErrDBExecuteFailed.Delegate(&tmysql.SQLError{Code: 1105, Message: "unsupported modify column length 20 is less than origin 40", State: tmysql.DefaultMySQLState}, "alter table t modify col varchar(20)"), false}, + {terror.ErrDBExecuteFailed.Delegate(&tmysql.SQLError{Code: 1105, Message: "unsupported drop integer primary key", State: tmysql.DefaultMySQLState}, "alter table t drop column id"), false}, + {terror.ErrDBExecuteFailed.Delegate(&tmysql.SQLError{Code: 1067, Message: "Invalid default value for 'ct'", State: tmysql.DefaultMySQLState}, "CREATE TABLE `tbl` (`c1` int(11) NOT NULL,`ct` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',PRIMARY KEY (`c1`)) ENGINE=InnoDB DEFAULT CHARSET=latin1"), false}, + {terror.ErrDBExecuteFailed.Delegate(errors.New("Error 1062 (23000): Duplicate entry '5' for key 'PRIMARY'")), false}, + {terror.ErrDBExecuteFailed.Delegate(errors.New("INSERT INTO `db`.`tbl` (`c1`,`c2`) VALUES (?,?);: Error 1406: Data too long for column 'c2' at row 1")), false}, + // real error is generated by `Delegate` and multiple `Annotatef`, we use `New` to simplify it + {terror.ErrParserParseRelayLog.New("parse relay log file bin.000018 from offset 555 in dir /home/tidb/deploy/relay_log/d2e831df-b4ec-11e9-9237-0242ac110008.000004: parse relay log file bin.000018 from offset 0 in dir /home/tidb/deploy/relay_log/d2e831df-b4ec-11e9-9237-0242ac110008.000004: parse relay log file /home/tidb/deploy/relay_log/d2e831df-b4ec-11e9-9237-0242ac110008.000004/bin.000018: binlog checksum mismatch, data may be corrupted"), false}, + {terror.ErrParserParseRelayLog.New("parse relay log file bin.000018 from offset 500 in dir /home/tidb/deploy/relay_log/d2e831df-b4ec-11e9-9237-0242ac110008.000004: parse relay log file bin.000018 from offset 0 in dir /home/tidb/deploy/relay_log/d2e831df-b4ec-11e9-9237-0242ac110008.000004: parse relay log file /home/tidb/deploy/relay_log/d2e831df-b4ec-11e9-9237-0242ac110008.000004/bin.000018: get event err EOF, need 1567488104 but got 316323"), false}, + {terror.ErrSyncUnitDDLWrongSequence.Generate("wrong sequence", "right sequence"), false}, + {terror.ErrSyncerShardDDLConflict.Generate("conflict DDL", "conflict"), true}, + // others + {nil, true}, + {errors.New("unknown error"), true}, + {terror.ErrNotSet.Delegate(&tmysql.SQLError{Code: 1236, Message: "Could not find first log file name in binary log index file", State: tmysql.DefaultMySQLState}), false}, + {terror.ErrNotSet.Delegate(&tmysql.SQLError{Code: 1236, Message: "The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires", State: tmysql.DefaultMySQLState}), false}, + {terror.ErrLoadLightningRuntime.Delegate(common.ErrDBConnect), false}, + } + + for _, tc := range testCases { + err := NewProcessError(tc.err) + require.Equal(t, tc.resumable, IsResumableError(err)) + } +} + +func TestIsResumableRelayError(t *testing.T) { + testCases := []struct { + err error + resumable bool + }{ + {terror.ErrRelayUUIDSuffixNotValid, false}, + {terror.ErrRelayUUIDSuffixLessThanPrev, false}, + {terror.ErrRelayBinlogNameNotValid, false}, + {terror.ErrRelayNoCurrentUUID, false}, + {terror.ErrDBBadConn, true}, + } + + for _, tc := range testCases { + err := NewProcessError(tc.err) + require.Equal(t, tc.resumable, IsResumableRelayError(err)) + } +} diff --git a/dm/worker/server_test.go b/dm/worker/server_test.go index 2b9e99e291a..9f4f51f95fd 100644 --- a/dm/worker/server_test.go +++ b/dm/worker/server_test.go @@ -37,7 +37,7 @@ import ( "github.com/pingcap/tiflow/dm/relay" "github.com/pingcap/tiflow/dm/unit" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" v3rpc "go.etcd.io/etcd/api/v3/v3rpc/rpctypes" clientv3 "go.etcd.io/etcd/client/v3" "go.etcd.io/etcd/server/v3/embed" diff --git a/dm/worker/source_worker_test.go b/dm/worker/source_worker_test.go index 1b2a9da6f98..cb0b6f6ec60 100644 --- a/dm/worker/source_worker_test.go +++ b/dm/worker/source_worker_test.go @@ -36,7 +36,7 @@ import ( "github.com/pingcap/tiflow/dm/syncer" "github.com/pingcap/tiflow/dm/unit" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" clientv3 "go.etcd.io/etcd/client/v3" ) diff --git a/engine/test/integration_tests/dm_collation/run.sh b/engine/test/integration_tests/dm_collation/run.sh index 1f620f7eec6..305e70a32d7 100644 --- a/engine/test/integration_tests/dm_collation/run.sh +++ b/engine/test/integration_tests/dm_collation/run.sh @@ -39,7 +39,7 @@ function run() { # wait for dump and load finished exec_with_retry --count 30 "curl \"http://127.0.0.1:10245/api/v1/jobs/$job_id/status\" | tee /dev/stderr | jq -e '.task_status.\"mysql-01\".status.unit == \"DMSyncTask\" and .task_status.\"mysql-02\".status.unit == \"DMSyncTask\"'" - curl http://127.0.0.1:10245/api/v1/jobs/$job_id/status | tee /dev/stderr | jq -e '.finished_unit_status."mysql-02"[1].Status.finishedBytes == 174' + curl http://127.0.0.1:10245/api/v1/jobs/$job_id/status | tee /dev/stderr | jq -e '.finished_unit_status."mysql-02"[1].Status.finishedBytes == 248' # check data diff --git a/engine/test/integration_tests/dm_full_mode/run.sh b/engine/test/integration_tests/dm_full_mode/run.sh index a74eaacc676..840526f1fca 100644 --- a/engine/test/integration_tests/dm_full_mode/run.sh +++ b/engine/test/integration_tests/dm_full_mode/run.sh @@ -55,10 +55,10 @@ function run() { # create job & wait for job finished job_id=$(create_job "DM" "$CUR_DIR/conf/job.yaml" "dm_full_mode") - exec_with_retry --count 30 "curl \"http://127.0.0.1:10245/api/v1/jobs/$job_id/status\" | tee /dev/stderr | grep -q 'Error 1142: ALTER command denied'" + exec_with_retry --count 30 "curl \"http://127.0.0.1:10245/api/v1/jobs/$job_id/status\" | tee /dev/stderr | grep -q 'Error 1142 (42000): ALTER command denied'" docker restart server-executor-0 server-executor-1 server-executor-2 # check the error is not related to lightning checkpoint - exec_with_retry --count 60 "curl \"http://127.0.0.1:10245/api/v1/jobs/$job_id/status\" | tee /dev/stderr | grep -q 'Error 1142: ALTER command denied'" + exec_with_retry --count 60 "curl \"http://127.0.0.1:10245/api/v1/jobs/$job_id/status\" | tee /dev/stderr | grep -q 'Error 1142 (42000): ALTER command denied'" run_sql --port 4000 "GRANT ALTER ON *.* TO 'dm_full'@'%';" curl -X PUT "http://127.0.0.1:10245/api/v1/jobs/$job_id/status" -H 'Content-Type: application/json' -d '{"op": "resume"}' diff --git a/go.mod b/go.mod index b0bf3f98e8e..534a4b330c9 100644 --- a/go.mod +++ b/go.mod @@ -3,8 +3,6 @@ module github.com/pingcap/tiflow go 1.19 require ( - cloud.google.com/go/storage v1.27.0 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.2.0 github.com/BurntSushi/toml v1.2.1 github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/Shopify/sarama v1.36.0 @@ -22,15 +20,15 @@ require ( github.com/docker/go-units v0.4.0 github.com/dustin/go-humanize v1.0.0 github.com/edwingeng/deque v0.0.0-20191220032131-8596380dee17 - github.com/fatih/color v1.13.0 + github.com/fatih/color v1.14.1 github.com/gavv/monotime v0.0.0-20190418164738-30dba4353424 github.com/getkin/kin-openapi v0.80.0 - github.com/gin-gonic/gin v1.7.4 + github.com/gin-gonic/gin v1.8.1 github.com/glebarez/go-sqlite v1.17.3 github.com/glebarez/sqlite v1.4.6 github.com/go-mysql-org/go-mysql v1.6.1-0.20221223014230-81966e15b9c5 github.com/go-ozzo/ozzo-validation/v4 v4.3.0 - github.com/go-sql-driver/mysql v1.6.0 + github.com/go-sql-driver/mysql v1.7.0 github.com/goccy/go-json v0.9.11 github.com/gogo/gateway v1.1.0 github.com/gogo/protobuf v1.3.2 @@ -55,33 +53,34 @@ require ( github.com/modern-go/reflect2 v1.0.2 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 github.com/pingcap/check v0.0.0-20211026125417-57bd13f7b5f0 - github.com/pingcap/errors v0.11.5-0.20220729040631-518f63d66278 + github.com/pingcap/errors v0.11.5-0.20221009092201-b66cddb77c32 github.com/pingcap/failpoint v0.0.0-20220423142525-ae43b7f4e5c3 - github.com/pingcap/kvproto v0.0.0-20221130022225-6c56ac56fe5f + github.com/pingcap/kvproto v0.0.0-20230201112839-2b853bed8125 github.com/pingcap/log v1.1.1-0.20221116035753-734d527bc87c - github.com/pingcap/tidb v1.1.0-beta.0.20221201110602-e307642d9fa5 + github.com/pingcap/tidb v1.1.0-beta.0.20230206024556-76f1c526c4a2 github.com/pingcap/tidb-tools v6.1.1-0.20220715000306-1d2f00da8c3e+incompatible - github.com/pingcap/tidb/parser v0.0.0-20221201110602-e307642d9fa5 - github.com/prometheus/client_golang v1.13.0 - github.com/prometheus/client_model v0.2.0 + github.com/pingcap/tidb/parser v0.0.0-20230206024556-76f1c526c4a2 + github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_model v0.3.0 github.com/r3labs/diff v1.1.0 github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 + github.com/segmentio/kafka-go v0.4.38 github.com/shopspring/decimal v1.3.0 github.com/soheilhy/cmux v0.1.5 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14 github.com/swaggo/gin-swagger v1.2.0 - github.com/swaggo/swag v1.6.6-0.20200529100950-7c765ddd0476 + github.com/swaggo/swag v1.8.3 github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 - github.com/tikv/client-go/v2 v2.0.3-0.20221129032117-857772dd0907 - github.com/tikv/pd v1.1.0-beta.0.20220303060546-3695d8164800 - github.com/tikv/pd/client v0.0.0-20221031025758-80f0d8ca4d07 + github.com/tikv/client-go/v2 v2.0.5-0.20230202101145-8fd09cd88cce + github.com/tikv/pd v1.1.0-beta.0.20230203015356-248b3f0be132 + github.com/tikv/pd/client v0.0.0-20230203015356-248b3f0be132 github.com/tinylib/msgp v1.1.6 github.com/uber-go/atomic v1.4.0 github.com/vmihailenco/msgpack/v5 v5.3.5 - github.com/xdg/scram v1.0.3 + github.com/xdg/scram v1.0.5 go.etcd.io/etcd/api/v3 v3.5.4 go.etcd.io/etcd/client/pkg/v3 v3.5.4 go.etcd.io/etcd/client/v3 v3.5.4 @@ -92,17 +91,17 @@ require ( go.uber.org/atomic v1.10.0 go.uber.org/dig v1.13.0 go.uber.org/goleak v1.2.0 - go.uber.org/multierr v1.8.0 + go.uber.org/multierr v1.9.0 go.uber.org/ratelimit v0.2.0 - go.uber.org/zap v1.23.0 + go.uber.org/zap v1.24.0 golang.org/x/exp v0.0.0-20221023144134-a1e5550cf13e - golang.org/x/net v0.2.0 + golang.org/x/net v0.5.0 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.2.0 - golang.org/x/text v0.4.0 - golang.org/x/time v0.2.0 - google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c - google.golang.org/grpc v1.50.1 + golang.org/x/sys v0.4.0 + golang.org/x/text v0.6.0 + golang.org/x/time v0.3.0 + google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd + google.golang.org/grpc v1.51.0 google.golang.org/protobuf v1.28.1 gopkg.in/yaml.v2 v2.4.0 gorm.io/driver/mysql v1.3.3 @@ -114,10 +113,12 @@ require ( cloud.google.com/go v0.105.0 // indirect cloud.google.com/go/compute v1.13.0 // indirect cloud.google.com/go/compute/metadata v0.2.1 // indirect - cloud.google.com/go/iam v0.8.0 // indirect + cloud.google.com/go/iam v0.7.0 // indirect + cloud.google.com/go/storage v1.27.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v0.20.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.12.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.2.0 // indirect github.com/DataDog/zstd v1.4.6-0.20210211175136-c6db21d202f4 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect @@ -130,8 +131,9 @@ require ( github.com/blacktear23/go-proxyprotocol v1.0.2 // indirect github.com/cakturk/go-netstat v0.0.0-20200220111822-e5b49efee7a5 // indirect github.com/carlmjohnson/flagext v0.21.0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cheggaaa/pb/v3 v3.0.8 // indirect + github.com/cloudfoundry/gosigar v1.3.4 // indirect github.com/cockroachdb/errors v1.8.1 // indirect github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f // indirect github.com/cockroachdb/redact v1.0.8 // indirect @@ -160,7 +162,7 @@ require ( github.com/go-openapi/swag v0.21.1 // indirect github.com/go-playground/locales v0.14.0 // indirect github.com/go-playground/universal-translator v0.18.0 // indirect - github.com/go-playground/validator/v10 v10.9.0 // indirect + github.com/go-playground/validator/v10 v10.10.0 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect @@ -188,7 +190,7 @@ require ( github.com/jonboulle/clockwork v0.3.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.15.9 // indirect + github.com/klauspost/compress v1.15.13 // indirect github.com/klauspost/cpuid v1.3.1 // indirect github.com/kr/pretty v0.3.0 // indirect github.com/kr/text v0.2.0 // indirect @@ -202,9 +204,10 @@ require ( github.com/lestrrat-go/option v1.0.0 // indirect github.com/lufia/plan9stats v0.0.0-20220326011226-f1430873d8db // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.16 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/mattn/go-sqlite3 v2.0.1+incompatible // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/ncw/directio v1.0.5 // indirect github.com/ngaut/log v0.0.0-20210830112240-0124ec040aeb // indirect @@ -212,40 +215,45 @@ require ( github.com/ngaut/sync2 v0.0.0-20141008032647-7a24ed77b2ef // indirect github.com/opentracing/basictracer-go v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pelletier/go-toml/v2 v2.0.1 // indirect + github.com/petermattis/goid v0.0.0-20211229010228-4d14c490ee36 // indirect github.com/philhofer/fwd v1.1.1 // indirect github.com/pierrec/lz4/v4 v4.1.15 // indirect - github.com/pingcap/badger v1.5.1-0.20220314162537-ab58fbf40580 // indirect + github.com/pingcap/badger v1.5.1-0.20230103063557-828f39b09b6d // indirect github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059 // indirect github.com/pingcap/goleveldb v0.0.0-20191226122134-f82aafb29989 // indirect github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4 // indirect - github.com/pingcap/tipb v0.0.0-20221123081521-2fb828910813 // indirect + github.com/pingcap/tipb v0.0.0-20230119054146-c6b7a5a1623b // indirect github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/common v0.39.0 // indirect + github.com/prometheus/procfs v0.9.0 // indirect github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect - github.com/rivo/uniseg v0.4.2 // indirect + github.com/rivo/uniseg v0.4.3 // indirect github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/rs/cors v1.7.0 // indirect - github.com/shirou/gopsutil/v3 v3.22.9 // indirect + github.com/sasha-s/go-deadlock v0.2.0 // indirect + github.com/shirou/gopsutil/v3 v3.22.12 // indirect github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 // indirect github.com/shurcooL/httpgzip v0.0.0-20190720172056-320755c1c1b0 // indirect github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726 // indirect github.com/siddontang/go-log v0.0.0-20180807004314-8d05993dda07 // indirect github.com/sirupsen/logrus v1.9.0 // indirect + github.com/spkg/bom v1.0.0 // indirect github.com/stathat/consistent v1.0.0 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 // indirect - github.com/tklauser/go-sysconf v0.3.10 // indirect - github.com/tklauser/numcpus v0.4.0 // indirect + github.com/tiancaiamao/gp v0.0.0-20221230034425-4025bc8a4d4a // indirect + github.com/tklauser/go-sysconf v0.3.11 // indirect + github.com/tklauser/numcpus v0.6.0 // indirect github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect github.com/twmb/murmur3 v1.1.3 // indirect github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect github.com/uber/jaeger-lib v2.4.1+incompatible // indirect - github.com/ugorji/go/codec v1.2.6 // indirect + github.com/ugorji/go/codec v1.2.7 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.1 // indirect github.com/vbauerster/mpb/v7 v7.5.3 // indirect @@ -268,21 +276,23 @@ require ( go.opentelemetry.io/otel/sdk/metric v0.20.0 // indirect go.opentelemetry.io/otel/trace v0.20.0 // indirect go.opentelemetry.io/proto/otlp v0.7.0 // indirect - golang.org/x/crypto v0.1.0 // indirect - golang.org/x/oauth2 v0.2.0 // indirect - golang.org/x/term v0.2.0 // indirect - golang.org/x/tools v0.2.0 // indirect + golang.org/x/crypto v0.5.0 // indirect + golang.org/x/oauth2 v0.3.0 // indirect + golang.org/x/term v0.4.0 // indirect + golang.org/x/tools v0.5.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect google.golang.org/api v0.103.0 // indirect google.golang.org/appengine v1.6.7 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apimachinery v0.26.0 // indirect modernc.org/libc v1.16.8 // indirect modernc.org/mathutil v1.4.1 // indirect modernc.org/memory v1.1.1 // indirect modernc.org/sqlite v1.17.3 // indirect - sigs.k8s.io/yaml v1.2.0 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 // indirect ) @@ -295,3 +305,6 @@ replace github.com/benbjohnson/clock v1.3.0 => github.com/benbjohnson/clock v1.1 // copy from TiDB replace go.opencensus.io => go.opencensus.io v0.23.1-0.20220331163232-052120675fac + +// FIXME: remove this replace after https://github.com/segmentio/kafka-go/pull/1059 is merged +replace github.com/segmentio/kafka-go v0.4.38 => github.com/3AceShowHand/kafka-go v0.0.0-20230109084533-cd584ac8c705 diff --git a/go.sum b/go.sum index 0e31932b03a..9bae160fa51 100644 --- a/go.sum +++ b/go.sum @@ -28,41 +28,364 @@ cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Ud cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= cloud.google.com/go v0.105.0 h1:DNtEKRBAAzeS4KyIory52wWHuClNaXJ5x1F7xa4q+5Y= cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= cloud.google.com/go/compute v1.13.0 h1:AYrLkB8NPdDRslNp4Jxmzrhdr03fUAIDbiGFjLWowoU= cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.1 h1:efOwf5ymceDhK6PKMnnrTHP4pppY5L22mle96M1yP48= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.1.1/go.mod h1:CKqrcnI/suGpybEHxZ7BMehL0oA4LpdyJdUlTl9jVMw= -cloud.google.com/go/iam v0.8.0 h1:E2osAkZzxI/+8pZcxVLcDtAQx/u+hZXVryUaYQ5O0Kk= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0 h1:k4MuwOsS7zGJJ+QfZ5vBK8SgHBAvYN/23BWsiihJ1vs= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgyMQ= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AlekSi/gocov-xml v1.0.0/go.mod h1:J0qYeZ6tDg4oZubW9mAAgxlqw39PDfoEkzB3HXSbEuA= +github.com/3AceShowHand/kafka-go v0.0.0-20230109084533-cd584ac8c705 h1:Z++RzhDGHRmCLXCfGtr0q9WvLL0qooLuIfdnquRAE68= +github.com/3AceShowHand/kafka-go v0.0.0-20230109084533-cd584ac8c705/go.mod h1:ikyuGon/60MN/vXFgykf7Zm8P5Be49gJU6vezwjnnhU= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.20.0 h1:KQgdWmEOmaJKxaUUZwHAYh12t+b+ZJf8q3friycK1kA= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.20.0/go.mod h1:ZPW/Z0kLCTdDZaDbYTetxc9Cxl/2lNqxYHYNOF2bti0= @@ -79,7 +402,6 @@ github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbi github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a/go.mod h1:EFZQ978U7x8IRnstaskI3IysnWY5Ao3QgZUKOXlsAdw= github.com/CloudyKit/jet v2.1.3-0.20180809161101-62edd43e4f88+incompatible/go.mod h1:HPYO+50pSWkPoj9Q/eq0aRGByCL6ScRlUmiEX5Zgm+w= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= @@ -97,9 +419,7 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/ReneKroon/ttlcache/v2 v2.3.0/go.mod h1:zbo6Pv/28e21Z8CzzqgYRArQYGYtjONRxaAKGxzQvG4= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.29.0/go.mod h1:2QpgD79wpdAESqNQMxNc0KYMkycd4slxGdV3TWSVqrU= github.com/Shopify/sarama v1.36.0 h1:0OJs3eCcnezkWniVjwBbCJVaa0B1k7ImCRS3WN6NsSk= @@ -108,13 +428,11 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWso github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/Shopify/toxiproxy/v2 v2.4.0 h1:O1e4Jfvr/hefNTNu+8VtdEG5lSeamJRo4aKhMOKNM64= github.com/Shopify/toxiproxy/v2 v2.4.0/go.mod h1:3ilnjng821bkozDRxNoo64oI/DKqM+rOyJzb564+bvg= -github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/VividCortex/ewma v1.2.0 h1:f58SaIzcDXrSy3kWaHNvuJgJ3Nmz59Zji6XoJR/q1ow= github.com/VividCortex/ewma v1.2.0/go.mod h1:nz4BbCtbLyFDeC9SUHbtcT5644juEuWfUAUnGx7j5l4= github.com/VividCortex/mysqlerr v1.0.0 h1:5pZ2TZA+YnzPgzBfiUWGqWmKDVNBdrkf9g+DNe1Tiq8= github.com/VividCortex/mysqlerr v1.0.0/go.mod h1:xERx8E4tBhLvpjzdUyQiSfUxeMcATEQrflDAfXsqcAE= -github.com/Xeoncross/go-aesctr-with-hmac v0.0.0-20200623134604-12b17a7ff502/go.mod h1:pmnBM9bxWSiHvC/gSWunUIyDvGn33EkP2CUjxFKtTTM= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8= github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= @@ -127,16 +445,13 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2c github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= github.com/aliyun/alibaba-cloud-sdk-go v1.61.1581 h1:Q/yk4z/cHUVZfgTqtD09qeYBxHwshQAjVRX73qs8UH0= github.com/aliyun/alibaba-cloud-sdk-go v1.61.1581/go.mod h1:RcDobYh8k5VP6TNybz9m++gL3ijVI5wueVr0EM10VsU= -github.com/alvaroloes/enumer v1.1.2/go.mod h1:FxrjvuXoDAx9isTJrv4c+T410zFi0DtXIT0m65DJ+Wo= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129 h1:MzBOUgng9orim59UnfUTLRjMpd09C5uEVQ6RPGeCaVI= github.com/andres-erbsen/clock v0.0.0-20160526145045-9e14626cd129/go.mod h1:rFgpPQZYZ8vdbc+48xibu8ALc3yeyd64IhHS+PU6Yyg= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antonmedv/expr v1.9.0/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8= github.com/apache/thrift v0.0.0-20181112125854-24918abba929/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.1-0.20201008052519-daf620915714 h1:Jz3KVLYY5+JO7rDiX0sAuRGtuv2vG01r17Y9nLMWNUw= github.com/apache/thrift v0.13.1-0.20201008052519-daf620915714/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/appleboy/gofight/v2 v2.1.2/go.mod h1:frW+U1QZEdDgixycTj4CygQ48yLTUhplt43+Wczp3rw= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= @@ -147,7 +462,6 @@ github.com/aws/aws-sdk-go v1.30.19/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZve github.com/aws/aws-sdk-go v1.35.3/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go v1.44.48 h1:jLDC9RsNoYMLFlKpB8LdqUnoDdC2yvkS4QbuyPQJ8+M= github.com/aws/aws-sdk-go v1.44.48/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/axw/gocov v1.0.0/go.mod h1:LvQpEYiwwIb2nYkXY2fDWhg9/AsYqkhmrCshjlUJECE= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= @@ -164,7 +478,6 @@ github.com/blacktear23/go-proxyprotocol v1.0.2/go.mod h1:FSCbgnRZrQXazBLL5snfBbr github.com/bradleyjkemp/cupaloy/v2 v2.5.0/go.mod h1:TD5UU0rdYTbu/TtuwFuWrtiRARuN7mtRipvs/bsShSE= github.com/bradleyjkemp/grpc-tools v0.2.5 h1:zZhwRxFktKIZliZ7g+V6zwNl0m9o/W1kvWJFWRxkZ/Q= github.com/bradleyjkemp/grpc-tools v0.2.5/go.mod h1:9OM0QfQGzMUC98I2kvHMK4Lw0memhg8j2BosoL4ME0M= -github.com/breeswish/gin-jwt/v2 v2.6.4-jwt-patch/go.mod h1:KjBLriHXe7L6fGceqWzTod8HUB/TP1WWDtfuSYtYXaI= 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/carlmjohnson/flagext v0.21.0 h1:/c4uK3ie786Z7caXLcIMvePNSSiH3bQVGDvmGLMme60= @@ -172,13 +485,15 @@ github.com/carlmjohnson/flagext v0.21.0/go.mod h1:Eenv0epIUAr4NuedNmkzI8WmBmjIxZ github.com/cenkalti/backoff/v4 v4.0.2 h1:JIufpQLbh4DkbQoii76ItQIUFzevQSqOLZca4eamEDs= github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chaos-mesh/go-sqlsmith v0.0.0-20220905074648-403033efad45 h1:OF3Ny4Y8TrTjg7Qh1qERc07XwehwJ6XTPw56FX8wY4E= github.com/chaos-mesh/go-sqlsmith v0.0.0-20220905074648-403033efad45/go.mod h1:Es+s5MxdatQefWfq1RqglgBqkTPmdVMtN35/PKo32Ro= github.com/cheggaaa/pb/v3 v3.0.8 h1:bC8oemdChbke2FHIIGy9mn4DPJ2caZYQnfbRqwmdCoA= @@ -191,6 +506,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudfoundry/gosigar v1.3.4 h1:T3MoGdugg1vdHn8Az7wDn7cZ4+QCjZph+eXf2CjSjo4= +github.com/cloudfoundry/gosigar v1.3.4/go.mod h1:g9r7ETZ1tpvJCT9TpqxO53+5BUZiM2FDSFSENzjK5Z8= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -198,9 +515,8 @@ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XP github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/datadriven v1.0.0 h1:uhZrAfEayBecH2w2tZmhe20HJ7hDvrrA4x2Bg9YdZKM= github.com/cockroachdb/datadriven v1.0.0/go.mod h1:5Ib8Meh+jk1RlHIXej6Pzevx/NLlNvQB9pmSBZErGA4= @@ -233,20 +549,16 @@ github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8Nz github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= @@ -260,7 +572,6 @@ github.com/cznic/y v0.0.0-20170802143616-045f81c6662a/go.mod h1:1rk5VM7oSnA4vjp+ github.com/danjacques/gofslock v0.0.0-20191023191349-0a45f885bc37/go.mod h1:DC3JtzuG7kxMvJ6dZmf2ymjNyoXwgtklr7FN+Um2B0U= github.com/danjacques/gofslock v0.0.0-20220131014315-6e321f4509c8 h1:+4P40F8AqFAW4/ft2WXiZXrgtRbS8RLb61D8e6NcMw0= github.com/danjacques/gofslock v0.0.0-20220131014315-6e321f4509c8/go.mod h1:VT5Ecrx/r1oHkQbiEBwkLiuQ51igUBmxXuiw9tnSLqY= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -270,7 +581,6 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/deepmap/oapi-codegen v1.9.0 h1:qpyRY+dzjMai5QejjA53ebnBtcSvIcZOtYwVlsgdxOc= github.com/deepmap/oapi-codegen v1.9.0/go.mod h1:7t4DbSxmAffcTEgrWvsPYEE2aOARZ8ZKWp3hDuZkHNc= -github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= @@ -285,10 +595,8 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8 github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/dnephin/pflag v1.0.7/go.mod h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -311,22 +619,21 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/etcd-io/gofail v0.0.0-20190801230047-ad7f989257ca/go.mod h1:49H/RkXP8pKaZy4h0d+NW16rSLhyVBt4o6VLJbmOqDE= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w= +github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flosch/pongo2 v0.0.0-20190707114632-bbf5a6c351f4/go.mod h1:T9YF2M40nIgbVgp3rreNmTged+9HrbNTIQf1PsaIiTA= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8= github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= @@ -343,8 +650,6 @@ github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASx github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/gavv/monotime v0.0.0-20190418164738-30dba4353424 h1:Vh7rylVZRZCj6W41lRlP17xPk4Nq260H4Xo/DDYmEZk= github.com/gavv/monotime v0.0.0-20190418164738-30dba4353424/go.mod h1:vmp8DIyckQMXOPl0AQVHt+7n5h7Gb7hS6CUydiV8QeA= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= github.com/getkin/kin-openapi v0.80.0 h1:W/s5/DNnDCR8P+pYyafEWlGk4S7/AfQUWXgrRSSAzf8= github.com/getkin/kin-openapi v0.80.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= @@ -359,17 +664,15 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.7.4 h1:QmUZXrvJ9qZ3GfWvQ+2wnW/1ePrTEJqPKMYEU3lD/DM= github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/glebarez/go-sqlite v1.17.3 h1:Rji9ROVSTTfjuWD6j5B+8DtkNvPILoUC3xRhkQzGxvk= github.com/glebarez/go-sqlite v1.17.3/go.mod h1:Hg+PQuhUy98XCxWEJEaWob8x7lhJzhNYF1nZbUiRGIY= github.com/glebarez/sqlite v1.4.6 h1:D5uxD2f6UJ82cHnVtO2TZ9pqsLyto3fpDKHIk2OsR8A= github.com/glebarez/sqlite v1.4.6/go.mod h1:WYEtEFjhADPaPJqL/PGlbQQGINBA3eUAfDNbKFJf/zA= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-echarts/go-echarts v1.0.0/go.mod h1:qbmyAb/Rl1f2w7wKba1D4LoNq4U164yO4/wedFbcWyo= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -379,36 +682,27 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-mysql-org/go-mysql v1.6.1-0.20221223014230-81966e15b9c5 h1:RYZm5JbJelQnV/7wojD4T04kXd5O46gfOageTLzjJoc= github.com/go-mysql-org/go-mysql v1.6.1-0.20221223014230-81966e15b9c5/go.mod h1:9cRWLtuXNKhamUPMkrDVzBhaomGvqLRLtBiyjvjc4pk= -github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/spec v0.19.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.20.6 h1:ich1RQ3WDbfoeTqTAb+5EIxNmpKVJZWBNah9RAT0jIQ= github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= @@ -423,26 +717,24 @@ github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.9.0 h1:NgTtmN58D0m8+UuxtYmGztBJB7VnPgjj221I1QHci2A= github.com/go-playground/validator/v10 v10.9.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-resty/resty/v2 v2.6.0/go.mod h1:PwvJS6hvaPkjtjNg9ph+VrSD92bi5Zq73w/BIH7cC3Q= +github.com/go-playground/validator/v10 v10.10.0 h1:I7mrTYv78z8k8VXa/qJlOlEXn/nBh+BF8dHX5nt/dr0= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-sql-driver/mysql v1.3.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc= +github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-graphviz v0.0.9/go.mod h1:wXVsXxmyMQU6TN3zGRttjNn3h+iCAS7xQFC6TlNvLhk= github.com/goccy/go-json v0.7.8/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -456,14 +748,11 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= -github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -525,10 +814,12 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -555,35 +846,39 @@ github.com/google/pprof v0.0.0-20211122183932-1daafda22083/go.mod h1:KgnwoLYCZ8I github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= @@ -591,13 +886,11 @@ 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.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= 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.11.0 h1:Ghn7copILfeIg0y8sTGRppI1bd8I4l2VN3cob0Xeqwg= github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.0/go.mod h1:dnjr4snxnhRSn5GWqJUva2AoMbeaxyAcepvc0Tg8lXk= -github.com/gtank/cryptopasta v0.0.0-20170601214702-1f550f6f2f69/go.mod h1:YLEMZOtU+AZ7dhN9T/IpGhXVGly2bvkJQ+zxj3WeVQo= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -626,7 +919,6 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/henrylee2cn/ameda v1.4.10/go.mod h1:liZulR8DgHxdK+MEwvZIylGnmcjzQ6N6f2PlWe7nEO4= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hydrogen18/memlistener v0.0.0-20141126152155-54553eb933fb/go.mod h1:qEIFzExnS6016fRpRfxrExeVn2gbClQA99gQhnIcdhE= github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= @@ -646,36 +938,6 @@ github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbk github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.3.0/go.mod h1:b0JqxHvPmljG+HQ5IsvQ0yqeSi4nGcDTVjFoiLDb0Ik= -github.com/jackc/pgx v3.6.2+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.6.0/go.mod h1:vPh43ZzxijXUVJ+t/EmXBtFmbFVO72cuneCT9oAlxAg= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jarcoal/httpmock v1.2.0 h1:gSvTxxFR/MEMfsGrvRbdfpRUMBStovlSRLw0Ep1bwwc= github.com/jarcoal/httpmock v1.2.0/go.mod h1:oCoTsnAz4+UoOUIf5lJOWV2QQIW5UoeUI6aM2YnWAZk= github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= @@ -695,12 +957,9 @@ github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZ github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= github.com/jedib0t/go-pretty/v6 v6.2.2 h1:o3McN0rQ4X+IU+HduppSp9TwRdGLRW2rhJXy9CJaCRw= github.com/jedib0t/go-pretty/v6 v6.2.2/go.mod h1:+nE9fyyHGil+PuISTCrp7avEdo6bqoMwqZnuiK2r2a0= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= -github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= -github.com/jinzhu/now v1.1.2/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= @@ -712,21 +971,18 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGw github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmoiron/sqlx v1.3.3 h1:j82X0bf7oQ27XeqxicSZsTU5suPwKElg3oyxNn43iTk= github.com/jmoiron/sqlx v1.3.3/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= -github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/sqltocsv v0.0.0-20210428211105-a6d6801d59df h1:Zrb0IbuLOGHL7nrO2WrcuNWgDTlzFv3zY69QMx4ggQE= github.com/joho/sqltocsv v0.0.0-20210428211105-a6d6801d59df/go.mod h1:mAVCUAYtW9NG31eB30umMSLKcDt6mCUWSjoSn5qBh0k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg= github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/joomcode/errorx v1.0.1/go.mod h1:kgco15ekB6cs+4Xjzo7SPeXzx38PbJzBwbnu9qfVNHQ= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -737,7 +993,6 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/errors v0.0.0-20181118221551-089d3ea4e4d5/go.mod h1:W54LbzXuIE0boCoNJfwqpmkKJ1O4TCTZMetAt6jGk7Q= github.com/juju/loggo v0.0.0-20180524022052-584905176618/go.mod h1:vgyd7OREkbtVEN/8IXZe5Ooef3LQePvuBm9UWj6ZL8U= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/juju/testing v0.0.0-20180920084828-472a3e8b2073/go.mod h1:63prj8cnj0tU0S9OHjGJn+b1h0ZghCndfnbQolrYTwA= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= @@ -762,13 +1017,13 @@ github.com/klauspost/compress v1.10.5/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= +github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= 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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -776,8 +1031,6 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= @@ -807,15 +1060,10 @@ github.com/lestrrat-go/jwx/v2 v2.0.6 h1:RlyYNLV892Ed7+FTfj1ROoF6x7WxL965PGTHso/6 github.com/lestrrat-go/jwx/v2 v2.0.6/go.mod h1:aVrGuwEr3cp2Prw6TtQvr8sQxe+84gruID5C9TxT64Q= github.com/lestrrat-go/option v1.0.0 h1:WqAWL8kh8VcSoD6xjSH34/1m8yxluXQbDeKNfvFeEO4= github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.3 h1:v9QZf2Sn6AmjXtQeFpdoq/eaNtYP6IN+7lcrygsIAtg= -github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/linkedin/goavro/v2 v2.11.1 h1:4cuAtbDfqkKnBXp9E+tRkIJGa6W6iAjwonwt8O1f4U0= github.com/linkedin/goavro/v2 v2.11.1/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA= -github.com/lucasb-eyer/go-colorful v1.0.2/go.mod h1:0MS4r+7BZKSJ5mw4/S5MPN+qHFF1fYclkSPilDOKW0s= -github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lufia/plan9stats v0.0.0-20220326011226-f1430873d8db h1:m2s7Fwo4OwmcheIWUc/Nw9/MZ0eFtP3to0ovTpqOiCQ= github.com/lufia/plan9stats v0.0.0-20220326011226-f1430873d8db/go.mod h1:VgrrWVwBO2+6XKn8ypT3WUqvoxCa8R2M5to2tRzGovI= @@ -829,9 +1077,7 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -840,19 +1086,14 @@ github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxec github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 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= @@ -860,22 +1101,19 @@ github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWV github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v2.0.1+incompatible h1:xQ15muvnzGBHpIpdrNi1DA5x0+TcBZzsIDwmw9uTHzw= +github.com/mattn/go-sqlite3 v2.0.1+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxatome/go-testdeep v1.11.0 h1:Tgh5efyCYyJFGUYiT0qxBSIDeXw0F5zSoatlou685kk= github.com/mediocregopher/mediocre-go-lib v0.0.0-20181029021733-cb65787f37ed/go.mod h1:dSsfyI2zABAdhcbvkXqgxOxrCsbYeHCPgrZkku60dSg= github.com/mediocregopher/radix/v3 v3.3.0/go.mod h1:EmfVyvspXz1uZEyPBMyGK+kjWiKQGvsUt6O3Pj+LDCQ= -github.com/mgechev/dots v0.0.0-20190921121421-c36f7dcfbb81/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.0.2/go.mod h1:rb0dQy1LVAxW9SWy5R3LPUjevzUbUS316U5MFySA2lo= github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/minio/sio v0.3.0/go.mod h1:8b0yPp2avGThviy/+OCJBI6OMpvxoUuiLvE6F1lebhw= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= @@ -892,7 +1130,6 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/montanaflynn/stats v0.5.0/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= @@ -903,7 +1140,6 @@ github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OS github.com/ncw/directio v1.0.4/go.mod h1:CKGdcN7StAaqjT7Qack3lAXeX4pjnyc46YeqZH1yWVY= github.com/ncw/directio v1.0.5 h1:JSUBhdjEvVaJvOoyPAbcW0fnd0tvRXD76wEfZ1KcQz4= github.com/ncw/directio v1.0.5/go.mod h1:rX/pKEYkOXBGOggmcyJeJGloCkleSvphPx2eV3t6ROk= -github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= github.com/ngaut/log v0.0.0-20180314031856-b8e36e7ba5ac/go.mod h1:ueVCjKQllPmX7uEvCYnZD5b8qjidGf1TCH61arVe4SU= github.com/ngaut/log v0.0.0-20210830112240-0124ec040aeb h1:XL3Y/FWIBw1bONrCJwXH+JWCI+usIo9EoaHRQNeJoPo= github.com/ngaut/log v0.0.0-20210830112240-0124ec040aeb/go.mod h1:ueVCjKQllPmX7uEvCYnZD5b8qjidGf1TCH61arVe4SU= @@ -917,12 +1153,8 @@ github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oleiade/reflections v1.0.1/go.mod h1:rdFxbxq4QXVZWj0F+e9jqjDkc7dbp97vkRixKo2JR60= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= @@ -930,12 +1162,11 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= +github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= @@ -943,36 +1174,34 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/name v0.0.0-20180628100202-0fd16699aae1/go.mod h1:eD5JxqMiuNYyFNmyY9rkJ/slN8y59oEu4Ei7F8OoKWQ= github.com/pborman/getopt v0.0.0-20180729010549-6fdd0a2c7117/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/petermattis/goid v0.0.0-20211229010228-4d14c490ee36 h1:64bxqeTEN0/xoEqhKGowgihNuzISS9rEG6YUMU4bzJo= github.com/petermattis/goid v0.0.0-20211229010228-4d14c490ee36/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/phf/go-queue v0.0.0-20170504031614-9abe38d0371d/go.mod h1:lXfE4PvvTW5xOjO6Mba8zDPyw8M93B6AQ7frTGnMlA8= github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= -github.com/pingcap/badger v1.5.1-0.20220314162537-ab58fbf40580 h1:MKVFZuqFvAMiDtv3AbihOQ6rY5IE8LWflI1BuZ/hF0Y= github.com/pingcap/badger v1.5.1-0.20220314162537-ab58fbf40580/go.mod h1:upwDfet29M5y5koWilbWWA6ca3Lr0YVuzwX/DK58Vdk= +github.com/pingcap/badger v1.5.1-0.20230103063557-828f39b09b6d h1:AEcvKyVM8CUII3bYzgz8haFXtGiqcrtXW1csu/5UELY= +github.com/pingcap/badger v1.5.1-0.20230103063557-828f39b09b6d/go.mod h1:p8QnkZnmyV8L/M/jzYb8rT7kv3bz9m7bn1Ju94wDifs= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/check v0.0.0-20191107115940-caf2b9e6ccf4/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= -github.com/pingcap/check v0.0.0-20191216031241-8a5a85928f12/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= github.com/pingcap/check v0.0.0-20211026125417-57bd13f7b5f0 h1:HVl5539r48eA+uDuX/ziBmQCxzT1pGrzWbKuXT46Bq0= github.com/pingcap/check v0.0.0-20211026125417-57bd13f7b5f0/go.mod h1:PYMCGwN0JHjoqGr3HrZoD+b8Tgx8bKnArhSq8YVzUMc= -github.com/pingcap/errcode v0.3.0/go.mod h1:4b2X8xSqxIroj/IZ9MX/VGZhAwc11wB9wRIzHvz6SeM= github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pingcap/errors v0.11.5-0.20190809092503-95897b64e011/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pingcap/errors v0.11.5-0.20200917111840-a15ef68f753d/go.mod h1:g4vx//d6VakjJ0mk7iLBlKA8LFavV/sAVINT/1PFxeQ= github.com/pingcap/errors v0.11.5-0.20210425183316-da1aaba5fb63/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= github.com/pingcap/errors v0.11.5-0.20211224045212-9687c2b0f87c/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= -github.com/pingcap/errors v0.11.5-0.20220729040631-518f63d66278 h1:3Dm0DWeQlwV8LbpQxP2tojHhxd9aY59KI+QN0ns6bBo= -github.com/pingcap/errors v0.11.5-0.20220729040631-518f63d66278/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= -github.com/pingcap/failpoint v0.0.0-20200702092429-9f69995143ce/go.mod h1:w4PEZ5y16LeofeeGwdgZB4ddv9bLyDuIX+ljstgKZyk= +github.com/pingcap/errors v0.11.5-0.20221009092201-b66cddb77c32 h1:m5ZsBa5o/0CkzZXfXLaThzKuR85SnHHetqBCpzQ30h8= +github.com/pingcap/errors v0.11.5-0.20221009092201-b66cddb77c32/go.mod h1:X2r9ueLEUZgtx2cIogM0v4Zj5uvvzhuuiu7Pn8HzMPg= github.com/pingcap/failpoint v0.0.0-20210918120811-547c13e3eb00/go.mod h1:4qGtCB0QK0wBzKtFEGDhxXnSnbQApw1gc9siScUl8ew= github.com/pingcap/failpoint v0.0.0-20220423142525-ae43b7f4e5c3 h1:kJolJWbyadVeL8RKBlqmXQR7FRKPsIeU85TUYyhbhiQ= github.com/pingcap/failpoint v0.0.0-20220423142525-ae43b7f4e5c3/go.mod h1:4qGtCB0QK0wBzKtFEGDhxXnSnbQApw1gc9siScUl8ew= @@ -981,41 +1210,35 @@ github.com/pingcap/fn v0.0.0-20200306044125-d5540d389059/go.mod h1:fMRU1BA1y+r89 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-20200411081810-b85805c9476c/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= -github.com/pingcap/kvproto v0.0.0-20220228094105-9bb22e5a97fc/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20220302110454-c696585a961b/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20220304032058-ccd676426a27/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20220328072018-6e75c12dbd73/go.mod h1:IOdRDPLyda8GX2hE/jO7gqaCV/PNFh8BZQCQZXfIOqI= github.com/pingcap/kvproto v0.0.0-20220429093005-2839fa5a1ed6/go.mod h1:OYtxs0786qojVTmkVeufx93xe+jUgm56GUYRIKnmaGI= -github.com/pingcap/kvproto v0.0.0-20221026112947-f8d61344b172/go.mod h1:OYtxs0786qojVTmkVeufx93xe+jUgm56GUYRIKnmaGI= -github.com/pingcap/kvproto v0.0.0-20221130022225-6c56ac56fe5f h1:46ZD6xzQWJ8Jkeal/U7SqkX030Mgs8DAn6QV/9zbqOQ= -github.com/pingcap/kvproto v0.0.0-20221130022225-6c56ac56fe5f/go.mod h1:OYtxs0786qojVTmkVeufx93xe+jUgm56GUYRIKnmaGI= +github.com/pingcap/kvproto v0.0.0-20230201112839-2b853bed8125 h1:ZiCJcEzmmF5xNgt8GIXekd3WQXI/22kzYQnrHi3Fc/4= +github.com/pingcap/kvproto v0.0.0-20230201112839-2b853bed8125/go.mod h1:+on3Lfk/fb1lXkud3XvskJumhSIEEgN2TTbMObUlrxE= github.com/pingcap/log v0.0.0-20191012051959-b742a5d432e9/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20200511115504-543df19646ad/go.mod h1:4rbK1p9ILyIfb6hU7OG2CiWSqMXnp3JMbiaVJ6mvoY8= github.com/pingcap/log v0.0.0-20210625125904-98ed8e2eb1c7/go.mod h1:8AanEdAHATuRurdGxZXBz0At+9avep+ub7U1AGYLIMM= -github.com/pingcap/log v0.0.0-20210906054005-afc726e70354/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v0.0.0-20211215031037-e024ba4eb0ee/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.0/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= -github.com/pingcap/log v1.1.1-0.20221015072633-39906604fb81/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= +github.com/pingcap/log v1.1.1-0.20221110025148-ca232912c9f3/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= github.com/pingcap/log v1.1.1-0.20221116035753-734d527bc87c h1:crhkw6DD+07Bg1wYhW5Piw+kYNKZqFQqfC2puUf6gMI= github.com/pingcap/log v1.1.1-0.20221116035753-734d527bc87c/go.mod h1:DWQW5jICDR7UJh4HtxXSM20Churx4CQL0fwL/SoOSA4= -github.com/pingcap/sysutil v0.0.0-20211208032423-041a72e5860d/go.mod h1:7j18ezaWTao2LHOyMlsc2Dg1vW+mDY9dEbPzVyOlaeM= github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4 h1:HYbcxtnkN3s5tqrZ/z3eJS4j3Db8wMphEm1q10lY/TM= github.com/pingcap/sysutil v0.0.0-20220114020952-ea68d2dbf5b4/go.mod h1:sDCsM39cGiv2vwunZkaFA917vVkqDTGSPbbV7z4Oops= github.com/pingcap/tidb v1.1.0-beta.0.20220511160835-98c31070d958/go.mod h1:luW4sIZoLHY3bCWuKqyqk2QgMvF+/M7nWOXf/me0+fY= -github.com/pingcap/tidb v1.1.0-beta.0.20221201110602-e307642d9fa5 h1:dBB+naWplPAtLtC7b6VEoHwgbFbx/K19c73QTNiXrVw= -github.com/pingcap/tidb v1.1.0-beta.0.20221201110602-e307642d9fa5/go.mod h1:l20OC3JzuNoVfH1vIvIuwZNgYJAsip4uj2YRQwDC6sw= -github.com/pingcap/tidb-dashboard v0.0.0-20220117082709-e8076b5c79ba/go.mod h1:4hk/3owVGWdvI9Kx6yCqqvM1T5PVgwyQNyMQxD3rwfc= +github.com/pingcap/tidb v1.1.0-beta.0.20230206024556-76f1c526c4a2 h1:uv1UKVa3bvGe9bjE3qB8iu3Vb9NYrzybEQttKw3SzmQ= +github.com/pingcap/tidb v1.1.0-beta.0.20230206024556-76f1c526c4a2/go.mod h1:ybHJrzm5luMfvkpZizsIwpuVCRm3YqfQvvB3wQfL/ts= github.com/pingcap/tidb-tools v6.1.1-0.20220715000306-1d2f00da8c3e+incompatible h1:ftmrSd7avCEdTOkWx3O0UkS4yTBrlKQweRF8uqz9+No= github.com/pingcap/tidb-tools v6.1.1-0.20220715000306-1d2f00da8c3e+incompatible/go.mod h1:XGdcy9+yqlDSEMTpOXnwf3hiTeqrV6MN/u1se9N8yIM= github.com/pingcap/tidb/parser v0.0.0-20211011031125-9b13dc409c5e/go.mod h1:e1MGCA9Sg3T8jid8PKAEq5eYVuMMCq4n8gJ+Kqp4Plg= github.com/pingcap/tidb/parser v0.0.0-20220511160835-98c31070d958/go.mod h1:ElJiub4lRy6UZDb+0JHDkGEdr6aOli+ykhyej7VCLoI= github.com/pingcap/tidb/parser v0.0.0-20221126021158-6b02a5d8ba7d/go.mod h1:ElJiub4lRy6UZDb+0JHDkGEdr6aOli+ykhyej7VCLoI= -github.com/pingcap/tidb/parser v0.0.0-20221201110602-e307642d9fa5 h1:7SkxbTywy12wlN/Oze1lJC1080YbMSYi9G4K0/pJmzg= -github.com/pingcap/tidb/parser v0.0.0-20221201110602-e307642d9fa5/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew= +github.com/pingcap/tidb/parser v0.0.0-20230206024556-76f1c526c4a2 h1:AHkRkX4G2jzkOqG2dMwzHVg+UHdfsqo7PuHpUwyOgsA= +github.com/pingcap/tidb/parser v0.0.0-20230206024556-76f1c526c4a2/go.mod h1:wjvp+T3/T9XYt0nKqGX3Kc1AKuyUcfno6LTc6b2A6ew= github.com/pingcap/tipb v0.0.0-20220215045658-d12dec7a7609/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= -github.com/pingcap/tipb v0.0.0-20221123081521-2fb828910813 h1:DbmCfCbcavo0JG+gSp0ySvv1ub/c/j3hsnYzyYPzONo= -github.com/pingcap/tipb v0.0.0-20221123081521-2fb828910813/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= +github.com/pingcap/tipb v0.0.0-20230119054146-c6b7a5a1623b h1:j5sw2YZY7QfgIFZEoUcn1P5cYflms1PCVVS96i+IQiI= +github.com/pingcap/tipb v0.0.0-20230119054146-c6b7a5a1623b/go.mod h1:A7mrd7WHBl1o63LE2bIBGEJMTNWXqhgmYiOvMLxozfs= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -1024,7 +1247,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -1034,37 +1256,35 @@ github.com/prometheus/client_golang v0.9.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= -github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= +github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= +github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= github.com/prometheus/common v0.0.0-20181020173914-7e9e6cabbd39/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/prometheus v0.0.0-20190525122359-d20e84d0fb64 h1:3DyLm+sTAJkfLyR/1pJ3L+fU2lFufWbpcgMFlGtqeyA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.8.0 h1:w1tAGxsBMLkuGrFMhqgcCeBkM5d1YI24udArs+aASuQ= @@ -1075,11 +1295,10 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa h1:tEkEyxYeZ43TR55QU/hsIt9aRGBxbgGuz9CGykjvogY= github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rivo/tview v0.0.0-20200219210816-cd38d7432498/go.mod h1:6lkG1x+13OShEf0EaOCaTQYyB7d5nSbb181KtjlS+84= 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.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= -github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1089,26 +1308,19 @@ github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZV github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= +github.com/sasha-s/go-deadlock v0.2.0 h1:lMqc+fUb7RrFS3gQLtoQsJ7/6TV/pAIFvBsqX73DK8Y= github.com/sasha-s/go-deadlock v0.2.0/go.mod h1:StQn567HiB1fF2yJ44N9au7wOhrPS3iZqiDbRupzT10= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.1-0.20180205163309-da645544ed44/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shhdgit/testfixtures/v3 v3.6.2-0.20211219171712-c4f264d673d3/go.mod h1:Z0OLtuFJ7Y4yLsVijHK8uq95NjGFlYJy+I00ElAEtUQ= -github.com/shirou/gopsutil v3.21.3+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.21.12/go.mod h1:BToYZVTlSVlfazpDDYFnsVZLaoRG+g8ufT6fPQLdJzA= -github.com/shirou/gopsutil/v3 v3.22.9 h1:yibtJhIVEMcdw+tCTbOPiF1VcsuDeTE4utJ8Dm4c5eA= -github.com/shirou/gopsutil/v3 v3.22.9/go.mod h1:bBYl1kjgEJpWpxeHmLI+dVHWtyAwfcmSBLDsp2TNT8A= +github.com/shirou/gopsutil/v3 v3.22.12 h1:oG0ns6poeUSxf78JtOsfygNWuEHYYz8hnnNg7P04TJs= +github.com/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.3.0 h1:KK3gWIXskZ2O1U/JNTisNcvH+jveJxZYrjbTsrbbnh8= github.com/shopspring/decimal v1.3.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -1124,7 +1336,6 @@ github.com/siddontang/go v0.0.0-20180604090527-bdc77568d726/go.mod h1:3yhqj7WBBf github.com/siddontang/go-log v0.0.0-20180807004314-8d05993dda07 h1:oI+RNwuC9jF2g2lP0u0cVEEZrc/AYBCuFdvwrLWM/6Q= github.com/siddontang/go-log v0.0.0-20180807004314-8d05993dda07/go.mod h1:yFdBgwXP24JziuRl2NMUahT7nGLNOKi1SIiFxMttVD4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -1140,78 +1351,67 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spkg/bom v1.0.0 h1:S939THe0ukL5WcTGiGqkgtaW5JW+O6ITaIlpJXTYY64= +github.com/spkg/bom v1.0.0/go.mod h1:lAz2VbTuYNcvs7iaFF8WW0ufXrHShJ7ck1fYFFbVXJs= github.com/stathat/consistent v1.0.0 h1:ZFJ1QTRn8npNBKW065raSZ8xfOqhpb8vLOkfp4CcL/U= github.com/stathat/consistent v1.0.0/go.mod h1:uajTPbgSygZBJ+V+0mY7meZ8i0XAcZs7AQ6V121XSxw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2-0.20220504104629-106ec21d14df/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14 h1:PyYN9JH5jY9j6av01SpfRMb+1DWg/i3MbGOKPxJ2wjM= github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E= github.com/swaggo/gin-swagger v1.2.0 h1:YskZXEiv51fjOMTsXrOetAjrMDfFaXD79PEoQBOe2W0= github.com/swaggo/gin-swagger v1.2.0/go.mod h1:qlH2+W7zXGZkczuL+r2nEBR2JTT+/lX05Nn6vPhc7OI= -github.com/swaggo/http-swagger v0.0.0-20200308142732-58ac5e232fba/go.mod h1:O1lAbCgAAX/KZ80LM/OXwtWFI/5TvZlwxSg8Cq08PV0= github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y= -github.com/swaggo/swag v1.6.3/go.mod h1:wcc83tB4Mb2aNiL/HP4MFeQdpHUrca+Rp/DRNgWAUio= -github.com/swaggo/swag v1.6.6-0.20200529100950-7c765ddd0476 h1:UjnSXdNPIG+5FJ6xLQODEdk7gSnJlMldu3sPAxxCO+4= -github.com/swaggo/swag v1.6.6-0.20200529100950-7c765ddd0476/go.mod h1:xDhTyuFIujYiN3DKWC/H/83xcfHp+UE/IzWWampG7Zc= -github.com/syndtr/goleveldb v1.0.1-0.20190318030020-c3a204f8e965/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/swaggo/swag v1.8.3 h1:3pZSSCQ//gAH88lfmxM3Cd1+JCsxV8Md6f36b9hrZ5s= +github.com/swaggo/swag v1.8.3/go.mod h1:jMLeXOOmYyjk8PvHTsXBdrubsNd9gUJTTCzL5iBnseg= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954 h1:xQdMZ1WLrgkkvOZ/LDQxjVxMLdby7osSh4ZEVa5sIjs= github.com/syndtr/goleveldb v1.0.1-0.20210305035536-64b5b1c73954/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/thoas/go-funk v0.8.0/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 h1:mbAskLJ0oJfDRtkanvQPiooDH8HvJ2FBh+iKT/OmiQQ= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2/go.mod h1:2PfKggNGDuadAa0LElHrByyrz4JPZ9fFx6Gs7nx7ZZU= -github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= -github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +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/client-go/v2 v2.0.1-0.20220510032238-ff5e35ac2869/go.mod h1:0scaG+seu7L56apm+Gjz9vckyO7ABIzM6T7n00mrIXs= -github.com/tikv/client-go/v2 v2.0.3-0.20221129032117-857772dd0907 h1:vlgZedcfExiTzB3BB4nt5CpaghDfm9La/0Ofn7weIUA= -github.com/tikv/client-go/v2 v2.0.3-0.20221129032117-857772dd0907/go.mod h1:MDT4J9LzgS7Bj1DnEq6Gk/puy6mp8TgUC92zGEVVLLg= -github.com/tikv/pd v1.1.0-beta.0.20220303060546-3695d8164800 h1:lIfIwqe1HPa0suhMpiI200nYxau+rXWXTqZxSGg1HS4= -github.com/tikv/pd v1.1.0-beta.0.20220303060546-3695d8164800/go.mod h1:J/dj1zpEE9b7idgONGFttnXM+ncl88LmnkD/xDbq0hA= +github.com/tikv/client-go/v2 v2.0.5-0.20230202101145-8fd09cd88cce h1:j2s6Gechj46t1GWxE0vZEPBqgp7sc7mb3v0srBmf5Tw= +github.com/tikv/client-go/v2 v2.0.5-0.20230202101145-8fd09cd88cce/go.mod h1:DtwnMX8PDLcbXn2T4AyiCFPjmzTr1F4MQzJQpQhJeLM= +github.com/tikv/pd v1.1.0-beta.0.20230203015356-248b3f0be132 h1:vCVu7LxFou5WuaY6jHDMHKVeJTtwr5o2i1xWgGAdDo4= +github.com/tikv/pd v1.1.0-beta.0.20230203015356-248b3f0be132/go.mod h1:jb9oq6rN4U0U3FZdvqWlpi9rZzFJxiOlvZ3aj5BTpg8= github.com/tikv/pd/client v0.0.0-20220307081149-841fa61e9710/go.mod h1:AtvppPwkiyUgQlR1W9qSqfTB+OsOIu19jDCOxOsPkmU= -github.com/tikv/pd/client v0.0.0-20221031025758-80f0d8ca4d07 h1:ckPpxKcl75mO2N6a4cJXiZH43hvcHPpqc9dh1TmH1nc= -github.com/tikv/pd/client v0.0.0-20221031025758-80f0d8ca4d07/go.mod h1:CipBxPfxPUME+BImx9MUYXCnAVLS3VJUr3mnSJwh40A= +github.com/tikv/pd/client v0.0.0-20230203015356-248b3f0be132 h1:rmlb1Zoq/gG0YIIOr4Sz21eGzh/O6Fk2AmT1HW8MYP4= +github.com/tikv/pd/client v0.0.0-20230203015356-248b3f0be132/go.mod h1:0fdKmj9cafPLsHAeVAcgB50Uj018WGfMC1tgvzWXXQQ= github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw= github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw= -github.com/tklauser/go-sysconf v0.3.4/go.mod h1:Cl2c8ZRWfHD5IrfHo9VN+FX9kCFjIOyVklgXycLB6ek= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= -github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.2.1/go.mod h1:9aU+wOc6WjUIZEwWMP62PL/41d65P+iks1gBkr4QyP8= +github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= +github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= -github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= +github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1228,17 +1428,16 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr github.com/ugorji/go v1.1.5-pre/go.mod h1:FwP/aQVg39TXzItUBMwnWp9T9gPQnXw4Poh4/oBQZ/0= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v0.0.0-20181022190402-e5e69e061d4f/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.5-pre/go.mod h1:tULtS6Gy1AE1yCENaw4Vb//HLH5njI2tfCQDUqRd8fI= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ugorji/go/codec v1.2.6 h1:7kbGefxLoDBuYXOms4yD7223OpNMMPNPZxXk5TvFcyQ= github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= -github.com/unrolled/render v1.0.1/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0obPf6NBdM= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/negroni v0.3.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -1258,8 +1457,9 @@ github.com/wangjohn/quickselect v0.0.0-20161129230411-ed8402a42d5f/go.mod h1:8sd github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= -github.com/xdg/scram v1.0.3 h1:nTadYh2Fs4BK2xdldEa2g5bbaZp0/+1nJMMPtPxS/to= github.com/xdg/scram v1.0.3/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= +github.com/xdg/scram v1.0.5 h1:TuS0RFmt5Is5qm9Tm2SoD89OPqe4IRiFtyFY4iwWXsw= +github.com/xdg/scram v1.0.5/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.3 h1:cmL5Enob4W83ti/ZHuZLuKD/xqJfus4fVPwE+/BDm+4= github.com/xdg/stringprep v1.0.3/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1285,16 +1485,12 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= @@ -1349,13 +1545,9 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= -go.uber.org/dig v1.9.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= go.uber.org/dig v1.13.0 h1:bb9lVW3gtpQsNb07d0xL5vFwsjHidPJxaR/zSsbmfVQ= go.uber.org/dig v1.13.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw= -go.uber.org/fx v1.12.0/go.mod h1:egT3Kyg1JFYQkvKLZ3EsykxkNrZxgXS+gKoKo7abERY= -go.uber.org/goleak v0.10.0/go.mod h1:VCZuO8V8mFPlL0F5J5GK1rtHV3DrFcQ1R8ryq7FK0aI= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= @@ -1363,43 +1555,33 @@ go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/ratelimit v0.2.0 h1:UQE2Bgi7p2B85uP5dC2bbRtig0C+OeNRnNEafLjsLPA= go.uber.org/ratelimit v0.2.0/go.mod h1:YYBV4e4naJvhpitQrWJu1vCpgB7CboMe0qhltKt6mUg= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20180723164146-c126467f60eb/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1411,9 +1593,10 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20181106170214-d68db9428509/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1435,7 +1618,6 @@ golang.org/x/exp v0.0.0-20221023144134-a1e5550cf13e/go.mod h1:cyybsKvd6eL0RnXn6p golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 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-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1463,6 +1645,7 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1479,14 +1662,12 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1527,11 +1708,22 @@ golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220706163947-c90051bbdb60/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220725212005-46097bf591d3/go.mod h1:AaygXjzTFtRAg2ttMY5RMuhpJ3cNnI0XpyFJD1iQRSM= golang.org/x/net v0.0.0-20220809184613-07c6da5e1ced/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1549,8 +1741,16 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.2.0 h1:GtQkldQ9m7yvzCL1V+LrYow3Khe0eJH0w7RbX/VbaIU= -golang.org/x/oauth2 v0.2.0/go.mod h1:Cwn6afJ8jrQwYMxQDTpISoXmXW9I6qF6vDeuuoX3Ibs= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= 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= @@ -1562,7 +1762,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1578,20 +1780,15 @@ golang.org/x/sys v0.0.0-20181228144115-9a3f9b0469bb/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1630,7 +1827,6 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210217105451-b926d437f341/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1661,23 +1857,33 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= 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.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1687,17 +1893,20 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.2.0 h1:52I/1L54xyEQAYdtcSuxtiT84KGYTBGXwayxmIpNJhE= -golang.org/x/time v0.2.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1712,20 +1921,14 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524210228-3d17549cdc6b/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1735,7 +1938,6 @@ golang.org/x/tools v0.0.0-20191107010934-f79515f33823/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191114200427-caa0b0f7d508/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1749,7 +1951,6 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200225230052-807dcd883420/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= @@ -1773,7 +1974,6 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210114065538-d78b04bdf963/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -1784,15 +1984,16 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= @@ -1832,7 +2033,26 @@ google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3h google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM= google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= google.golang.org/api v0.103.0 h1:9yuVqlu2JCvcLg9p8S3fcFLZij8EPSyvODIY1rkMizQ= google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1886,6 +2106,7 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -1910,21 +2131,64 @@ google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c h1:S34D59DS2GWOEwWNt4fYmTcFrtlOgukG2k9WsomZ7tg= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd h1:OjndDrsik+Gt+e6fs45z9AxiewiKyLKYpA45W5Kpkks= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= google.golang.org/grpc v0.0.0-20180607172857-7a6a684ca69e/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1950,8 +2214,16 @@ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9K google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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= @@ -1966,6 +2238,7 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1975,12 +2248,12 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= @@ -2011,17 +2284,11 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C 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= -gorm.io/driver/mysql v1.0.6/go.mod h1:KdrTanmfLPPyAOeYGyG+UpDys7/7eeWT1zCq+oekYnU= gorm.io/driver/mysql v1.3.3 h1:jXG9ANrwBc4+bMvBcSl8zCfPBaVoPyBEBshA8dA93X8= gorm.io/driver/mysql v1.3.3/go.mod h1:ChK6AHbHgDCFZyJp0F+BmVGb06PSIoh9uVYKAlRbb2U= -gorm.io/driver/sqlite v1.1.4/go.mod h1:mJCeTFr7+crvS+TRnWc5Z3UvwxUN1BGBLMrf5LA9DYw= -gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= -gorm.io/gorm v1.21.9/go.mod h1:F+OptMscr0P2F2qU97WT1WimdH9GaQPoDW7AYd5i2Y0= gorm.io/gorm v1.23.1/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= gorm.io/gorm v1.23.8 h1:h8sGJ+biDgBA1AD1Ha9gFCx7h8npU7AsLdlkX0n2TpE= gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= -gotest.tools/gotestsum v1.7.0/go.mod h1:V1m4Jw3eBerhI/A6qCxUE07RnCg7ACkKj9BYcAm09V8= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2029,7 +2296,8 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/apimachinery v0.26.0 h1:1feANjElT7MvPqp0JT6F3Ss6TWDwmcjLypwoPpEf7zg= +k8s.io/apimachinery v0.26.0/go.mod h1:tnPmbONNJ7ByJNz9+n9kMjNP8ON+1qoAIIC70lztu74= lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= @@ -2068,14 +2336,13 @@ modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/y v1.0.1/go.mod h1:Ho86I+LVHEI+LYXoUKlmOMAM1JTXOCfj8qi1T8PsClE= modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= -moul.io/zapgorm2 v1.1.0/go.mod h1:emRfKjNqSzVj5lcgasBdovIXY1jSOwFz2GQZn1Rddks= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= sourcegraph.com/sourcegraph/appdash-data v0.0.0-20151005221446-73f23eafcf67 h1:e1sMhtVq9AfcEy8AXNb8eSg6gbzfdpYhoNqnPJa+GzI= diff --git a/pkg/etcd/etcd.go b/pkg/etcd/etcd.go index 008494faca4..ad294e5dc84 100644 --- a/pkg/etcd/etcd.go +++ b/pkg/etcd/etcd.go @@ -26,7 +26,7 @@ import ( "github.com/pingcap/tiflow/pkg/config" cerror "github.com/pingcap/tiflow/pkg/errors" "github.com/prometheus/client_golang/prometheus" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" "go.etcd.io/etcd/api/v3/mvccpb" "go.etcd.io/etcd/api/v3/v3rpc/rpctypes" clientv3 "go.etcd.io/etcd/client/v3" diff --git a/pkg/p2p/message_router_test.go b/pkg/p2p/message_router_test.go index ac1196f2393..f72401b9650 100644 --- a/pkg/p2p/message_router_test.go +++ b/pkg/p2p/message_router_test.go @@ -26,7 +26,7 @@ import ( "github.com/pingcap/tiflow/pkg/security" "github.com/pingcap/tiflow/proto/p2p" "github.com/stretchr/testify/require" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" "google.golang.org/grpc" ) diff --git a/pkg/pdutil/utils.go b/pkg/pdutil/utils.go index 412707d5b79..9949c2c0032 100644 --- a/pkg/pdutil/utils.go +++ b/pkg/pdutil/utils.go @@ -1,4 +1,4 @@ -// Copyright 2021 PingCAP, Inc. +// Copyright 2022 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,8 +17,10 @@ import ( "context" "strconv" + "github.com/pingcap/log" cerror "github.com/pingcap/tiflow/pkg/errors" pd "github.com/tikv/pd/client" + "go.uber.org/zap" ) const sourceIDName = "source_id" @@ -32,13 +34,16 @@ func GetSourceID(ctx context.Context, pdClient pd.Client) (uint64, error) { // The default value of sourceID is 1, // which means the sourceID is not changed by user. sourceID := uint64(1) - sourceIDConfig, err := pdClient.LoadGlobalConfig(ctx, []string{sourceIDName}) + sourceIDConfig, _, err := pdClient.LoadGlobalConfig(ctx, []string{sourceIDName}, "") if err != nil { return 0, cerror.WrapError(cerror.ErrPDEtcdAPIError, err) } if len(sourceIDConfig) != 0 && sourceIDConfig[0].Value != "" { sourceID, err = strconv.ParseUint(sourceIDConfig[0].Value, 10, 64) if err != nil { + log.Error("fail to parse sourceID from PD", + zap.String("sourceID", sourceIDConfig[0].Value), + zap.Error(err)) return 0, cerror.WrapError(cerror.ErrPDEtcdAPIError, err) } } diff --git a/pkg/pdutil/utils_test.go b/pkg/pdutil/utils_test.go new file mode 100644 index 00000000000..dca5f419249 --- /dev/null +++ b/pkg/pdutil/utils_test.go @@ -0,0 +1,47 @@ +// Copyright 2023 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 pdutil + +import ( + "context" + "testing" + "time" + + "github.com/pingcap/tidb/kv" + "github.com/pingcap/tidb/session" + "github.com/pingcap/tidb/store/mockstore" + "github.com/stretchr/testify/require" +) + +func TestGetSourceID(t *testing.T) { + store, err := mockstore.NewMockStore() + require.NoError(t, err) + defer func() { + err := store.Close() + require.NoError(t, err) + }() + domain, err := session.BootstrapSession(store) + require.NoError(t, err) + defer domain.Close() + se, err := session.CreateSession4Test(store) + require.NoError(t, err) + _, err = se.Execute(context.Background(), "set @@global.tidb_source_id=2;") + require.NoError(t, err) + require.Eventually(t, func() bool { + client := store.(kv.StorageWithPD).GetPDClient() + sourceID, err := GetSourceID(context.Background(), client) + require.NoError(t, err) + return sourceID == 2 + }, 5*time.Second, 100*time.Millisecond) +} diff --git a/pkg/txnutil/gc/testing.go b/pkg/txnutil/gc/testing.go index 86cc6ff84f7..08a46237950 100644 --- a/pkg/txnutil/gc/testing.go +++ b/pkg/txnutil/gc/testing.go @@ -59,13 +59,13 @@ func (m *MockPDClient) GetAllStores( // LoadGlobalConfig loads global config from PD. func (m *MockPDClient) LoadGlobalConfig( - ctx context.Context, names []string, -) ([]pd.GlobalConfigItem, error) { + ctx context.Context, + names []string, configPath string, +) ([]pd.GlobalConfigItem, int64, error) { return []pd.GlobalConfigItem{ { Name: "source_id", Value: "1", - Error: nil, }, - }, nil + }, 0, nil } diff --git a/pkg/version/check_test.go b/pkg/version/check_test.go index 52025d763f1..c69c13e6937 100644 --- a/pkg/version/check_test.go +++ b/pkg/version/check_test.go @@ -29,7 +29,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" pd "github.com/tikv/pd/client" - "github.com/tikv/pd/pkg/tempurl" + "github.com/tikv/pd/pkg/utils/tempurl" ) type mockPDClient struct { diff --git a/tests/integration_tests/multi_source/main.go b/tests/integration_tests/multi_source/main.go index 2409f53ff44..4627a04240e 100644 --- a/tests/integration_tests/multi_source/main.go +++ b/tests/integration_tests/multi_source/main.go @@ -194,8 +194,8 @@ func truncateDDL(ctx context.Context, db *sql.DB) { func ignoreableError(err error) bool { knownErrorList := []string{ - "Error 1146:", // table doesn't exist - "Error 1049", // database doesn't exist + "Error 1146", // table doesn't exist + "Error 1049", // database doesn't exist } for _, e := range knownErrorList { if strings.HasPrefix(err.Error(), e) {