Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#45802
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
  • Loading branch information
aidendou authored and ti-chi-bot committed Aug 18, 2023
1 parent 189e059 commit 14669af
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 6 deletions.
3 changes: 3 additions & 0 deletions domain/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -113,13 +113,16 @@ go_test(
"//metrics",
"//parser/ast",
"//parser/model",
"//parser/mysql",
"//parser/terror",
"//server",
"//session",
"//sessionctx/stmtctx",
"//sessionctx/variable",
"//store/mockstore",
"//testkit",
"//testkit/testsetup",
"//types",
"//util",
"//util/mock",
"@com_github_ngaut_pools//:pools",
Expand Down
41 changes: 35 additions & 6 deletions domain/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ type Domain struct {
expensiveQueryHandle *expensivequery.Handle
memoryUsageAlarmHandle *memoryusagealarm.Handle
serverMemoryLimitHandle *servermemorylimit.Handle
<<<<<<< HEAD
wg util.WaitGroupWrapper
statsUpdating atomicutil.Int32
cancel context.CancelFunc
Expand All @@ -122,6 +123,29 @@ type Domain struct {
logBackupAdvancer *daemon.OwnerDaemon
historicalStatsWorker *HistoricalStatsWorker
ttlJobManager *ttlworker.JobManager
=======
// TODO: use Run for each process in future pr
wg *util.WaitGroupEnhancedWrapper
statsUpdating atomicutil.Int32
cancel context.CancelFunc
indexUsageSyncLease time.Duration
dumpFileGcChecker *dumpFileGcChecker
planReplayerHandle *planReplayerHandle
extractTaskHandle *ExtractHandle
expiredTimeStamp4PC struct {
// let `expiredTimeStamp4PC` use its own lock to avoid any block across domain.Reload()
// and compiler.Compile(), see issue https://github.com/pingcap/tidb/issues/45400
sync.RWMutex
expiredTimeStamp types.Time
}

logBackupAdvancer *daemon.OwnerDaemon
historicalStatsWorker *HistoricalStatsWorker
ttlJobManager atomic.Pointer[ttlworker.JobManager]
runawayManager *resourcegroup.RunawayManager
runawaySyncer *runawaySyncer
resourceGroupsController *rmclient.ResourceGroupsController
>>>>>>> 29727caacb8 (domain: use dedicated lock for expiredTimeStamp4PC (#45802))

serverID uint64
serverIDSession *concurrency.Session
Expand Down Expand Up @@ -394,18 +418,18 @@ func (do *Domain) GetSnapshotMeta(startTS uint64) (*meta.Meta, error) {

// ExpiredTimeStamp4PC gets expiredTimeStamp4PC from domain.
func (do *Domain) ExpiredTimeStamp4PC() types.Time {
do.m.Lock()
defer do.m.Unlock()
do.expiredTimeStamp4PC.RLock()
defer do.expiredTimeStamp4PC.RUnlock()

return do.expiredTimeStamp4PC
return do.expiredTimeStamp4PC.expiredTimeStamp
}

// SetExpiredTimeStamp4PC sets the expiredTimeStamp4PC from domain.
func (do *Domain) SetExpiredTimeStamp4PC(time types.Time) {
do.m.Lock()
defer do.m.Unlock()
do.expiredTimeStamp4PC.Lock()
defer do.expiredTimeStamp4PC.Unlock()

do.expiredTimeStamp4PC = time
do.expiredTimeStamp4PC.expiredTimeStamp = time
}

// DDL gets DDL from domain.
Expand Down Expand Up @@ -897,8 +921,12 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio
infoCache: infoschema.NewCache(16),
slowQuery: newTopNSlowQueries(30, time.Hour*24*7, 500),
indexUsageSyncLease: idxUsageSyncLease,
<<<<<<< HEAD
dumpFileGcChecker: &dumpFileGcChecker{gcLease: dumpFileGcLease, paths: []string{GetPlanReplayerDirName(), GetOptimizerTraceDirName()}},
expiredTimeStamp4PC: types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp),
=======
dumpFileGcChecker: &dumpFileGcChecker{gcLease: dumpFileGcLease, paths: []string{replayer.GetPlanReplayerDirName(), GetOptimizerTraceDirName(), GetExtractTaskDirName()}},
>>>>>>> 29727caacb8 (domain: use dedicated lock for expiredTimeStamp4PC (#45802))
mdlCheckTableInfo: &mdlCheckTableInfo{
mu: sync.Mutex{},
jobsVerMap: make(map[int64]int64),
Expand All @@ -913,6 +941,7 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio
do.serverMemoryLimitHandle = servermemorylimit.NewServerMemoryLimitHandle(do.exit)
do.sysProcesses = SysProcesses{mu: &sync.RWMutex{}, procMap: make(map[uint64]sessionctx.Context)}
do.initDomainSysVars()
do.expiredTimeStamp4PC.expiredTimeStamp = types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp)
return do
}

Expand Down
14 changes: 14 additions & 0 deletions domain/domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,11 @@ import (
"github.com/pingcap/tidb/metrics"
"github.com/pingcap/tidb/parser/ast"
"github.com/pingcap/tidb/parser/model"
"github.com/pingcap/tidb/parser/mysql"
"github.com/pingcap/tidb/sessionctx/stmtctx"
"github.com/pingcap/tidb/sessionctx/variable"
"github.com/pingcap/tidb/store/mockstore"
"github.com/pingcap/tidb/types"
"github.com/pingcap/tidb/util/mock"
dto "github.com/prometheus/client_model/go"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -187,6 +190,17 @@ func TestStatWorkRecoverFromPanic(t *testing.T) {
scope := dom.GetScope("status")
require.Equal(t, variable.DefaultStatusVarScopeFlag, scope)

// default expiredTimeStamp4PC = "0000-00-00 00:00:00"
ts := types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp)
expiredTimeStamp := dom.ExpiredTimeStamp4PC()
require.Equal(t, expiredTimeStamp, ts)

// set expiredTimeStamp4PC to "2023-08-02 12:15:00"
ts, _ = types.ParseTimestamp(&stmtctx.StatementContext{TimeZone: time.UTC}, "2023-08-02 12:15:00")
dom.SetExpiredTimeStamp4PC(ts)
expiredTimeStamp = dom.ExpiredTimeStamp4PC()
require.Equal(t, expiredTimeStamp, ts)

err = store.Close()
require.NoError(t, err)

Expand Down

0 comments on commit 14669af

Please sign in to comment.