Skip to content

Commit 42162f0

Browse files
aidendouti-chi-bot
authored andcommitted
This is an automated cherry-pick of #45802
Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
1 parent cf36a9c commit 42162f0

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

domain/BUILD.bazel

+3
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,15 @@ go_test(
104104
"//metrics",
105105
"//parser/ast",
106106
"//parser/model",
107+
"//parser/mysql",
107108
"//parser/terror",
108109
"//server",
109110
"//session",
111+
"//sessionctx/stmtctx",
110112
"//sessionctx/variable",
111113
"//store/mockstore",
112114
"//testkit/testsetup",
115+
"//types",
113116
"//util",
114117
"//util/mock",
115118
"@com_github_ngaut_pools//:pools",

domain/domain.go

+35-6
Original file line numberDiff line numberDiff line change
@@ -109,13 +109,37 @@ type Domain struct {
109109
expensiveQueryHandle *expensivequery.Handle
110110
memoryUsageAlarmHandle *memoryusagealarm.Handle
111111
serverMemoryLimitHandle *servermemorylimit.Handle
112+
<<<<<<< HEAD
112113
wg util.WaitGroupWrapper
113114
statsUpdating atomicutil.Int32
114115
cancel context.CancelFunc
115116
indexUsageSyncLease time.Duration
116117
dumpFileGcChecker *dumpFileGcChecker
117118
expiredTimeStamp4PC types.Time
118119
logBackupAdvancer *daemon.OwnerDaemon
120+
=======
121+
// TODO: use Run for each process in future pr
122+
wg *util.WaitGroupEnhancedWrapper
123+
statsUpdating atomicutil.Int32
124+
cancel context.CancelFunc
125+
indexUsageSyncLease time.Duration
126+
dumpFileGcChecker *dumpFileGcChecker
127+
planReplayerHandle *planReplayerHandle
128+
extractTaskHandle *ExtractHandle
129+
expiredTimeStamp4PC struct {
130+
// let `expiredTimeStamp4PC` use its own lock to avoid any block across domain.Reload()
131+
// and compiler.Compile(), see issue https://github.com/pingcap/tidb/issues/45400
132+
sync.RWMutex
133+
expiredTimeStamp types.Time
134+
}
135+
136+
logBackupAdvancer *daemon.OwnerDaemon
137+
historicalStatsWorker *HistoricalStatsWorker
138+
ttlJobManager atomic.Pointer[ttlworker.JobManager]
139+
runawayManager *resourcegroup.RunawayManager
140+
runawaySyncer *runawaySyncer
141+
resourceGroupsController *rmclient.ResourceGroupsController
142+
>>>>>>> 29727caacb8 (domain: use dedicated lock for expiredTimeStamp4PC (#45802))
119143

120144
serverID uint64
121145
serverIDSession *concurrency.Session
@@ -386,18 +410,18 @@ func (do *Domain) GetSnapshotMeta(startTS uint64) (*meta.Meta, error) {
386410

387411
// ExpiredTimeStamp4PC gets expiredTimeStamp4PC from domain.
388412
func (do *Domain) ExpiredTimeStamp4PC() types.Time {
389-
do.m.Lock()
390-
defer do.m.Unlock()
413+
do.expiredTimeStamp4PC.RLock()
414+
defer do.expiredTimeStamp4PC.RUnlock()
391415

392-
return do.expiredTimeStamp4PC
416+
return do.expiredTimeStamp4PC.expiredTimeStamp
393417
}
394418

395419
// SetExpiredTimeStamp4PC sets the expiredTimeStamp4PC from domain.
396420
func (do *Domain) SetExpiredTimeStamp4PC(time types.Time) {
397-
do.m.Lock()
398-
defer do.m.Unlock()
421+
do.expiredTimeStamp4PC.Lock()
422+
defer do.expiredTimeStamp4PC.Unlock()
399423

400-
do.expiredTimeStamp4PC = time
424+
do.expiredTimeStamp4PC.expiredTimeStamp = time
401425
}
402426

403427
// DDL gets DDL from domain.
@@ -883,9 +907,13 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio
883907
infoCache: infoschema.NewCache(16),
884908
slowQuery: newTopNSlowQueries(30, time.Hour*24*7, 500),
885909
indexUsageSyncLease: idxUsageSyncLease,
910+
<<<<<<< HEAD
886911
dumpFileGcChecker: &dumpFileGcChecker{gcLease: dumpFileGcLease, paths: []string{GetPlanReplayerDirName(), GetOptimizerTraceDirName()}},
887912
onClose: onClose,
888913
expiredTimeStamp4PC: types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp),
914+
=======
915+
dumpFileGcChecker: &dumpFileGcChecker{gcLease: dumpFileGcLease, paths: []string{replayer.GetPlanReplayerDirName(), GetOptimizerTraceDirName(), GetExtractTaskDirName()}},
916+
>>>>>>> 29727caacb8 (domain: use dedicated lock for expiredTimeStamp4PC (#45802))
889917
mdlCheckTableInfo: &mdlCheckTableInfo{
890918
mu: sync.Mutex{},
891919
jobsVerMap: make(map[int64]int64),
@@ -899,6 +927,7 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio
899927
do.serverMemoryLimitHandle = servermemorylimit.NewServerMemoryLimitHandle(do.exit)
900928
do.sysProcesses = SysProcesses{mu: &sync.RWMutex{}, procMap: make(map[uint64]sessionctx.Context)}
901929
do.initDomainSysVars()
930+
do.expiredTimeStamp4PC.expiredTimeStamp = types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp)
902931
return do
903932
}
904933

domain/domain_test.go

+14
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,11 @@ import (
3232
"github.com/pingcap/tidb/metrics"
3333
"github.com/pingcap/tidb/parser/ast"
3434
"github.com/pingcap/tidb/parser/model"
35+
"github.com/pingcap/tidb/parser/mysql"
36+
"github.com/pingcap/tidb/sessionctx/stmtctx"
3537
"github.com/pingcap/tidb/sessionctx/variable"
3638
"github.com/pingcap/tidb/store/mockstore"
39+
"github.com/pingcap/tidb/types"
3740
"github.com/pingcap/tidb/util/mock"
3841
dto "github.com/prometheus/client_model/go"
3942
"github.com/stretchr/testify/require"
@@ -185,6 +188,17 @@ func TestStatWorkRecoverFromPanic(t *testing.T) {
185188
scope := dom.GetScope("status")
186189
require.Equal(t, variable.DefaultStatusVarScopeFlag, scope)
187190

191+
// default expiredTimeStamp4PC = "0000-00-00 00:00:00"
192+
ts := types.NewTime(types.ZeroCoreTime, mysql.TypeTimestamp, types.DefaultFsp)
193+
expiredTimeStamp := dom.ExpiredTimeStamp4PC()
194+
require.Equal(t, expiredTimeStamp, ts)
195+
196+
// set expiredTimeStamp4PC to "2023-08-02 12:15:00"
197+
ts, _ = types.ParseTimestamp(&stmtctx.StatementContext{TimeZone: time.UTC}, "2023-08-02 12:15:00")
198+
dom.SetExpiredTimeStamp4PC(ts)
199+
expiredTimeStamp = dom.ExpiredTimeStamp4PC()
200+
require.Equal(t, expiredTimeStamp, ts)
201+
188202
err = store.Close()
189203
require.NoError(t, err)
190204

0 commit comments

Comments
 (0)