statistics: fix data race in the Handle.mu.ctx (#34716)

close pingcap/tidb#34715
This commit is contained in:
Weizhen Wang
2022-05-17 14:30:37 +08:00
committed by GitHub
parent d4df6b3c90
commit d75b06ec97

View File

@ -19,12 +19,13 @@ import (
"github.com/pingcap/errors"
"github.com/pingcap/tidb/ddl/util"
"github.com/pingcap/tidb/infoschema"
"github.com/pingcap/tidb/parser/ast"
"github.com/pingcap/tidb/parser/model"
"github.com/pingcap/tidb/parser/mysql"
"github.com/pingcap/tidb/parser/terror"
"github.com/pingcap/tidb/sessionctx"
"github.com/pingcap/tidb/sessionctx/variable"
"github.com/pingcap/tidb/sessiontxn"
"github.com/pingcap/tidb/types"
"github.com/pingcap/tidb/util/sqlexec"
)
@ -75,7 +76,13 @@ var analyzeOptionDefault = map[ast.AnalyzeOptionType]uint64{
func (h *Handle) updateGlobalStats(tblInfo *model.TableInfo) error {
// We need to merge the partition-level stats to global-stats when we drop table partition in dynamic mode.
tableID := tblInfo.ID
is := h.mu.ctx.GetInfoSchema().(infoschema.InfoSchema)
se, err := h.pool.Get()
if err != nil {
return err
}
sctx := se.(sessionctx.Context)
is := sessiontxn.GetTxnManager(sctx).GetTxnInfoSchema()
h.pool.Put(se)
globalStats, err := h.TableStatsFromStorage(tblInfo, tableID, true, 0)
if err != nil {
return err