diff --git a/DEPS.bzl b/DEPS.bzl index 83c417bd6627a..79f86585b8572 100644 --- a/DEPS.bzl +++ b/DEPS.bzl @@ -1513,8 +1513,12 @@ def go_deps(): name = "com_github_kisielk_errcheck", build_file_proto_mode = "disable_global", importpath = "github.com/kisielk/errcheck", - sum = "h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY=", - version = "v1.5.0", + sum = "h1:cErYo+J4SmEjdXZrVXGwLJCE2sB06s23LpkcyWNrT+s=", + patch_args = ["-p1"], + patches = [ + "//build/patches:com_github_kisielk_errcheck.patch", + ], + version = "v1.6.1", ) go_repository( name = "com_github_kisielk_gotool", @@ -3037,8 +3041,8 @@ def go_deps(): name = "org_golang_x_sys", build_file_proto_mode = "disable_global", importpath = "golang.org/x/sys", - sum = "h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw=", - version = "v0.0.0-20220408201424-a24fb2fb8a0f", + sum = "h1:wEZYwx+kK+KlZ0hpvP2Ls1Xr4+RWnlzGFwPP0aiDjIU=", + version = "v0.0.0-20220622161953-175b2fd9d664", ) go_repository( name = "org_golang_x_term", @@ -3065,8 +3069,8 @@ def go_deps(): name = "org_golang_x_tools", build_file_proto_mode = "disable_global", importpath = "golang.org/x/tools", - sum = "h1:OKYpQQVE3DKSc3r3zHVzq46vq5YH7x8xpR3/k9ixmUg=", - version = "v0.1.11-0.20220513221640-090b14e8501f", + sum = "h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY=", + version = "v0.1.11", ) go_repository( name = "org_golang_x_xerrors", diff --git a/Makefile b/Makefile index cd5c7c5555027..6f45837b2d2b1 100644 --- a/Makefile +++ b/Makefile @@ -440,7 +440,7 @@ bazel_coverage_test: failpoint-enable bazel_ci_prepare bazel_build: bazel_ci_prepare mkdir -p bin - bazel --output_user_root=/home/jenkins/.tidb/tmp build --config=ci //tidb-server/... //br/cmd/... //cmd/... + bazel --output_user_root=/home/jenkins/.tidb/tmp build -k --config=ci //tidb-server/... //br/cmd/... //cmd/... --//build:with_nogo_flag=true cp bazel-out/k8-fastbuild/bin/tidb-server/tidb-server_/tidb-server ./bin cp bazel-out/k8-fastbuild/bin/cmd/importer/importer_/importer ./bin cp bazel-out/k8-fastbuild/bin/tidb-server/tidb-server-check_/tidb-server-check ./bin diff --git a/WORKSPACE b/WORKSPACE index 3553ec948fe50..818097c85455f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -11,10 +11,10 @@ http_archive( http_archive( name = "bazel_gazelle", - sha256 = "de69a09dc70417580aabf20a28619bb3ef60d038470c7cf8442fafcf627c21cb", + sha256 = "501deb3d5695ab658e82f6f6f549ba681ea3ca2a5fb7911154b5aa45596183fa", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz", - "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.24.0/bazel-gazelle-v0.24.0.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.26.0/bazel-gazelle-v0.26.0.tar.gz", + "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.26.0/bazel-gazelle-v0.26.0.tar.gz", ], ) diff --git a/bindinfo/BUILD.bazel b/bindinfo/BUILD.bazel index f642a950ed2a3..299bcc1c6cbee 100644 --- a/bindinfo/BUILD.bazel +++ b/bindinfo/BUILD.bazel @@ -20,6 +20,7 @@ go_library( "//parser/mysql", "//parser/terror", "//sessionctx", + "//sessionctx/sessionstates", "//sessionctx/stmtctx", "//sessionctx/variable", "//types", diff --git a/br/cmd/tidb-lightning-ctl/main.go b/br/cmd/tidb-lightning-ctl/main.go index 08f0c080963f3..4dc70af929083 100644 --- a/br/cmd/tidb-lightning-ctl/main.go +++ b/br/cmd/tidb-lightning-ctl/main.go @@ -155,6 +155,7 @@ func checkpointErrorIgnore(ctx context.Context, cfg *config.Config, tableName st if err != nil { return errors.Trace(err) } + //nolint: errcheck defer cpdb.Close() return errors.Trace(cpdb.IgnoreErrorCheckpoint(ctx, tableName)) @@ -165,6 +166,7 @@ func checkpointErrorDestroy(ctx context.Context, cfg *config.Config, tls *common if err != nil { return errors.Trace(err) } + //nolint: errcheck defer cpdb.Close() target, err := restore.NewTiDBManager(ctx, cfg.TiDB, tls) @@ -222,6 +224,7 @@ func checkpointDump(ctx context.Context, cfg *config.Config, dumpFolder string) if err != nil { return errors.Trace(err) } + //nolint: errcheck defer cpdb.Close() if err := os.MkdirAll(dumpFolder, 0o750); err != nil { @@ -288,6 +291,7 @@ func getLocalStoringTables(ctx context.Context, cfg *config.Config) (err2 error) if err != nil { return errors.Trace(err) } + //nolint: errcheck defer cpdb.Close() tableWithEngine, err := cpdb.GetLocalStoringTables(ctx) diff --git a/br/pkg/conn/conn.go b/br/pkg/conn/conn.go index 48d45e6070ffa..75eef2c1555ab 100755 --- a/br/pkg/conn/conn.go +++ b/br/pkg/conn/conn.go @@ -454,7 +454,7 @@ func (mgr *Mgr) Close() { mgr.dom.Close() } tikv.StoreShuttingDown(1) - mgr.storage.Close() + _ = mgr.storage.Close() } mgr.PdController.Close() diff --git a/br/pkg/gluetidb/glue.go b/br/pkg/gluetidb/glue.go index bba6726a6b5d6..48d5b05b56a63 100644 --- a/br/pkg/gluetidb/glue.go +++ b/br/pkg/gluetidb/glue.go @@ -130,6 +130,7 @@ func (gs *tidbSession) ExecuteInternal(ctx context.Context, sql string, args ... // At least call `next` once for triggering theirs side effect. // (Maybe we'd better drain all returned rows?) if rs != nil { + //nolint: errcheck defer rs.Close() c := rs.NewChunk(nil) if err := rs.Next(ctx, c); err != nil { diff --git a/br/pkg/lightning/backend/local/duplicate.go b/br/pkg/lightning/backend/local/duplicate.go index be446f81b9ba4..b44a6c680f670 100644 --- a/br/pkg/lightning/backend/local/duplicate.go +++ b/br/pkg/lightning/backend/local/duplicate.go @@ -434,6 +434,7 @@ func NewDuplicateManager( // RecordDataConflictError records data conflicts to errorMgr. The key received from stream must be a row key. func (m *DuplicateManager) RecordDataConflictError(ctx context.Context, stream DupKVStream) error { + //nolint: errcheck defer stream.Close() var dataConflictInfos []errormanager.DataConflictInfo for { @@ -498,6 +499,7 @@ func (m *DuplicateManager) saveIndexHandles(ctx context.Context, handles pending // RecordIndexConflictError records index conflicts to errorMgr. The key received from stream must be an index key. func (m *DuplicateManager) RecordIndexConflictError(ctx context.Context, stream DupKVStream, tableID int64, indexInfo *model.IndexInfo) error { + //nolint: errcheck defer stream.Close() indexHandles := makePendingIndexHandlesWithCapacity(0) for { diff --git a/br/pkg/lightning/backend/local/engine.go b/br/pkg/lightning/backend/local/engine.go index ad0b37cd01963..52db7c8440676 100644 --- a/br/pkg/lightning/backend/local/engine.go +++ b/br/pkg/lightning/backend/local/engine.go @@ -876,6 +876,7 @@ func (e *Engine) loadEngineMeta() error { } return err } + //nolint: errcheck defer closer.Close() if err = json.Unmarshal(jsonBytes, &e.engineMeta); err != nil { diff --git a/br/pkg/lightning/backend/local/iterator.go b/br/pkg/lightning/backend/local/iterator.go index 16c9b647e4f24..e2cb3a447cfbb 100644 --- a/br/pkg/lightning/backend/local/iterator.go +++ b/br/pkg/lightning/backend/local/iterator.go @@ -181,7 +181,7 @@ func (d *dupDetectIter) Close() error { if d.err == nil { d.flush() } - d.writeBatch.Close() + _ = d.writeBatch.Close() return d.iter.Close() } diff --git a/br/pkg/lightning/backend/local/local.go b/br/pkg/lightning/backend/local/local.go index 6679d8bf93b98..d5d9e9bea7b5c 100644 --- a/br/pkg/lightning/backend/local/local.go +++ b/br/pkg/lightning/backend/local/local.go @@ -478,7 +478,7 @@ func (local *local) Close() { local.engines = sync.Map{} for _, engine := range allEngines { - engine.Close() + _ = engine.Close() engine.unlock() } @@ -520,8 +520,7 @@ func (local *local) Close() { local.logger.Warn("remove local db file failed", zap.Error(err)) } } - - local.tikvCli.Close() + _ = local.tikvCli.Close() local.pdCtl.Close() } @@ -763,6 +762,7 @@ func (local *local) WriteToTiKV( regionRange := intersectRange(region.Region, Range{start: start, end: end}) opt := &pebble.IterOptions{LowerBound: regionRange.start, UpperBound: regionRange.end} iter := engine.newKVIter(ctx, opt) + //nolint: errcheck defer iter.Close() stats := rangeStats{} @@ -1020,6 +1020,7 @@ func splitRangeBySizeProps(fullRange Range, sizeProps *sizeProperties, sizeLimit func (local *local) readAndSplitIntoRange(ctx context.Context, engine *Engine, regionSplitSize int64, regionSplitKeys int64) ([]Range, error) { iter := engine.newKVIter(ctx, &pebble.IterOptions{}) + //nolint: errcheck defer iter.Close() iterError := func(e string) error { @@ -1082,6 +1083,7 @@ func (local *local) writeAndIngestByRange( } iter := engine.newKVIter(ctxt, ito) + //nolint: errcheck defer iter.Close() // Needs seek to first because NewIter returns an iterator that is unpositioned hasKey := iter.First() diff --git a/br/pkg/lightning/backend/local/localhelper.go b/br/pkg/lightning/backend/local/localhelper.go index 1672b5f212436..11dc7fca9de73 100644 --- a/br/pkg/lightning/backend/local/localhelper.go +++ b/br/pkg/lightning/backend/local/localhelper.go @@ -359,7 +359,7 @@ func fetchTableRegionSizeStats(ctx context.Context, db *sql.DB, tableID int64) ( if err != nil { return errors.Trace(err) } - + //nolint: errcheck defer rows.Close() var ( regionID uint64 diff --git a/br/pkg/lightning/checkpoints/checkpoints.go b/br/pkg/lightning/checkpoints/checkpoints.go index 30ab72b0298f0..5b88741383db6 100644 --- a/br/pkg/lightning/checkpoints/checkpoints.go +++ b/br/pkg/lightning/checkpoints/checkpoints.go @@ -522,7 +522,7 @@ func OpenCheckpointsDB(ctx context.Context, cfg *config.Config) (DB, error) { } cpdb, err := NewMySQLCheckpointsDB(ctx, db, cfg.Checkpoint.Schema) if err != nil { - db.Close() + _ = db.Close() return nil, errors.Trace(err) } return cpdb, nil @@ -549,12 +549,14 @@ func IsCheckpointsDBExists(ctx context.Context, cfg *config.Config) (bool, error if err != nil { return false, errors.Trace(err) } + //nolint: errcheck defer db.Close() checkSQL := "SHOW DATABASES WHERE `DATABASE` = ?" rows, err := db.QueryContext(ctx, checkSQL, cfg.Checkpoint.Schema) if err != nil { return false, errors.Trace(err) } + //nolint: errcheck defer rows.Close() result := rows.Next() if err := rows.Err(); err != nil { @@ -664,6 +666,7 @@ func (cpdb *MySQLCheckpointsDB) Initialize(ctx context.Context, cfg *config.Conf if err != nil { return errors.Trace(err) } + //nolint: errcheck defer taskStmt.Close() _, err = taskStmt.ExecContext(ctx, cfg.TaskID, cfg.Mydumper.SourceDir, cfg.TikvImporter.Backend, cfg.TikvImporter.Addr, cfg.TiDB.Host, cfg.TiDB.Port, cfg.TiDB.PdAddr, cfg.TikvImporter.SortedKVDir, @@ -682,6 +685,7 @@ func (cpdb *MySQLCheckpointsDB) Initialize(ctx context.Context, cfg *config.Conf if err != nil { return errors.Trace(err) } + //nolint: errcheck defer stmt.Close() for _, db := range dbInfo { @@ -745,6 +749,7 @@ func (cpdb *MySQLCheckpointsDB) Get(ctx context.Context, tableName string) (*Tab if err != nil { return errors.Trace(err) } + //nolint: errcheck defer engineRows.Close() for engineRows.Next() { var ( @@ -769,6 +774,7 @@ func (cpdb *MySQLCheckpointsDB) Get(ctx context.Context, tableName string) (*Tab if err != nil { return errors.Trace(err) } + //nolint: errcheck defer chunkRows.Close() for chunkRows.Next() { var ( @@ -831,12 +837,14 @@ func (cpdb *MySQLCheckpointsDB) InsertEngineCheckpoints(ctx context.Context, tab if err != nil { return errors.Trace(err) } + //nolint: errcheck defer engineStmt.Close() chunkStmt, err := tx.PrepareContext(c, fmt.Sprintf(ReplaceChunkTemplate, cpdb.schema, CheckpointTableNameChunk)) if err != nil { return errors.Trace(err) } + //nolint: errcheck defer chunkStmt.Close() for engineID, engine := range checkpoints { @@ -883,26 +891,31 @@ func (cpdb *MySQLCheckpointsDB) Update(taskCtx context.Context, checkpointDiffs if e != nil { return errors.Trace(e) } + //nolint: errcheck defer chunkStmt.Close() rebaseStmt, e := tx.PrepareContext(c, rebaseQuery) if e != nil { return errors.Trace(e) } + //nolint: errcheck defer rebaseStmt.Close() tableStatusStmt, e := tx.PrepareContext(c, tableStatusQuery) if e != nil { return errors.Trace(e) } + //nolint: errcheck defer tableStatusStmt.Close() tableChecksumStmt, e := tx.PrepareContext(c, tableChecksumQuery) if e != nil { return errors.Trace(e) } + //nolint: errcheck defer tableChecksumStmt.Close() engineStatusStmt, e := tx.PrepareContext(c, engineStatusQuery) if e != nil { return errors.Trace(e) } + //nolint: errcheck defer engineStatusStmt.Close() for tableName, cpd := range checkpointDiffs { if cpd.hasStatus { @@ -1408,6 +1421,7 @@ func (cpdb *MySQLCheckpointsDB) GetLocalStoringTables(ctx context.Context) (map[ if err != nil { return errors.Trace(err) } + //nolint: errcheck defer rows.Close() for rows.Next() { var ( @@ -1519,6 +1533,7 @@ func (cpdb *MySQLCheckpointsDB) DestroyErrorCheckpoint(ctx context.Context, tabl if e != nil { return errors.Trace(e) } + //nolint: errcheck defer rows.Close() for rows.Next() { var dtc DestroyedTableCheckpoint @@ -1566,6 +1581,7 @@ func (cpdb *MySQLCheckpointsDB) DumpTables(ctx context.Context, writer io.Writer if err != nil { return errors.Trace(err) } + //nolint: errcheck defer rows.Close() return errors.Trace(sqltocsv.Write(writer, rows)) @@ -1585,6 +1601,7 @@ func (cpdb *MySQLCheckpointsDB) DumpEngines(ctx context.Context, writer io.Write if err != nil { return errors.Trace(err) } + //nolint: errcheck defer rows.Close() return errors.Trace(sqltocsv.Write(writer, rows)) @@ -1616,6 +1633,7 @@ func (cpdb *MySQLCheckpointsDB) DumpChunks(ctx context.Context, writer io.Writer if err != nil { return errors.Trace(err) } + //nolint: errcheck defer rows.Close() return errors.Trace(sqltocsv.Write(writer, rows)) diff --git a/br/pkg/lightning/checkpoints/glue_checkpoint.go b/br/pkg/lightning/checkpoints/glue_checkpoint.go index b0f5278c7e89a..dcb14fcf1d6cc 100644 --- a/br/pkg/lightning/checkpoints/glue_checkpoint.go +++ b/br/pkg/lightning/checkpoints/glue_checkpoint.go @@ -192,6 +192,7 @@ func (g GlueCheckpointsDB) TaskCheckpoint(ctx context.Context) (*TaskCheckpoint, return errors.Trace(err) } r := rs[0] + //nolint: errcheck defer r.Close() req := r.NewChunk(nil) err = r.Next(ctx, req) @@ -247,7 +248,7 @@ func (g GlueCheckpointsDB) Get(ctx context.Context, tableName string) (*TableChe for { err = r.Next(ctx, req) if err != nil { - r.Close() + _ = r.Close() return err } if req.NumRows() == 0 { @@ -262,7 +263,7 @@ func (g GlueCheckpointsDB) Get(ctx context.Context, tableName string) (*TableChe } } } - r.Close() + _ = r.Close() // 2. Populate the chunks. sql = fmt.Sprintf(ReadChunkTemplate, g.schema, CheckpointTableNameChunk) @@ -277,7 +278,7 @@ func (g GlueCheckpointsDB) Get(ctx context.Context, tableName string) (*TableChe for { err = r.Next(ctx, req) if err != nil { - r.Close() + _ = r.Close() return err } if req.NumRows() == 0 { @@ -306,13 +307,13 @@ func (g GlueCheckpointsDB) Get(ctx context.Context, tableName string) (*TableChe value.FileMeta.Path = value.Key.Path value.Checksum = verify.MakeKVChecksum(kvcBytes, kvcKVs, kvcChecksum) if err := json.Unmarshal(colPerm, &value.ColumnPermutation); err != nil { - r.Close() + _ = r.Close() return errors.Trace(err) } cp.Engines[engineID].Chunks = append(cp.Engines[engineID].Chunks, value) } } - r.Close() + _ = r.Close() // 3. Fill in the remaining table info sql = fmt.Sprintf(ReadTableRemainTemplate, g.schema, CheckpointTableNameTable) @@ -322,6 +323,7 @@ func (g GlueCheckpointsDB) Get(ctx context.Context, tableName string) (*TableChe return errors.Trace(err) } r = rs[0] + //nolint: errcheck defer r.Close() req = r.NewChunk(nil) err = r.Next(ctx, req) @@ -713,7 +715,7 @@ func (g GlueCheckpointsDB) DestroyErrorCheckpoint(ctx context.Context, tableName for { err = r.Next(ctx, req) if err != nil { - r.Close() + _ = r.Close() return err } if req.NumRows() == 0 { @@ -728,7 +730,7 @@ func (g GlueCheckpointsDB) DestroyErrorCheckpoint(ctx context.Context, tableName targetTables = append(targetTables, dtc) } } - r.Close() + _ = r.Close() if _, e := s.Execute(c, deleteChunkQuery); e != nil { return errors.Trace(e) @@ -791,7 +793,7 @@ func drainFirstRecordSet(ctx context.Context, rss []sqlexec.RecordSet) ([]chunk. for { err := rs.Next(ctx, req) if err != nil || req.NumRows() == 0 { - rs.Close() + _ = rs.Close() return rows, err } iter := chunk.NewIterator4Chunk(req) diff --git a/br/pkg/lightning/glue/glue.go b/br/pkg/lightning/glue/glue.go index 9cbe37a8f9230..f7f95eee888f8 100644 --- a/br/pkg/lightning/glue/glue.go +++ b/br/pkg/lightning/glue/glue.go @@ -59,7 +59,7 @@ type sqlConnSession struct { } func (session *sqlConnSession) Close() { - session.conn.Close() + _ = session.conn.Close() } func (session *sqlConnSession) Execute(ctx context.Context, sql string) ([]sqlexec.RecordSet, error) { diff --git a/br/pkg/lightning/lightning.go b/br/pkg/lightning/lightning.go index 6e0f63f4df463..6de844e73a8cf 100644 --- a/br/pkg/lightning/lightning.go +++ b/br/pkg/lightning/lightning.go @@ -912,6 +912,7 @@ func CheckpointRemove(ctx context.Context, cfg *config.Config, tableName string) if err != nil { return errors.Trace(err) } + //nolint: errcheck defer cpdb.Close() // try to remove the metadata first. diff --git a/br/pkg/lightning/restore/check_info.go b/br/pkg/lightning/restore/check_info.go index 442fae5a3e18b..b1ca9b53318f8 100644 --- a/br/pkg/lightning/restore/check_info.go +++ b/br/pkg/lightning/restore/check_info.go @@ -629,6 +629,7 @@ func (rc *Controller) readFirstRow(ctx context.Context, dataFileMeta mydump.Sour default: panic(fmt.Sprintf("unknown file type '%s'", dataFileMeta.Type)) } + //nolint: errcheck defer parser.Close() err = parser.ReadRow() @@ -995,6 +996,7 @@ func (rc *Controller) sampleDataFromTable( default: panic(fmt.Sprintf("file '%s' with unknown source type '%s'", sampleFile.Path, sampleFile.Type.String())) } + //nolint: errcheck defer parser.Close() logTask := log.FromContext(ctx).With(zap.String("table", tableMeta.Name)).Begin(zap.InfoLevel, "sample file") igCols, err := rc.cfg.Mydumper.IgnoreColumns.GetIgnoreColumns(dbName, tableMeta.Name, rc.cfg.Mydumper.CaseSensitive) diff --git a/br/pkg/lightning/restore/meta_manager.go b/br/pkg/lightning/restore/meta_manager.go index 0bac9bd436613..4391f29b8c146 100644 --- a/br/pkg/lightning/restore/meta_manager.go +++ b/br/pkg/lightning/restore/meta_manager.go @@ -165,6 +165,7 @@ func (m *dbTableMetaMgr) AllocTableRowIDs(ctx context.Context, rawRowIDMax int64 if err != nil { return nil, 0, errors.Trace(err) } + //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ DB: m.session, @@ -367,6 +368,7 @@ func (m *dbTableMetaMgr) CheckAndUpdateLocalChecksum(ctx context.Context, checks if err != nil { return false, false, nil, errors.Trace(err) } + //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ DB: m.session, @@ -638,6 +640,7 @@ func (m *dbTaskMetaMgr) CheckTasksExclusively(ctx context.Context, action func(t if err != nil { return errors.Trace(err) } + //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ DB: m.session, @@ -696,6 +699,7 @@ func (m *dbTaskMetaMgr) CheckAndPausePdSchedulers(ctx context.Context) (pdutil.U cancel() return nil, errors.Trace(err) } + //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ DB: m.session, @@ -831,6 +835,7 @@ func (m *dbTaskMetaMgr) CheckAndFinishRestore(ctx context.Context, finished bool if err != nil { return false, false, errors.Trace(err) } + //nolint: errcheck defer conn.Close() exec := &common.SQLWithRetry{ DB: m.session, diff --git a/br/pkg/lightning/restore/restore.go b/br/pkg/lightning/restore/restore.go index 0a43936ae5661..9cff45ce84de9 100644 --- a/br/pkg/lightning/restore/restore.go +++ b/br/pkg/lightning/restore/restore.go @@ -2118,7 +2118,7 @@ func newChunkRestore( } func (cr *chunkRestore) close() { - cr.parser.Close() + _ = cr.parser.Close() } func getColumnNames(tableInfo *model.TableInfo, permutation []int) []string { diff --git a/br/pkg/restore/rawkv_client.go b/br/pkg/restore/rawkv_client.go index 4541261a05be8..2495a8a2922ce 100644 --- a/br/pkg/restore/rawkv_client.go +++ b/br/pkg/restore/rawkv_client.go @@ -64,7 +64,7 @@ func NewRawKVBatchClient( // Close closes the RawKVBatchClient. func (c *RawKVBatchClient) Close() { - c.rawkvClient.Close() + _ = c.rawkvClient.Close() } // SetColumnFamily set the columnFamily for the client. diff --git a/br/pkg/storage/writer.go b/br/pkg/storage/writer.go index e029b553952c2..55fb4e8ac319b 100644 --- a/br/pkg/storage/writer.go +++ b/br/pkg/storage/writer.go @@ -159,7 +159,7 @@ func (u *bufferedWriter) Write(ctx context.Context, p []byte) (int, error) { continue } } - u.buf.Flush() + _ = u.buf.Flush() err := u.uploadChunk(ctx) if err != nil { return 0, errors.Trace(err) diff --git a/build/BUILD.bazel b/build/BUILD.bazel index cddd70f8d5876..40d98545befd6 100644 --- a/build/BUILD.bazel +++ b/build/BUILD.bazel @@ -1,8 +1,23 @@ package(default_visibility = ["//visibility:public"]) load("@io_bazel_rules_go//go:def.bzl", "nogo") +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") load("//build/linter/staticcheck:def.bzl", "staticcheck_analyzers") +bool_flag( + name = "with_nogo_flag", + build_setting_default = False, + visibility = ["//visibility:public"], +) + +config_setting( + name = "with_nogo", + flag_values = { + ":with_nogo_flag": "true", + }, + visibility = ["//visibility:public"], +) + STATICHECK_ANALYZERS = [ "S1000", "S1001", @@ -67,49 +82,53 @@ nogo( config = ":nogo_config.json", visibility = ["//visibility:public"], # must have public visibility deps = [ - # https://github.com/golang/go/issues/48525 - # "@com_github_timakin_bodyclose//passes/bodyclose:go_default_library", - "@org_golang_x_tools//go/analysis/passes/asmdecl:go_default_library", - "@org_golang_x_tools//go/analysis/passes/assign:go_default_library", - "@org_golang_x_tools//go/analysis/passes/atomic:go_default_library", - "@org_golang_x_tools//go/analysis/passes/atomicalign:go_default_library", - "@org_golang_x_tools//go/analysis/passes/bools:go_default_library", - # https://github.com/golang/go/issues/48525 - # "@org_golang_x_tools//go/analysis/passes/buildssa:go_default_library", - "@org_golang_x_tools//go/analysis/passes/buildtag:go_default_library", - # https://github.com/bazelbuild/rules_go/issues/2396 - # "@org_golang_x_tools//go/analysis/passes/cgocall:go_default_library", - "@org_golang_x_tools//go/analysis/passes/composite:go_default_library", - "@org_golang_x_tools//go/analysis/passes/copylock:go_default_library", - "@org_golang_x_tools//go/analysis/passes/ctrlflow:go_default_library", - "@org_golang_x_tools//go/analysis/passes/deepequalerrors:go_default_library", - "@org_golang_x_tools//go/analysis/passes/errorsas:go_default_library", - "@org_golang_x_tools//go/analysis/passes/findcall:go_default_library", - "@org_golang_x_tools//go/analysis/passes/httpresponse:go_default_library", - "@org_golang_x_tools//go/analysis/passes/ifaceassert:go_default_library", - "@org_golang_x_tools//go/analysis/passes/inspect:go_default_library", - "@org_golang_x_tools//go/analysis/passes/loopclosure:go_default_library", - "@org_golang_x_tools//go/analysis/passes/lostcancel:go_default_library", - "@org_golang_x_tools//go/analysis/passes/nilfunc:go_default_library", - #"@org_golang_x_tools//go/analysis/passes/nilness:go_default_library", - "@org_golang_x_tools//go/analysis/passes/pkgfact:go_default_library", - "@org_golang_x_tools//go/analysis/passes/printf:go_default_library", - "@org_golang_x_tools//go/analysis/passes/shift:go_default_library", - "@org_golang_x_tools//go/analysis/passes/sortslice:go_default_library", - "@org_golang_x_tools//go/analysis/passes/stdmethods:go_default_library", - "@org_golang_x_tools//go/analysis/passes/stringintconv:go_default_library", - "@org_golang_x_tools//go/analysis/passes/structtag:go_default_library", - "@org_golang_x_tools//go/analysis/passes/testinggoroutine:go_default_library", - "@org_golang_x_tools//go/analysis/passes/tests:go_default_library", - "@org_golang_x_tools//go/analysis/passes/unmarshal:go_default_library", - "@org_golang_x_tools//go/analysis/passes/unreachable:go_default_library", - "@org_golang_x_tools//go/analysis/passes/unsafeptr:go_default_library", - "@org_golang_x_tools//go/analysis/passes/unusedresult:go_default_library", - "//build/linter/durationcheck:durationcheck", - "//build/linter/exportloopref:exportloopref", - "//build/linter/gofmt:gofmt", - "//build/linter/ineffassign:ineffassign", - "//build/linter/prealloc:prealloc", - "//build/linter/unconvert:unconvert", - ] + staticcheck_analyzers(STATICHECK_ANALYZERS), + # https://github.com/golang/go/issues/48525 + # "@com_github_timakin_bodyclose//passes/bodyclose:go_default_library", + "@org_golang_x_tools//go/analysis/passes/asmdecl:go_default_library", + "@org_golang_x_tools//go/analysis/passes/assign:go_default_library", + "@org_golang_x_tools//go/analysis/passes/atomic:go_default_library", + "@org_golang_x_tools//go/analysis/passes/atomicalign:go_default_library", + "@org_golang_x_tools//go/analysis/passes/bools:go_default_library", + # https://github.com/golang/go/issues/48525 + # "@org_golang_x_tools//go/analysis/passes/buildssa:go_default_library", + "@org_golang_x_tools//go/analysis/passes/buildtag:go_default_library", + # https://github.com/bazelbuild/rules_go/issues/2396 + # "@org_golang_x_tools//go/analysis/passes/cgocall:go_default_library", + "@org_golang_x_tools//go/analysis/passes/composite:go_default_library", + "@org_golang_x_tools//go/analysis/passes/copylock:go_default_library", + "@org_golang_x_tools//go/analysis/passes/ctrlflow:go_default_library", + "@org_golang_x_tools//go/analysis/passes/deepequalerrors:go_default_library", + "@org_golang_x_tools//go/analysis/passes/errorsas:go_default_library", + "@org_golang_x_tools//go/analysis/passes/findcall:go_default_library", + "@org_golang_x_tools//go/analysis/passes/httpresponse:go_default_library", + "@org_golang_x_tools//go/analysis/passes/ifaceassert:go_default_library", + "@org_golang_x_tools//go/analysis/passes/inspect:go_default_library", + "@org_golang_x_tools//go/analysis/passes/loopclosure:go_default_library", + "@org_golang_x_tools//go/analysis/passes/lostcancel:go_default_library", + "@org_golang_x_tools//go/analysis/passes/nilfunc:go_default_library", + #"@org_golang_x_tools//go/analysis/passes/nilness:go_default_library", + "@org_golang_x_tools//go/analysis/passes/pkgfact:go_default_library", + "@org_golang_x_tools//go/analysis/passes/printf:go_default_library", + "@org_golang_x_tools//go/analysis/passes/shift:go_default_library", + "@org_golang_x_tools//go/analysis/passes/sortslice:go_default_library", + "@org_golang_x_tools//go/analysis/passes/stdmethods:go_default_library", + "@org_golang_x_tools//go/analysis/passes/stringintconv:go_default_library", + "@org_golang_x_tools//go/analysis/passes/structtag:go_default_library", + "@org_golang_x_tools//go/analysis/passes/testinggoroutine:go_default_library", + "@org_golang_x_tools//go/analysis/passes/tests:go_default_library", + "@org_golang_x_tools//go/analysis/passes/unmarshal:go_default_library", + "@org_golang_x_tools//go/analysis/passes/unreachable:go_default_library", + "@org_golang_x_tools//go/analysis/passes/unsafeptr:go_default_library", + "@org_golang_x_tools//go/analysis/passes/unusedresult:go_default_library", + "//build/linter/durationcheck:durationcheck", + "//build/linter/exportloopref:exportloopref", + "//build/linter/gofmt:gofmt", + "//build/linter/ineffassign:ineffassign", + "//build/linter/prealloc:prealloc", + "//build/linter/unconvert:unconvert", + ] + staticcheck_analyzers(STATICHECK_ANALYZERS) + + select({ + "//build:with_nogo": ["//build/linter/errcheck:errcheck"], + "//conditions:default": [], + }), ) diff --git a/build/linter/errcheck/BUILD.bazel b/build/linter/errcheck/BUILD.bazel new file mode 100644 index 0000000000000..98383d61766a5 --- /dev/null +++ b/build/linter/errcheck/BUILD.bazel @@ -0,0 +1,13 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "errcheck", + srcs = ["analyzer.go"], + embedsrcs = ["errcheck_excludes.txt"], + importpath = "github.com/pingcap/tidb/build/linter/errcheck", + visibility = ["//visibility:public"], + deps = [ + "//build/linter/util", + "@com_github_kisielk_errcheck//errcheck", + ], +) diff --git a/build/linter/errcheck/analyzer.go b/build/linter/errcheck/analyzer.go new file mode 100644 index 0000000000000..ea5049689059e --- /dev/null +++ b/build/linter/errcheck/analyzer.go @@ -0,0 +1,38 @@ +// 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. +// 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, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package errcheck + +import ( + "embed" + "log" + + "github.com/kisielk/errcheck/errcheck" + "github.com/pingcap/tidb/build/linter/util" +) + +// Analyzer is the analyzer struct of errcheck. +var Analyzer = errcheck.Analyzer + +//go:embed errcheck_excludes.txt +var excludesContent embed.FS + +func init() { + data, _ := excludesContent.ReadFile("errcheck_excludes.txt") + err := Analyzer.Flags.Set("excludes", string(data)) + if err != nil { + log.Fatal(err) + } + util.SkipAnalyzer(Analyzer) +} diff --git a/build/linter/errcheck/errcheck_excludes.txt b/build/linter/errcheck/errcheck_excludes.txt new file mode 100644 index 0000000000000..c6492845207f9 --- /dev/null +++ b/build/linter/errcheck/errcheck_excludes.txt @@ -0,0 +1,20 @@ +fmt.Fprint +fmt.Fprintf +fmt.Fprintln +fmt.Sscanf +(*os.File).Close +(io.Closer).Close +(net.Conn).Close +(*cloud.google.com/go/storage.Reader).Close +(*strings.Builder).WriteByte +(*strings.Builder).WriteRune +(*strings.Builder).WriteString +(*strings.Builder).Write +(*bufio.Writer).Flush +(*google.golang.org/grpc.ClientConn).Close +(*github.com/pingcap/tidb/util/sqlexec.RecordSet).Close +(*github.com/pingcap/tidb/br/pkg/lightning/mydump.blockParser).Close +(*github.com/pingcap/tidb/kv.Storage).Close +(*database/sql.DB).Close +(*database/sql.Rows).Close +(*database/sql.Stmt).Close diff --git a/build/nogo_config.json b/build/nogo_config.json index 5200c55164431..794090c0f6ccc 100644 --- a/build/nogo_config.json +++ b/build/nogo_config.json @@ -74,6 +74,12 @@ ".*_generated\\.go$": "ignore generated code" } }, + "deadcode": { + "exclude_files": { + "/external/": "no need to vet third party code", + ".*_generated\\.go$": "ignore generated code" + } + }, "deepequalerrors": { "exclude_files": { "/external/": "no need to vet third party code", @@ -83,6 +89,7 @@ "durationcheck": { "exclude_files": { "/external/": "no need to vet third party code", + "/rules_go_work-*": "ignore generated code", ".*_generated\\.go$": "ignore generated code" } }, @@ -92,6 +99,20 @@ ".*_generated\\.go$": "ignore generated code" } }, + "errcheck": { + "exclude_files": { + "/external/": "no need to vet third party code", + ".*_generated\\.go$": "ignore generated code", + ".*_test\\.go$": "ignore generated code", + "util/logutil": "ignore util/logutil code", + "tools/": "ignore tools code", + "/src/net/conf.go": "ignore code", + "/rules_go_work-*": "ignore generated code", + "GOROOT/": "ignore code", + "/parser/": "ignore code", + ".*_/testmain\\.go$": "ignore code" + } + }, "exportloopref": { "exclude_files": { "/external/": "no need to vet third party code", diff --git a/build/patches/com_github_kisielk_errcheck.patch b/build/patches/com_github_kisielk_errcheck.patch new file mode 100644 index 0000000000000..c7d6e2de505a1 --- /dev/null +++ b/build/patches/com_github_kisielk_errcheck.patch @@ -0,0 +1,59 @@ +diff -urN a/errcheck/analyzer.go b/errcheck/analyzer.go +--- a/errcheck/analyzer.go ++++ b/errcheck/analyzer.go +@@ -3,9 +3,9 @@ package errcheck + import ( + "fmt" + "go/ast" +- "go/token" + "reflect" + "regexp" ++ "strings" + + "golang.org/x/tools/go/analysis" + ) +@@ -21,6 +22,7 @@ var ( + argBlank bool + argAsserts bool + argExcludeFile string ++ argExcludes string + argExcludeOnly bool + ) + +@@ -28,6 +30,7 @@ func init() { + Analyzer.Flags.BoolVar(&argBlank, "blank", false, "if true, check for errors assigned to blank identifier") + Analyzer.Flags.BoolVar(&argAsserts, "assert", false, "if true, check for ignored type assertion results") + Analyzer.Flags.StringVar(&argExcludeFile, "exclude", "", "Path to a file containing a list of functions to exclude from checking") ++ Analyzer.Flags.StringVar(&argExcludes, "excludes", "", "Contents of the exclude file as a string (overrides -exclude)") + Analyzer.Flags.BoolVar(&argExcludeOnly, "excludeonly", false, "Use only excludes from exclude file") + } + +@@ -39,7 +42,14 @@ func runAnalyzer(pass *analysis.Pass) (interface{}, error) { + exclude[name] = true + } + } +- if argExcludeFile != "" { ++ if argExcludes != "" { ++ for _, name := range strings.Split(argExcludes, "\n") { ++ if strings.HasPrefix(name, "//") || name == "" { ++ continue ++ } ++ exclude[name] = true ++ } ++ } else if argExcludeFile != "" { + excludes, err := ReadExcludes(argExcludeFile) + if err != nil { + return nil, fmt.Errorf("Could not read exclude file: %v\n", err) +--- a/errcheck/analyzer.go ++++ b/errcheck/analyzer.go +@@ -65,8 +65,9 @@ func runAnalyzer(pass *analysis.Pass) (interface{}, error) { + ast.Walk(v, f) + + for _, err := range v.errors { ++ fsetFile := pass.Fset.File(f.Pos()) + pass.Report(analysis.Diagnostic{ +- Pos: token.Pos(int(f.Pos()) + err.Pos.Offset), ++ Pos: fsetFile.Pos(err.Pos.Offset), + Message: "unchecked error", + }) + } diff --git a/ddl/BUILD.bazel b/ddl/BUILD.bazel index 84a20db600107..ca6d6ceab44e3 100644 --- a/ddl/BUILD.bazel +++ b/ddl/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "ddl_tiflash_api.go", "ddl_worker.go", "delete_range.go", + "delete_range_util.go", "foreign_key.go", "generated_column.go", "index.go", diff --git a/executor/plan_replayer.go b/executor/plan_replayer.go index 22520d5d3b722..156e79b1306d8 100644 --- a/executor/plan_replayer.go +++ b/executor/plan_replayer.go @@ -525,6 +525,7 @@ func loadVariables(ctx sessionctx.Context, z *zip.Reader) error { if err != nil { return errors.AddStack(err) } + //nolint: errcheck defer v.Close() _, err = toml.DecodeReader(v, &varMap) if err != nil { @@ -556,6 +557,7 @@ func createSchemaAndTables(ctx sessionctx.Context, f *zip.File) error { if err != nil { return errors.AddStack(err) } + //nolint: errcheck defer r.Close() buf := new(bytes.Buffer) _, err = buf.ReadFrom(r) @@ -589,6 +591,7 @@ func loadStats(ctx sessionctx.Context, f *zip.File) error { if err != nil { return errors.AddStack(err) } + //nolint: errcheck defer r.Close() buf := new(bytes.Buffer) _, err = buf.ReadFrom(r) diff --git a/go.mod b/go.mod index 189650006547e..9e8222fb8275b 100644 --- a/go.mod +++ b/go.mod @@ -83,11 +83,11 @@ require ( golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 - golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f + golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 golang.org/x/text v0.3.7 golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 - golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f + golang.org/x/tools v0.1.11 google.golang.org/api v0.69.0 google.golang.org/grpc v1.44.0 gopkg.in/yaml.v2 v2.4.0 @@ -101,6 +101,7 @@ require ( github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 + github.com/kisielk/errcheck v1.6.1 github.com/kyoh86/exportloopref v0.1.8 honnef.co/go/tools v0.0.1-2020.1.4 ) diff --git a/go.sum b/go.sum index 56c52603876a8..5a10ed780c146 100644 --- a/go.sum +++ b/go.sum @@ -513,6 +513,8 @@ github.com/kataras/pio v0.0.0-20190103105442-ea782b38602d/go.mod h1:NV88laa9UiiD github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.1 h1:cErYo+J4SmEjdXZrVXGwLJCE2sB06s23LpkcyWNrT+s= +github.com/kisielk/errcheck v1.6.1/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@ -966,6 +968,7 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1138,8 +1141,8 @@ golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/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-20220408201424-a24fb2fb8a0f h1:8w7RhxzTVgUzw/AH/9mUV5q0vMgy40SQRursCcfmkCw= -golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664 h1:wEZYwx+kK+KlZ0hpvP2Ls1Xr4+RWnlzGFwPP0aiDjIU= +golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1225,8 +1228,10 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f h1:OKYpQQVE3DKSc3r3zHVzq46vq5YH7x8xpR3/k9ixmUg= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= 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= diff --git a/planner/core/BUILD.bazel b/planner/core/BUILD.bazel index c40e017e710d2..4f88ebd43b016 100644 --- a/planner/core/BUILD.bazel +++ b/planner/core/BUILD.bazel @@ -133,7 +133,6 @@ go_library( "@com_github_pingcap_kvproto//pkg/coprocessor", "@com_github_pingcap_tipb//go-tipb", "@com_github_tikv_client_go_v2//kv", - "@com_github_tikv_client_go_v2//oracle", "@com_github_tikv_client_go_v2//tikv", "@org_golang_x_exp//slices", "@org_uber_go_atomic//:atomic", diff --git a/plugin/BUILD.bazel b/plugin/BUILD.bazel index 85e61355b78fd..1a8623dc4eea9 100644 --- a/plugin/BUILD.bazel +++ b/plugin/BUILD.bazel @@ -37,6 +37,7 @@ go_test( ], embed = [":plugin"], deps = [ + "//kv", "//parser/mysql", "//server", "//session", diff --git a/session/nontransactional.go b/session/nontransactional.go index a637a93f1e9b1..d7fb53e085785 100644 --- a/session/nontransactional.go +++ b/session/nontransactional.go @@ -346,7 +346,7 @@ func doOneJob(ctx context.Context, job *job, totalJobCount int, options statemen zap.Int("jobSize", job.jobSize), zap.String("deleteSQL", deleteSQLInLog)) } if rs != nil { - rs.Close() + _ = rs.Close() } return "" } @@ -377,7 +377,9 @@ func buildShardJobs(ctx context.Context, stmt *ast.NonTransactionalDeleteStmt, s return nil, errors.Errorf("Non-transactional delete, expecting 1 record set, but got %d", len(rss)) } rs := rss[0] - defer rs.Close() + defer func() { + _ = rs.Close() + }() batchSize := int(stmt.Limit) if batchSize <= 0 { diff --git a/sessiontxn/BUILD.bazel b/sessiontxn/BUILD.bazel index d20fea8d090d1..0738636e8299a 100644 --- a/sessiontxn/BUILD.bazel +++ b/sessiontxn/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//parser/ast", "//sessionctx", "//sessionctx/variable", + "//table/temptable", "//util/stringutil", "@com_github_opentracing_opentracing_go//:opentracing-go", "@com_github_pingcap_kvproto//pkg/kvrpcpb", diff --git a/store/gcworker/BUILD.bazel b/store/gcworker/BUILD.bazel index c4be6351dc959..8d4c95cc1eafe 100644 --- a/store/gcworker/BUILD.bazel +++ b/store/gcworker/BUILD.bazel @@ -54,8 +54,8 @@ go_test( "//domain/infosync", "//kv", "//parser/model", + "//session", "//store/mockstore", - "//testkit", "//testkit/testmain", "//testkit/testsetup", "@com_github_pingcap_errors//:errors", diff --git a/table/tables/state_remote.go b/table/tables/state_remote.go index 3e8ff3e90f801..c5724a2e4e732 100644 --- a/table/tables/state_remote.go +++ b/table/tables/state_remote.go @@ -453,6 +453,7 @@ func (h *stateRemoteHandle) updateRow(ctx context.Context, tid int64, lockType s func (h *stateRemoteHandle) execSQL(ctx context.Context, sql string, args ...interface{}) ([]chunk.Row, error) { rs, err := h.exec.ExecuteInternal(ctx, sql, args...) if rs != nil { + //nolint: errcheck defer rs.Close() } if err != nil { diff --git a/testkit/BUILD.bazel b/testkit/BUILD.bazel index 17034f2e778f5..0204c1bceac99 100644 --- a/testkit/BUILD.bazel +++ b/testkit/BUILD.bazel @@ -21,6 +21,7 @@ go_library( "//session", "//session/txninfo", "//sessionctx/variable", + "//store/driver", "//store/mockstore", "//types", "//util", diff --git a/tools/check/ut.go b/tools/check/ut.go index 0fbef958bae4b..bf1d87aafc7a0 100644 --- a/tools/check/ut.go +++ b/tools/check/ut.go @@ -353,6 +353,7 @@ func parseCaseListFromFile(fileName string) (map[string]struct{}, error) { if err != nil { return nil, withTrace(err) } + //nolint: errcheck defer f.Close() ret := make(map[string]struct{}) @@ -482,6 +483,7 @@ func collectCoverProfileFile() { fmt.Println("create cover file error:", err) os.Exit(-1) } + //nolint: errcheck defer w.Close() w.WriteString("mode: set\n") @@ -519,6 +521,7 @@ func collectOneCoverProfileFile(result map[string]*cover.Profile, file os.DirEnt fmt.Println("open temp cover file error:", err) os.Exit(-1) } + //nolint: errcheck defer f.Close() profs, err := cover.ParseProfilesFromReader(f) diff --git a/tools/check/xprog.go b/tools/check/xprog.go index f6b1c6357b012..23b8ebffe141e 100644 --- a/tools/check/xprog.go +++ b/tools/check/xprog.go @@ -68,6 +68,7 @@ func getPackageInfo(dir string) string { if err != nil { os.Exit(-1) } + //nolint: errcheck defer f.Close() r := bufio.NewReader(f) diff --git a/types/json/BUILD.bazel b/types/json/BUILD.bazel index 0beccc50e4ce0..351e62d8e515f 100644 --- a/types/json/BUILD.bazel +++ b/types/json/BUILD.bazel @@ -15,6 +15,7 @@ go_library( "//parser/terror", "//util/dbterror", "//util/hack", + "//util/kvcache", "//util/stringutil", "@com_github_pingcap_errors//:errors", ], diff --git a/util/memory/BUILD.bazel b/util/memory/BUILD.bazel index 3f55456e383f9..3c003033675f8 100644 --- a/util/memory/BUILD.bazel +++ b/util/memory/BUILD.bazel @@ -10,7 +10,6 @@ go_library( importpath = "github.com/pingcap/tidb/util/memory", visibility = ["//visibility:public"], deps = [ - "//config", "//errno", "//metrics", "//parser/terror",