From 58ac54b652fd1badfb5d429a0960e738af026e50 Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Sun, 29 Jan 2023 16:43:12 +0800 Subject: [PATCH 1/5] *: update util/tracing and remove repeated code --- distsql/distsql.go | 9 ++--- executor/adapter.go | 19 ++++------ executor/compiler.go | 10 ++--- executor/executor.go | 21 ++++------- executor/insert.go | 22 +++-------- executor/insert_common.go | 8 +--- executor/mem_reader.go | 54 +++++++-------------------- executor/sample.go | 7 +--- executor/table_reader.go | 9 ++--- executor/union_scan.go | 10 ++--- executor/write.go | 10 ++--- meta/autoid/autoid.go | 14 ++----- meta/autoid/autoid_service.go | 16 +++----- server/conn.go | 8 ++-- session/bootstrap.go | 3 ++ session/session.go | 68 ++++++++++++---------------------- sessiontxn/isolation/base.go | 9 ++--- store/copr/coprocessor.go | 8 +--- store/driver/txn/txn_driver.go | 9 ++--- table/table.go | 8 ++-- table/tables/index.go | 10 ++--- table/tables/tables.go | 10 ++--- tidb-server/main.go | 3 ++ util/tracing/util.go | 45 ++++++++++++++++++++++ 24 files changed, 162 insertions(+), 228 deletions(-) diff --git a/distsql/distsql.go b/distsql/distsql.go index 3c65205f3d331..1e1f5423ea384 100644 --- a/distsql/distsql.go +++ b/distsql/distsql.go @@ -19,7 +19,6 @@ import ( "strconv" "unsafe" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/kv" @@ -30,6 +29,7 @@ import ( "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tidb/util/trxevents" "github.com/pingcap/tipb/go-tipb" "github.com/tikv/client-go/v2/tikvrpc/interceptor" @@ -63,11 +63,8 @@ func DispatchMPPTasks(ctx context.Context, sctx sessionctx.Context, tasks []*kv. // Select sends a DAG request, returns SelectResult. // In kvReq, KeyRanges is required, Concurrency/KeepOrder/Desc/IsolationLevel/Priority are optional. func Select(ctx context.Context, sctx sessionctx.Context, kvReq *kv.Request, fieldTypes []*types.FieldType, fb *statistics.QueryFeedback) (SelectResult, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("distsql.Select", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "distsql.Select") + defer r.End() // For testing purpose. if hook := ctx.Value("CheckSelectRequestHook"); hook != nil { diff --git a/executor/adapter.go b/executor/adapter.go index 59ba22ce73809..166ffafc77f22 100644 --- a/executor/adapter.go +++ b/executor/adapter.go @@ -25,7 +25,6 @@ import ( "sync/atomic" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/log" @@ -65,6 +64,7 @@ import ( "github.com/pingcap/tidb/util/stringutil" "github.com/pingcap/tidb/util/topsql" topsqlstate "github.com/pingcap/tidb/util/topsql/state" + "github.com/pingcap/tidb/util/tracing" "github.com/prometheus/client_golang/prometheus" tikverr "github.com/tikv/client-go/v2/error" "github.com/tikv/client-go/v2/oracle" @@ -283,12 +283,12 @@ func (a *ExecStmt) GetStmtNode() ast.StmtNode { // PointGet short path for point exec directly from plan, keep only necessary steps func (a *ExecStmt) PointGet(ctx context.Context) (*recordSet, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("ExecStmt.PointGet", opentracing.ChildOf(span.Context())) - span1.LogKV("sql", a.OriginText()) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) + r, ctx := tracing.StartRegionEx(ctx, "ExecStmt.PointGet") + defer r.End() + if r.Span != nil { + r.Span.LogKV("sql", a.OriginText()) } + failpoint.Inject("assertTxnManagerInShortPointGetPlan", func() { sessiontxn.RecordAssert(a.Ctx, "assertTxnManagerInShortPointGetPlan", true) // stale read should not reach here @@ -921,11 +921,8 @@ func (a *ExecStmt) runPessimisticSelectForUpdate(ctx context.Context, e Executor func (a *ExecStmt) handleNoDelayExecutor(ctx context.Context, e Executor) (sqlexec.RecordSet, error) { sctx := a.Ctx - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("executor.handleNoDelayExecutor", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "executor.handleNoDelayExecutor") + defer r.End() var err error defer func() { diff --git a/executor/compiler.go b/executor/compiler.go index 9f089eed9bae0..29c024a9991e6 100644 --- a/executor/compiler.go +++ b/executor/compiler.go @@ -18,7 +18,6 @@ import ( "context" "strings" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" @@ -32,6 +31,7 @@ import ( "github.com/pingcap/tidb/sessiontxn/staleread" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" + "github.com/pingcap/tidb/util/tracing" "go.uber.org/zap" ) @@ -56,11 +56,9 @@ type Compiler struct { // Compile compiles an ast.StmtNode to a physical plan. func (c *Compiler) Compile(ctx context.Context, stmtNode ast.StmtNode) (_ *ExecStmt, err error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("executor.Compile", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "executor.Compile") + defer r.End() + defer func() { r := recover() if r == nil { diff --git a/executor/executor.go b/executor/executor.go index c2fcdaa2d7887..e02abeed16d75 100644 --- a/executor/executor.go +++ b/executor/executor.go @@ -19,7 +19,6 @@ import ( "fmt" "math" "runtime/pprof" - "runtime/trace" "strconv" "strings" "sync" @@ -68,6 +67,7 @@ import ( "github.com/pingcap/tidb/util/resourcegrouptag" "github.com/pingcap/tidb/util/topsql" topsqlstate "github.com/pingcap/tidb/util/topsql/state" + "github.com/pingcap/tidb/util/tracing" tikverr "github.com/tikv/client-go/v2/error" tikvstore "github.com/tikv/client-go/v2/kv" tikvutil "github.com/tikv/client-go/v2/util" @@ -314,14 +314,10 @@ func Next(ctx context.Context, e Executor, req *chunk.Chunk) error { if atomic.LoadUint32(&sessVars.Killed) == 1 { return ErrQueryInterrupted } - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan(fmt.Sprintf("%T.Next", e), opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } - if trace.IsEnabled() { - defer trace.StartRegion(ctx, fmt.Sprintf("%T.Next", e)).End() - } + + r, ctx := tracing.StartRegionEx(ctx, fmt.Sprintf("%T.Next", e)) + defer r.End() + if topsqlstate.TopSQLEnabled() && sessVars.StmtCtx.IsSQLAndPlanRegistered.CompareAndSwap(false, true) { registerSQLAndPlanInExecForTopSQL(sessVars) } @@ -1527,11 +1523,8 @@ func init() { s.RewritePhaseInfo.DurationPreprocessSubQuery += time.Since(begin) }(time.Now()) - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("executor.EvalSubQuery", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "executor.EvalSubQuery") + defer r.End() e := newExecutorBuilder(sctx, is, nil) exec := e.build(p) diff --git a/executor/insert.go b/executor/insert.go index 1a4eb27d3c6f6..9d958d5d8bd2f 100644 --- a/executor/insert.go +++ b/executor/insert.go @@ -21,7 +21,6 @@ import ( "runtime/trace" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" @@ -37,6 +36,7 @@ import ( "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/stringutil" + "github.com/pingcap/tidb/util/tracing" "go.uber.org/zap" ) @@ -116,11 +116,8 @@ func (e *InsertExec) exec(ctx context.Context, rows [][]types.Datum) error { } func prefetchUniqueIndices(ctx context.Context, txn kv.Transaction, rows []toBeCheckedRow) (map[string][]byte, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("prefetchUniqueIndices", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "prefetchUniqueIndices") + defer r.End() nKeys := 0 for _, r := range rows { @@ -148,11 +145,8 @@ func prefetchUniqueIndices(ctx context.Context, txn kv.Transaction, rows []toBeC } func prefetchConflictedOldRows(ctx context.Context, txn kv.Transaction, rows []toBeCheckedRow, values map[string][]byte) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("prefetchConflictedOldRows", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "prefetchConflictedOldRows") + defer r.End() batchKeys := make([]kv.Key, 0, len(rows)) for _, r := range rows { @@ -182,11 +176,7 @@ func (e *InsertValues) prefetchDataCache(ctx context.Context, txn kv.Transaction return nil } - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("prefetchDataCache", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "prefetchDataCache").End() values, err := prefetchUniqueIndices(ctx, txn, rows) if err != nil { return err diff --git a/executor/insert_common.go b/executor/insert_common.go index 21b78b878028b..87938ff9af27b 100644 --- a/executor/insert_common.go +++ b/executor/insert_common.go @@ -22,7 +22,6 @@ import ( "sync" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/tidb/ddl" "github.com/pingcap/tidb/expression" @@ -46,6 +45,7 @@ import ( "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/memory" + "github.com/pingcap/tidb/util/tracing" "github.com/tikv/client-go/v2/txnkv/txnsnapshot" "go.uber.org/zap" ) @@ -1142,11 +1142,7 @@ func (e *InsertValues) batchCheckAndInsert(ctx context.Context, rows [][]types.D replace bool) error { // all the rows will be checked, so it is safe to set BatchCheck = true e.ctx.GetSessionVars().StmtCtx.BatchCheck = true - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("InsertValues.batchCheckAndInsert", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "InsertValues.batchCheckAndInsert").End() start := time.Now() // Get keys need to be checked. toBeCheckedRows, err := getKeysNeedCheck(ctx, e.ctx, e.Table, rows) diff --git a/executor/mem_reader.go b/executor/mem_reader.go index 647d785caeafc..91bc6140b1295 100644 --- a/executor/mem_reader.go +++ b/executor/mem_reader.go @@ -17,7 +17,6 @@ package executor import ( "context" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/expression" @@ -34,6 +33,7 @@ import ( "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/codec" "github.com/pingcap/tidb/util/rowcodec" + "github.com/pingcap/tidb/util/tracing" ) type memReader interface { @@ -65,11 +65,7 @@ type memIndexReader struct { } func buildMemIndexReader(ctx context.Context, us *UnionScanExec, idxReader *IndexReaderExecutor) *memIndexReader { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("buildMemIndexReader", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "buildMemIndexReader").End() kvRanges := idxReader.kvRanges outputOffset := make([]int, 0, len(us.columns)) for _, col := range idxReader.outputColumns { @@ -90,11 +86,7 @@ func buildMemIndexReader(ctx context.Context, us *UnionScanExec, idxReader *Inde } func (m *memIndexReader) getMemRows(ctx context.Context) ([][]types.Datum, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("memIndexReader.getMemRows", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "memIndexReader.getMemRows").End() tps := make([]*types.FieldType, 0, len(m.index.Columns)+1) cols := m.table.Columns for _, col := range m.index.Columns { @@ -190,11 +182,7 @@ type allocBuf struct { } func buildMemTableReader(ctx context.Context, us *UnionScanExec, tblReader *TableReaderExecutor) *memTableReader { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("buildMemTableReader", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "buildMemTableReader").End() colIDs := make(map[int64]int, len(us.columns)) for i, col := range us.columns { colIDs[col.ID] = i @@ -235,11 +223,7 @@ func buildMemTableReader(ctx context.Context, us *UnionScanExec, tblReader *Tabl // TODO: Try to make memXXXReader lazy, There is no need to decode many rows when parent operator only need 1 row. func (m *memTableReader) getMemRows(ctx context.Context) ([][]types.Datum, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("memTableReader.getMemRows", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "memTableReader.getMemRows").End() mutableRow := chunk.MutRowFromTypes(m.retFieldTypes) resultRows := make([]types.Datum, len(m.columns)) m.offsets = make([]int, len(m.columns)) @@ -490,11 +474,8 @@ type memIndexLookUpReader struct { } func buildMemIndexLookUpReader(ctx context.Context, us *UnionScanExec, idxLookUpReader *IndexLookUpExecutor) *memIndexLookUpReader { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("buildMemIndexLookUpReader", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "buildMemIndexLookUpReader").End() + kvRanges := idxLookUpReader.kvRanges outputOffset := []int{len(idxLookUpReader.index.Columns)} memIdxReader := &memIndexReader{ @@ -527,11 +508,9 @@ func buildMemIndexLookUpReader(ctx context.Context, us *UnionScanExec, idxLookUp } func (m *memIndexLookUpReader) getMemRows(ctx context.Context) ([][]types.Datum, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("memIndexLookUpReader.getMemRows", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "memIndexLookUpReader.getMemRows") + defer r.End() + kvRanges := [][]kv.KeyRange{m.idxReader.kvRanges} tbls := []table.Table{m.table} if m.partitionMode { @@ -604,11 +583,7 @@ type memIndexMergeReader struct { } func buildMemIndexMergeReader(ctx context.Context, us *UnionScanExec, indexMergeReader *IndexMergeReaderExecutor) *memIndexMergeReader { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("buildMemIndexMergeReader", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "buildMemIndexMergeReader").End() indexCount := len(indexMergeReader.indexes) memReaders := make([]memReader, 0, indexCount) for i := 0; i < indexCount; i++ { @@ -661,11 +636,8 @@ func buildMemIndexMergeReader(ctx context.Context, us *UnionScanExec, indexMerge } func (m *memIndexMergeReader) getMemRows(ctx context.Context) ([][]types.Datum, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("memIndexMergeReader.getMemRows", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "memIndexMergeReader.getMemRows") + defer r.End() tbls := []table.Table{m.table} // [partNum][indexNum][rangeNum] var kvRanges [][][]kv.KeyRange diff --git a/executor/sample.go b/executor/sample.go index e7eb9bd223639..7f64c365d599e 100644 --- a/executor/sample.go +++ b/executor/sample.go @@ -17,7 +17,6 @@ package executor import ( "context" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" @@ -28,6 +27,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" decoder "github.com/pingcap/tidb/util/rowDecoder" + "github.com/pingcap/tidb/util/tracing" "github.com/tikv/client-go/v2/tikv" "golang.org/x/exp/slices" ) @@ -47,10 +47,7 @@ type TableSampleExecutor struct { // Open initializes necessary variables for using this executor. func (e *TableSampleExecutor) Open(ctx context.Context) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("TableSampleExecutor.Open", opentracing.ChildOf(span.Context())) - defer span1.Finish() - } + defer tracing.StartRegion(ctx, "TableSampleExecutor.Open").End() return nil } diff --git a/executor/table_reader.go b/executor/table_reader.go index 984212dcf7328..3e29dfe27b053 100644 --- a/executor/table_reader.go +++ b/executor/table_reader.go @@ -19,7 +19,6 @@ import ( "context" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/distsql" "github.com/pingcap/tidb/domain" @@ -39,6 +38,7 @@ import ( "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/ranger" "github.com/pingcap/tidb/util/stringutil" + "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tipb/go-tipb" "golang.org/x/exp/slices" ) @@ -135,11 +135,8 @@ func (e *TableReaderExecutor) setDummy() { // Open initializes necessary variables for using this executor. func (e *TableReaderExecutor) Open(ctx context.Context) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("TableReaderExecutor.Open", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "TableReaderExecutor.Open") + defer r.End() failpoint.Inject("mockSleepInTableReaderNext", func(v failpoint.Value) { ms := v.(int) time.Sleep(time.Millisecond * time.Duration(ms)) diff --git a/executor/union_scan.go b/executor/union_scan.go index a23cd8b8c7873..f3a2b82c70812 100644 --- a/executor/union_scan.go +++ b/executor/union_scan.go @@ -19,7 +19,6 @@ import ( "fmt" "runtime/trace" - "github.com/opentracing/opentracing-go" "github.com/pingcap/tidb/expression" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" @@ -30,6 +29,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/chunk" "github.com/pingcap/tidb/util/collate" + "github.com/pingcap/tidb/util/tracing" ) // UnionScanExec merges the rows from dirty table and the rows from distsql request. @@ -71,11 +71,9 @@ type UnionScanExec struct { // Open implements the Executor Open interface. func (us *UnionScanExec) Open(ctx context.Context) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("UnionScanExec.Open", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "UnionScanExec.Open") + defer r.End() + if err := us.baseExecutor.Open(ctx); err != nil { return err } diff --git a/executor/write.go b/executor/write.go index 363bb097fd02c..10e8b25a53c16 100644 --- a/executor/write.go +++ b/executor/write.go @@ -18,7 +18,6 @@ import ( "context" "strings" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/expression" @@ -34,6 +33,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/collate" "github.com/pingcap/tidb/util/memory" + "github.com/pingcap/tidb/util/tracing" ) var ( @@ -52,11 +52,9 @@ var ( // 2. err (error) : error in the update. func updateRecord(ctx context.Context, sctx sessionctx.Context, h kv.Handle, oldData, newData []types.Datum, modified []bool, t table.Table, onDup bool, memTracker *memory.Tracker, fkChecks []*FKCheckExec, fkCascades []*FKCascadeExec) (bool, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("executor.updateRecord", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "executor.updateRecord") + defer r.End() + sc := sctx.GetSessionVars().StmtCtx changed, handleChanged := false, false // onUpdateSpecified is for "UPDATE SET ts_field = old_value", the diff --git a/meta/autoid/autoid.go b/meta/autoid/autoid.go index 8c5e1d7bc58d8..4cd03bea89219 100644 --- a/meta/autoid/autoid.go +++ b/meta/autoid/autoid.go @@ -23,7 +23,6 @@ import ( "sync" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/autoid" @@ -37,6 +36,7 @@ import ( "github.com/pingcap/tidb/util/execdetails" "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/mathutil" + "github.com/pingcap/tidb/util/tracing" "github.com/tikv/client-go/v2/txnkv/txnsnapshot" tikvutil "github.com/tikv/client-go/v2/util" clientv3 "go.etcd.io/etcd/client/v3" @@ -900,11 +900,7 @@ func (alloc *allocator) alloc4Signed(ctx context.Context, n uint64, increment, o ctx = kv.WithInternalSourceType(ctx, kv.InternalTxnMeta) err := kv.RunInNewTxn(ctx, alloc.store, true, func(ctx context.Context, txn kv.Transaction) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("alloc.alloc4Signed", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "alloc.alloc4Signed").End() if allocatorStats != nil { txn.SetOption(kv.CollectRuntimeStats, allocatorStats.SnapshotRuntimeStats) } @@ -995,11 +991,7 @@ func (alloc *allocator) alloc4Unsigned(ctx context.Context, n uint64, increment, ctx = kv.WithInternalSourceType(ctx, kv.InternalTxnMeta) err := kv.RunInNewTxn(ctx, alloc.store, true, func(ctx context.Context, txn kv.Transaction) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("alloc.alloc4Unsigned", opentracing.ChildOf(span.Context())) - defer span1.Finish() - opentracing.ContextWithSpan(ctx, span1) - } + defer tracing.StartRegion(ctx, "alloc.alloc4Unsigned").End() if allocatorStats != nil { txn.SetOption(kv.CollectRuntimeStats, allocatorStats.SnapshotRuntimeStats) } diff --git a/meta/autoid/autoid_service.go b/meta/autoid/autoid_service.go index 314ac3beef679..8e359f6e523fb 100644 --- a/meta/autoid/autoid_service.go +++ b/meta/autoid/autoid_service.go @@ -20,12 +20,12 @@ import ( "sync" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/autoid" "github.com/pingcap/tidb/config" "github.com/pingcap/tidb/metrics" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/tracing" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" "google.golang.org/grpc" @@ -112,11 +112,8 @@ func (d *clientDiscover) GetClient(ctx context.Context) (autoid.AutoIDAllocClien // case increment=1 & offset=1: you can derive the ids like min+1, min+2... max. // case increment=x & offset=y: you firstly need to seek to firstID by `SeekToFirstAutoIDXXX`, then derive the IDs like firstID, firstID + increment * 2... in the caller. func (sp *singlePointAlloc) Alloc(ctx context.Context, n uint64, increment, offset int64) (min int64, max int64, _ error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("autoid.Alloc", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "autoid.Alloc") + defer r.End() if !validIncrementAndOffset(increment, offset) { return 0, 0, errInvalidIncrementAndOffset.GenWithStackByArgs(increment, offset) @@ -186,11 +183,8 @@ func (*singlePointAlloc) AllocSeqCache() (a int64, b int64, c int64, err error) // If allocIDs is true, it will allocate some IDs and save to the cache. // If allocIDs is false, it will not allocate IDs. func (sp *singlePointAlloc) Rebase(ctx context.Context, newBase int64, _ bool) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("autoid.Rebase", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "autoid.Rebase") + defer r.End() return sp.rebase(ctx, newBase, false) } diff --git a/server/conn.go b/server/conn.go index 4d4300c099ecb..3e0801067529f 100644 --- a/server/conn.go +++ b/server/conn.go @@ -54,7 +54,6 @@ import ( "time" "unsafe" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" @@ -89,6 +88,7 @@ import ( "github.com/pingcap/tidb/util/memory" tlsutil "github.com/pingcap/tidb/util/tls" topsqlstate "github.com/pingcap/tidb/util/topsql/state" + "github.com/pingcap/tidb/util/tracing" "github.com/prometheus/client_golang/prometheus" "github.com/tikv/client-go/v2/util" "go.uber.org/zap" @@ -1275,10 +1275,11 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { connIdleDurationHistogramNotInTxn.Observe(t.Sub(cc.lastActive).Seconds()) } - span := opentracing.StartSpan("server.dispatch") cfg := config.GetGlobalConfig() if cfg.OpenTracing.Enable { - ctx = opentracing.ContextWithSpan(ctx, span) + var r tracing.Region + r, ctx = tracing.StartRegionEx(ctx, "server.dispatch") + defer r.End() } var cancelFunc context.CancelFunc @@ -1325,7 +1326,6 @@ func (cc *clientConn) dispatch(ctx context.Context, data []byte) error { } cc.server.releaseToken(token) - span.Finish() cc.lastActive = time.Now() }() diff --git a/session/bootstrap.go b/session/bootstrap.go index ed65bb0720cf0..60c816ac2d513 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -964,6 +964,9 @@ func getTiDBVar(s Session, name string) (sVal string, isNull bool, e error) { // For example, add new system variables into mysql.global_variables table. func upgrade(s Session) { ver, err := getBootstrapVersion(s) + if err != nil { + fmt.Println("ErrorStack:", errors.ErrorStack(err)) + } terror.MustNil(err) if ver >= currentBootstrapVersion { // It is already bootstrapped/upgraded by a higher version TiDB server. diff --git a/session/session.go b/session/session.go index 11226483660bb..ddeb6e1a8c5a8 100644 --- a/session/session.go +++ b/session/session.go @@ -30,7 +30,6 @@ import ( "math" "math/rand" "runtime/pprof" - "runtime/trace" "strconv" "strings" "sync" @@ -38,7 +37,6 @@ import ( "time" "github.com/ngaut/pools" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/kvrpcpb" @@ -105,6 +103,7 @@ import ( "github.com/pingcap/tidb/util/topsql" topsqlstate "github.com/pingcap/tidb/util/topsql/state" "github.com/pingcap/tidb/util/topsql/stmtstats" + "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tipb/go-binlog" tikverr "github.com/tikv/client-go/v2/error" tikvstore "github.com/tikv/client-go/v2/kv" @@ -956,11 +955,9 @@ func (s *session) doCommitWithRetry(ctx context.Context) error { var err error txnSize := s.txn.Size() isPessimistic := s.txn.IsPessimistic() - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.doCommitWitRetry", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "session.doCommitWithRetry") + defer r.End() + err = s.doCommit(ctx) if err != nil { // polish the Write Conflict error message @@ -1083,11 +1080,8 @@ func (s *session) updateStatsDeltaToCollector() { } func (s *session) CommitTxn(ctx context.Context) error { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.CommitTxn", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "session.CommitTxn") + defer r.End() var commitDetail *tikvutil.CommitDetails ctx = context.WithValue(ctx, tikvutil.CommitDetailCtxKey, &commitDetail) @@ -1107,10 +1101,8 @@ func (s *session) CommitTxn(ctx context.Context) error { } func (s *session) RollbackTxn(ctx context.Context) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.RollbackTxn", opentracing.ChildOf(span.Context())) - defer span1.Finish() - } + r, ctx := tracing.StartRegionEx(ctx, "session.RollbackTxn") + defer r.End() if s.txn.Valid() { terror.Log(s.txn.Rollback()) @@ -1537,11 +1529,7 @@ func (s *session) GetTiDBTableValue(name string) (string, error) { var _ sqlexec.SQLParser = &session{} func (s *session) ParseSQL(ctx context.Context, sql string, params ...parser.ParseParam) ([]ast.StmtNode, []error, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.ParseSQL", opentracing.ChildOf(span.Context())) - defer span1.Finish() - } - defer trace.StartRegion(ctx, "ParseSQL").End() + defer tracing.StartRegion(ctx, "ParseSQL").End() p := parserPool.Get().(*parser.Parser) defer parserPool.Put(p) @@ -1653,12 +1641,9 @@ func (s *session) ExecuteInternal(ctx context.Context, sql string, args ...inter pprof.SetGoroutineLabels(ctx) }() - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.ExecuteInternal", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - logutil.Eventf(ctx, "execute: %s", sql) - } + r, ctx := tracing.StartRegionEx(ctx, "session.ExecuteInternal") + defer r.End() + logutil.Eventf(ctx, "execute: %s", sql) stmtNode, err := s.ParseWithParams(ctx, sql, args...) if err != nil { @@ -1678,12 +1663,9 @@ func (s *session) ExecuteInternal(ctx context.Context, sql string, args ...inter // Execute is deprecated, we can remove it as soon as plugins are migrated. func (s *session) Execute(ctx context.Context, sql string) (recordSets []sqlexec.RecordSet, err error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.Execute", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - logutil.Eventf(ctx, "execute: %s", sql) - } + r, ctx := tracing.StartRegionEx(ctx, "session.Execute") + defer r.End() + logutil.Eventf(ctx, "execute: %s", sql) stmtNodes, err := s.Parse(ctx, sql) if err != nil { @@ -2121,16 +2103,12 @@ func (s *session) ExecuteInternalStmt(ctx context.Context, stmtNode ast.StmtNode } func (s *session) ExecuteStmt(ctx context.Context, stmtNode ast.StmtNode) (sqlexec.RecordSet, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.ExecuteStmt", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "session.ExecuteStmt") + defer r.End() if err := s.PrepareTxnCtx(ctx); err != nil { return nil, err } - if err := s.loadCommonGlobalVariablesIfNeeded(); err != nil { return nil, err } @@ -2309,12 +2287,12 @@ func runStmt(ctx context.Context, se *session, s sqlexec.Statement) (rs sqlexec. } }) - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("session.runStmt", opentracing.ChildOf(span.Context())) - span1.LogKV("sql", s.OriginText()) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) + r, ctx := tracing.StartRegionEx(ctx, "session.runStmt") + defer r.End() + if r.Span != nil { + r.Span.LogKV("sql", s.OriginText()) } + se.SetValue(sessionctx.QueryString, s.OriginText()) if _, ok := s.(*executor.ExecStmt).StmtNode.(ast.DDLNode); ok { se.SetValue(sessionctx.LastExecuteDDL, true) @@ -3261,6 +3239,8 @@ func InitMDLVariable(store kv.Storage) error { // BootstrapSession runs the first time when the TiDB server start. func BootstrapSession(store kv.Storage) (*domain.Domain, error) { + fmt.Println("BootstrapSesssion Start") + defer fmt.Println("BootstrapSesssion End") ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnBootstrap) cfg := config.GetGlobalConfig() if len(cfg.Instance.PluginLoad) > 0 { diff --git a/sessiontxn/isolation/base.go b/sessiontxn/isolation/base.go index 41e0e40846aa3..dd1e2881b389e 100644 --- a/sessiontxn/isolation/base.go +++ b/sessiontxn/isolation/base.go @@ -18,7 +18,6 @@ import ( "context" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/config" @@ -31,6 +30,7 @@ import ( "github.com/pingcap/tidb/sessiontxn/internal" "github.com/pingcap/tidb/sessiontxn/staleread" "github.com/pingcap/tidb/table/temptable" + "github.com/pingcap/tidb/util/tracing" "github.com/tikv/client-go/v2/oracle" ) @@ -474,11 +474,8 @@ func canReuseTxnWhenExplicitBegin(sctx sessionctx.Context) bool { // newOracleFuture creates new future according to the scope and the session context func newOracleFuture(ctx context.Context, sctx sessionctx.Context, scope string) oracle.Future { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("isolation.newOracleFuture", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "isolation.newOracleFuture") + defer r.End() failpoint.Inject("requestTsoFromPD", func() { sessiontxn.TsoRequestCountInc(sctx) diff --git a/store/copr/coprocessor.go b/store/copr/coprocessor.go index eca0b8037daa6..ab3d14e47f60a 100644 --- a/store/copr/coprocessor.go +++ b/store/copr/coprocessor.go @@ -26,7 +26,6 @@ import ( "unsafe" "github.com/gogo/protobuf/proto" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/kvproto/pkg/coprocessor" @@ -46,6 +45,7 @@ import ( "github.com/pingcap/tidb/util/mathutil" "github.com/pingcap/tidb/util/memory" "github.com/pingcap/tidb/util/paging" + "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tidb/util/trxevents" "github.com/pingcap/tipb/go-tipb" "github.com/tikv/client-go/v2/metrics" @@ -419,11 +419,7 @@ func buildCopTasks(bo *Backoffer, ranges *KeyRanges, opt *buildCopTaskOpt) ([]*c zap.Int("task len", len(tasks))) } if elapsed > time.Millisecond { - ctx := bo.GetCtx() - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("copr.buildCopTasks", opentracing.ChildOf(span.Context()), opentracing.StartTime(start)) - defer span1.Finish() - } + defer tracing.StartRegion(bo.GetCtx(), "copr.buildCopTasks").End() } metrics.TxnRegionsNumHistogramWithCoprocessor.Observe(float64(builder.regionNum())) return tasks, nil diff --git a/store/driver/txn/txn_driver.go b/store/driver/txn/txn_driver.go index 1892b6674032c..6ac8700c3cbc4 100644 --- a/store/driver/txn/txn_driver.go +++ b/store/driver/txn/txn_driver.go @@ -19,7 +19,6 @@ import ( "context" "sync/atomic" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pingcap/kvproto/pkg/metapb" @@ -30,6 +29,7 @@ import ( "github.com/pingcap/tidb/store/driver/options" "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/util/logutil" + "github.com/pingcap/tidb/util/tracing" tikverr "github.com/tikv/client-go/v2/error" tikvstore "github.com/tikv/client-go/v2/kv" "github.com/tikv/client-go/v2/tikv" @@ -165,11 +165,8 @@ func (txn *tikvTxn) IterReverse(k kv.Key) (iter kv.Iterator, err error) { // Do not use len(value) == 0 or value == nil to represent non-exist. // If a key doesn't exist, there shouldn't be any corresponding entry in the result map. func (txn *tikvTxn) BatchGet(ctx context.Context, keys []kv.Key) (map[string][]byte, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("tikvTxn.BatchGet", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r, ctx := tracing.StartRegionEx(ctx, "tikvTxn.BatchGet") + defer r.End() return NewBufferBatchGetter(txn.GetMemBuffer(), nil, txn.GetSnapshot()).BatchGet(ctx, keys) } diff --git a/table/table.go b/table/table.go index 813131df90896..8b316a048be55 100644 --- a/table/table.go +++ b/table/table.go @@ -22,7 +22,6 @@ import ( "context" "time" - "github.com/opentracing/opentracing-go" mysql "github.com/pingcap/tidb/errno" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/meta/autoid" @@ -31,6 +30,7 @@ import ( "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/dbterror" "github.com/pingcap/tidb/util/sqlexec" + "github.com/pingcap/tidb/util/tracing" ) // Type is used to distinguish between different tables that store data in different ways. @@ -200,10 +200,8 @@ type Table interface { // AllocAutoIncrementValue allocates an auto_increment value for a new row. func AllocAutoIncrementValue(ctx context.Context, t Table, sctx sessionctx.Context) (int64, error) { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("table.AllocAutoIncrementValue", opentracing.ChildOf(span.Context())) - defer span1.Finish() - } + r, ctx := tracing.StartRegionEx(ctx, "table.AllocAutoIncrementValue") + defer r.End() increment := sctx.GetSessionVars().AutoIncrementIncrement offset := sctx.GetSessionVars().AutoIncrementOffset alloc := t.Allocators(sctx).Get(autoid.AutoIncrementType) diff --git a/table/tables/index.go b/table/tables/index.go index 29e3964959aa9..97a24404a56a2 100644 --- a/table/tables/index.go +++ b/table/tables/index.go @@ -19,7 +19,6 @@ import ( "errors" "sync" - "github.com/opentracing/opentracing-go" "github.com/pingcap/tidb/kv" "github.com/pingcap/tidb/parser/model" "github.com/pingcap/tidb/parser/mysql" @@ -29,6 +28,7 @@ import ( "github.com/pingcap/tidb/tablecodec" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/rowcodec" + "github.com/pingcap/tidb/util/tracing" ) // index is the data structure for index data in the KV store. @@ -169,11 +169,9 @@ func (c *index) Create(sctx sessionctx.Context, txn kv.Transaction, indexedValue indexedValues := c.getIndexedValue(indexedValue) ctx := opt.Ctx if ctx != nil { - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("index.Create", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + r := tracing.StartRegion(ctx, "index.Create") + defer r.End() + ctx = r.Context } else { ctx = context.TODO() } diff --git a/table/tables/tables.go b/table/tables/tables.go index 709318a42332c..bbdbffdd893fc 100644 --- a/table/tables/tables.go +++ b/table/tables/tables.go @@ -27,7 +27,6 @@ import ( "sync" "time" - "github.com/opentracing/opentracing-go" "github.com/pingcap/errors" "github.com/pingcap/failpoint" "github.com/pingcap/tidb/kv" @@ -50,6 +49,7 @@ import ( "github.com/pingcap/tidb/util/logutil" "github.com/pingcap/tidb/util/stringutil" "github.com/pingcap/tidb/util/tableutil" + "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tipb/go-binlog" "github.com/pingcap/tipb/go-tipb" "go.uber.org/zap" @@ -700,11 +700,9 @@ func (t *TableCommon) AddRecord(sctx sessionctx.Context, r []types.Datum, opts . var ctx context.Context if opt.Ctx != nil { ctx = opt.Ctx - if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { - span1 := span.Tracer().StartSpan("table.AddRecord", opentracing.ChildOf(span.Context())) - defer span1.Finish() - ctx = opentracing.ContextWithSpan(ctx, span1) - } + var r tracing.Region + r, ctx = tracing.StartRegionEx(ctx, "table.AddRecord") + defer r.End() } else { ctx = context.Background() } diff --git a/tidb-server/main.go b/tidb-server/main.go index 3c8c37d8cbd06..5d9739e82b756 100644 --- a/tidb-server/main.go +++ b/tidb-server/main.go @@ -331,6 +331,9 @@ func createStoreAndDomain(keyspaceName string) (kv.Storage, *domain.Domain) { terror.MustNil(err) // Bootstrap a session to load information schema. dom, err := session.BootstrapSession(storage) + if err != nil { + fmt.Println("ErrorStack", errors.ErrorStack(err)) + } terror.MustNil(err) return storage, dom } diff --git a/util/tracing/util.go b/util/tracing/util.go index 34953c72482a6..8b80d9b173088 100644 --- a/util/tracing/util.go +++ b/util/tracing/util.go @@ -16,6 +16,7 @@ package tracing import ( "context" + "runtime/trace" "github.com/opentracing/basictracer-go" "github.com/opentracing/opentracing-go" @@ -66,3 +67,47 @@ func ChildSpanFromContxt(ctx context.Context, opName string) (opentracing.Span, } return noopSpan(), ctx } + +// StartRegion provides better API, integrating both opentracing and runtime.trace facilities into one. +// Recommended usage is +// +// defer tracing.StartRegion(ctx, "myTracedRegion").End() +func StartRegion(ctx context.Context, regionType string) Region { + r := trace.StartRegion(ctx, regionType) + var span1 opentracing.Span + if span := opentracing.SpanFromContext(ctx); span != nil && span.Tracer() != nil { + span1 = span.Tracer().StartSpan(regionType, opentracing.ChildOf(span.Context())) + } + return Region{ + Region: r, + Span: span1, + } +} + +// StartRegionEx returns Region together with the context. +// Recommended usage is +// +// r, ctx := tracing.StartRegionEx(ctx, "myTracedRegion") +// defer r.End() +func StartRegionEx(ctx context.Context, regionType string) (Region, context.Context) { + r := StartRegion(ctx, regionType) + if r.Span != nil { + ctx = opentracing.ContextWithSpan(ctx, r.Span) + } + return r, ctx +} + +// Region is a region of code whose execution time interval is traced. +type Region struct { + *trace.Region + opentracing.Span + context.Context +} + +// End marks the end of the traced code region. +func (r Region) End() { + if r.Span != nil { + r.Span.Finish() + } + r.Region.End() +} From d4005aa032356f94b7338a5c8eaf9c3f485e63c5 Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Sun, 29 Jan 2023 18:35:16 +0800 Subject: [PATCH 2/5] address comment --- distsql/BUILD.bazel | 2 +- executor/BUILD.bazel | 1 + meta/autoid/BUILD.bazel | 2 +- server/BUILD.bazel | 2 +- session/BUILD.bazel | 2 +- session/bootstrap.go | 3 --- session/session.go | 2 -- sessiontxn/isolation/BUILD.bazel | 2 +- store/copr/BUILD.bazel | 2 +- store/driver/txn/BUILD.bazel | 2 +- table/BUILD.bazel | 2 +- table/tables/BUILD.bazel | 2 +- tidb-server/main.go | 4 ---- 13 files changed, 10 insertions(+), 18 deletions(-) diff --git a/distsql/BUILD.bazel b/distsql/BUILD.bazel index 5839f55fbc52c..d737718a2e084 100644 --- a/distsql/BUILD.bazel +++ b/distsql/BUILD.bazel @@ -34,8 +34,8 @@ go_library( "//util/logutil", "//util/memory", "//util/ranger", + "//util/tracing", "//util/trxevents", - "@com_github_opentracing_opentracing_go//:opentracing-go", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_kvproto//pkg/metapb", diff --git a/executor/BUILD.bazel b/executor/BUILD.bazel index 8b0e824288c99..a4732dfa4388c 100644 --- a/executor/BUILD.bazel +++ b/executor/BUILD.bazel @@ -201,6 +201,7 @@ go_library( "//util/tls", "//util/topsql", "//util/topsql/state", + "//util/tracing", "@com_github_burntsushi_toml//:toml", "@com_github_gogo_protobuf//proto", "@com_github_ngaut_pools//:pools", diff --git a/meta/autoid/BUILD.bazel b/meta/autoid/BUILD.bazel index d6bcc1ef94689..0eb6034820160 100644 --- a/meta/autoid/BUILD.bazel +++ b/meta/autoid/BUILD.bazel @@ -23,7 +23,7 @@ go_library( "//util/execdetails", "//util/logutil", "//util/mathutil", - "@com_github_opentracing_opentracing_go//:opentracing-go", + "//util/tracing", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_kvproto//pkg/autoid", diff --git a/server/BUILD.bazel b/server/BUILD.bazel index 0d1303bf53993..8fcce09bd6d3f 100644 --- a/server/BUILD.bazel +++ b/server/BUILD.bazel @@ -90,11 +90,11 @@ go_library( "//util/topsql", "//util/topsql/state", "//util/topsql/stmtstats", + "//util/tracing", "//util/versioninfo", "@com_github_blacktear23_go_proxyprotocol//:go-proxyprotocol", "@com_github_burntsushi_toml//:toml", "@com_github_gorilla_mux//:mux", - "@com_github_opentracing_opentracing_go//:opentracing-go", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_fn//:fn", diff --git a/session/BUILD.bazel b/session/BUILD.bazel index 8e567503a6377..85e69611f8608 100644 --- a/session/BUILD.bazel +++ b/session/BUILD.bazel @@ -87,8 +87,8 @@ go_library( "//util/topsql", "//util/topsql/state", "//util/topsql/stmtstats", + "//util/tracing", "@com_github_ngaut_pools//:pools", - "@com_github_opentracing_opentracing_go//:opentracing-go", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_kvproto//pkg/kvrpcpb", diff --git a/session/bootstrap.go b/session/bootstrap.go index 60c816ac2d513..ed65bb0720cf0 100644 --- a/session/bootstrap.go +++ b/session/bootstrap.go @@ -964,9 +964,6 @@ func getTiDBVar(s Session, name string) (sVal string, isNull bool, e error) { // For example, add new system variables into mysql.global_variables table. func upgrade(s Session) { ver, err := getBootstrapVersion(s) - if err != nil { - fmt.Println("ErrorStack:", errors.ErrorStack(err)) - } terror.MustNil(err) if ver >= currentBootstrapVersion { // It is already bootstrapped/upgraded by a higher version TiDB server. diff --git a/session/session.go b/session/session.go index ddeb6e1a8c5a8..bf5eb14897bdc 100644 --- a/session/session.go +++ b/session/session.go @@ -3239,8 +3239,6 @@ func InitMDLVariable(store kv.Storage) error { // BootstrapSession runs the first time when the TiDB server start. func BootstrapSession(store kv.Storage) (*domain.Domain, error) { - fmt.Println("BootstrapSesssion Start") - defer fmt.Println("BootstrapSesssion End") ctx := kv.WithInternalSourceType(context.Background(), kv.InternalTxnBootstrap) cfg := config.GetGlobalConfig() if len(cfg.Instance.PluginLoad) > 0 { diff --git a/sessiontxn/isolation/BUILD.bazel b/sessiontxn/isolation/BUILD.bazel index 2f2cb5dce4e31..c89b245021655 100644 --- a/sessiontxn/isolation/BUILD.bazel +++ b/sessiontxn/isolation/BUILD.bazel @@ -27,7 +27,7 @@ go_library( "//sessiontxn/staleread", "//table/temptable", "//util/logutil", - "@com_github_opentracing_opentracing_go//:opentracing-go", + "//util/tracing", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_tikv_client_go_v2//error", diff --git a/store/copr/BUILD.bazel b/store/copr/BUILD.bazel index 66c62b8e367e5..1385a0bd4347c 100644 --- a/store/copr/BUILD.bazel +++ b/store/copr/BUILD.bazel @@ -31,10 +31,10 @@ go_library( "//util/mathutil", "//util/memory", "//util/paging", + "//util/tracing", "//util/trxevents", "@com_github_dgraph_io_ristretto//:ristretto", "@com_github_gogo_protobuf//proto", - "@com_github_opentracing_opentracing_go//:opentracing-go", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_kvproto//pkg/coprocessor", diff --git a/store/driver/txn/BUILD.bazel b/store/driver/txn/BUILD.bazel index f6e5e46014a97..437fd464b8c81 100644 --- a/store/driver/txn/BUILD.bazel +++ b/store/driver/txn/BUILD.bazel @@ -26,7 +26,7 @@ go_library( "//types", "//util", "//util/logutil", - "@com_github_opentracing_opentracing_go//:opentracing-go", + "//util/tracing", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_kvproto//pkg/kvrpcpb", diff --git a/table/BUILD.bazel b/table/BUILD.bazel index a1f2feab60722..e1cf80e5e90fa 100644 --- a/table/BUILD.bazel +++ b/table/BUILD.bazel @@ -29,7 +29,7 @@ go_library( "//util/logutil", "//util/sqlexec", "//util/timeutil", - "@com_github_opentracing_opentracing_go//:opentracing-go", + "//util/tracing", "@com_github_pingcap_errors//:errors", "@org_uber_go_zap//:zap", ], diff --git a/table/tables/BUILD.bazel b/table/tables/BUILD.bazel index a6e9bec521355..3aa8362fbaf46 100644 --- a/table/tables/BUILD.bazel +++ b/table/tables/BUILD.bazel @@ -46,8 +46,8 @@ go_library( "//util/sqlexec", "//util/stringutil", "//util/tableutil", + "//util/tracing", "@com_github_google_btree//:btree", - "@com_github_opentracing_opentracing_go//:opentracing-go", "@com_github_pingcap_errors//:errors", "@com_github_pingcap_failpoint//:failpoint", "@com_github_pingcap_log//:log", diff --git a/tidb-server/main.go b/tidb-server/main.go index 5d9739e82b756..05456b30545ca 100644 --- a/tidb-server/main.go +++ b/tidb-server/main.go @@ -331,9 +331,6 @@ func createStoreAndDomain(keyspaceName string) (kv.Storage, *domain.Domain) { terror.MustNil(err) // Bootstrap a session to load information schema. dom, err := session.BootstrapSession(storage) - if err != nil { - fmt.Println("ErrorStack", errors.ErrorStack(err)) - } terror.MustNil(err) return storage, dom } @@ -466,7 +463,6 @@ func overrideConfig(cfg *config.Config) { cfg.Port = uint(p) } if actualFlags[nmCors] { - fmt.Println(cors) cfg.Cors = *cors } if actualFlags[nmStore] { From 11975aa728a40295b9ce9ac5eb6391c050e8dd58 Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Sun, 29 Jan 2023 20:14:06 +0800 Subject: [PATCH 3/5] fix CI --- table/tables/index.go | 4 ++-- util/tracing/util.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/table/tables/index.go b/table/tables/index.go index 97a24404a56a2..24e8083c6248b 100644 --- a/table/tables/index.go +++ b/table/tables/index.go @@ -169,9 +169,9 @@ func (c *index) Create(sctx sessionctx.Context, txn kv.Transaction, indexedValue indexedValues := c.getIndexedValue(indexedValue) ctx := opt.Ctx if ctx != nil { - r := tracing.StartRegion(ctx, "index.Create") + var r tracing.Region + r, ctx = tracing.StartRegionEx(ctx, "index.Create") defer r.End() - ctx = r.Context } else { ctx = context.TODO() } diff --git a/util/tracing/util.go b/util/tracing/util.go index 8b80d9b173088..924e2eb039f44 100644 --- a/util/tracing/util.go +++ b/util/tracing/util.go @@ -101,7 +101,6 @@ func StartRegionEx(ctx context.Context, regionType string) (Region, context.Cont type Region struct { *trace.Region opentracing.Span - context.Context } // End marks the end of the traced code region. From 818bb5dc4b2dbcbb1268bb90cba2da265097208a Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Mon, 6 Feb 2023 17:39:25 +0800 Subject: [PATCH 4/5] make bazel_prepare --- ddl/BUILD.bazel | 1 + distsql/BUILD.bazel | 2 ++ executor/BUILD.bazel | 1 + executor/seqtest/BUILD.bazel | 1 + executor/splittest/BUILD.bazel | 1 + session/session_test/BUILD.bazel | 1 + store/copr/BUILD.bazel | 5 +---- store/copr/copr_test/BUILD.bazel | 1 + store/driver/BUILD.bazel | 2 ++ store/mockstore/mockstorage/BUILD.bazel | 1 + tidb-server/BUILD.bazel | 1 + 11 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ddl/BUILD.bazel b/ddl/BUILD.bazel index b79647de493c1..a117b052d0651 100644 --- a/ddl/BUILD.bazel +++ b/ddl/BUILD.bazel @@ -92,6 +92,7 @@ go_library( "//sessiontxn", "//statistics", "//statistics/handle", + "//store/copr", "//store/driver/backoff", "//store/helper", "//table", diff --git a/distsql/BUILD.bazel b/distsql/BUILD.bazel index bd8fe45cb9f8a..d737718a2e084 100644 --- a/distsql/BUILD.bazel +++ b/distsql/BUILD.bazel @@ -22,6 +22,7 @@ go_library( "//sessionctx/stmtctx", "//sessionctx/variable", "//statistics", + "//store/copr", "//tablecodec", "//telemetry", "//types", @@ -71,6 +72,7 @@ go_test( "//sessionctx/stmtctx", "//sessionctx/variable", "//statistics", + "//store/copr", "//tablecodec", "//testkit/testsetup", "//types", diff --git a/executor/BUILD.bazel b/executor/BUILD.bazel index 328ec5f924587..56c6805fdef21 100644 --- a/executor/BUILD.bazel +++ b/executor/BUILD.bazel @@ -380,6 +380,7 @@ go_test( "//sessiontxn/staleread", "//statistics", "//statistics/handle", + "//store/copr", "//store/driver/error", "//store/helper", "//store/mockstore", diff --git a/executor/seqtest/BUILD.bazel b/executor/seqtest/BUILD.bazel index 9f6019c011374..6d582ded16630 100644 --- a/executor/seqtest/BUILD.bazel +++ b/executor/seqtest/BUILD.bazel @@ -29,6 +29,7 @@ go_test( "//session", "//sessionctx/variable", "//statistics/handle", + "//store/copr", "//store/mockstore", "//tablecodec", "//testkit", diff --git a/executor/splittest/BUILD.bazel b/executor/splittest/BUILD.bazel index 1fa5e7f4f1bcb..f3f9f90128bcc 100644 --- a/executor/splittest/BUILD.bazel +++ b/executor/splittest/BUILD.bazel @@ -19,6 +19,7 @@ go_test( "//parser/terror", "//planner/core", "//sessionctx/variable", + "//store/copr", "//store/driver/backoff", "//store/helper", "//table", diff --git a/session/session_test/BUILD.bazel b/session/session_test/BUILD.bazel index 80deb80c83cfc..f0fa774e9f9e3 100644 --- a/session/session_test/BUILD.bazel +++ b/session/session_test/BUILD.bazel @@ -27,6 +27,7 @@ go_test( "//session", "//sessionctx", "//sessionctx/variable", + "//store/copr", "//store/mockstore", "//table/tables", "//testkit", diff --git a/store/copr/BUILD.bazel b/store/copr/BUILD.bazel index a82b0778b5004..9f187190bb70c 100644 --- a/store/copr/BUILD.bazel +++ b/store/copr/BUILD.bazel @@ -31,11 +31,8 @@ go_library( "//util/mathutil", "//util/memory", "//util/paging", -<<<<<<< HEAD - "//util/tracing", -======= "//util/tiflashcompute", ->>>>>>> master + "//util/tracing", "//util/trxevents", "@com_github_dgraph_io_ristretto//:ristretto", "@com_github_gogo_protobuf//proto", diff --git a/store/copr/copr_test/BUILD.bazel b/store/copr/copr_test/BUILD.bazel index 4460293d22991..af7d46d052bf5 100644 --- a/store/copr/copr_test/BUILD.bazel +++ b/store/copr/copr_test/BUILD.bazel @@ -9,6 +9,7 @@ go_test( deps = [ "//config", "//kv", + "//store/copr", "//store/mockstore", "//testkit/testmain", "//testkit/testsetup", diff --git a/store/driver/BUILD.bazel b/store/driver/BUILD.bazel index 27793ec96b9cf..d68f71cd44839 100644 --- a/store/driver/BUILD.bazel +++ b/store/driver/BUILD.bazel @@ -8,6 +8,7 @@ go_library( deps = [ "//kv", "//sessionctx/variable", + "//store/copr", "//store/driver/error", "//store/driver/txn", "//store/gcworker", @@ -43,6 +44,7 @@ go_test( "//domain", "//kv", "//session", + "//store/copr", "//store/mockstore", "//store/mockstore/unistore", "//testkit/testsetup", diff --git a/store/mockstore/mockstorage/BUILD.bazel b/store/mockstore/mockstorage/BUILD.bazel index 1f3dc1d16522a..316301bb73242 100644 --- a/store/mockstore/mockstorage/BUILD.bazel +++ b/store/mockstore/mockstorage/BUILD.bazel @@ -7,6 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//kv", + "//store/copr", "//store/driver/txn", "@com_github_pingcap_kvproto//pkg/deadlock", "@com_github_tikv_client_go_v2//config", diff --git a/tidb-server/BUILD.bazel b/tidb-server/BUILD.bazel index 9db64128fafb6..b0be440b7f0d8 100644 --- a/tidb-server/BUILD.bazel +++ b/tidb-server/BUILD.bazel @@ -29,6 +29,7 @@ go_library( "//sessionctx/variable", "//statistics", "//store", + "//store/copr", "//store/driver", "//store/mockstore", "//store/mockstore/unistore/metrics", From bb8b032eb541e539282b5f63600f7127bf28631c Mon Sep 17 00:00:00 2001 From: tiancaiamao Date: Mon, 6 Feb 2023 18:07:01 +0800 Subject: [PATCH 5/5] make fmt --- distsql/distsql.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distsql/distsql.go b/distsql/distsql.go index b85232719b936..defbeb85ae74f 100644 --- a/distsql/distsql.go +++ b/distsql/distsql.go @@ -29,8 +29,8 @@ import ( "github.com/pingcap/tidb/statistics" "github.com/pingcap/tidb/types" "github.com/pingcap/tidb/util/logutil" - "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tidb/util/memory" + "github.com/pingcap/tidb/util/tracing" "github.com/pingcap/tidb/util/trxevents" "github.com/pingcap/tipb/go-tipb" "github.com/tikv/client-go/v2/tikvrpc/interceptor"