@@ -146,6 +146,7 @@ type Domain struct {
146
146
memoryUsageAlarmHandle * memoryusagealarm.Handle
147
147
serverMemoryLimitHandle * servermemorylimit.Handle
148
148
// TODO: use Run for each process in future pr
149
+ << << << < HEAD
149
150
wg * util.WaitGroupEnhancedWrapper
150
151
statsUpdating atomicutil.Int32
151
152
cancel context.CancelFunc
@@ -157,6 +158,28 @@ type Domain struct {
157
158
logBackupAdvancer * daemon.OwnerDaemon
158
159
historicalStatsWorker * HistoricalStatsWorker
159
160
ttlJobManager atomic.Pointer [ttlworker.JobManager ]
161
+ == == == =
162
+ wg * util.WaitGroupEnhancedWrapper
163
+ statsUpdating atomicutil.Int32
164
+ cancel context.CancelFunc
165
+ indexUsageSyncLease time.Duration
166
+ dumpFileGcChecker * dumpFileGcChecker
167
+ planReplayerHandle * planReplayerHandle
168
+ extractTaskHandle * ExtractHandle
169
+ expiredTimeStamp4PC struct {
170
+ // let `expiredTimeStamp4PC` use its own lock to avoid any block across domain.Reload()
171
+ // and compiler.Compile(), see issue https://github.com/pingcap/tidb/issues/45400
172
+ sync.RWMutex
173
+ expiredTimeStamp types.Time
174
+ }
175
+
176
+ logBackupAdvancer * daemon.OwnerDaemon
177
+ historicalStatsWorker * HistoricalStatsWorker
178
+ ttlJobManager atomic.Pointer [ttlworker.JobManager ]
179
+ runawayManager * resourcegroup.RunawayManager
180
+ runawaySyncer * runawaySyncer
181
+ resourceGroupsController * rmclient.ResourceGroupsController
182
+ >> >> >> > 29727 caacb8 (domain : use dedicated lock for expiredTimeStamp4PC (#45802 ))
160
183
161
184
serverID uint64
162
185
serverIDSession * concurrency.Session
@@ -472,18 +495,18 @@ func (do *Domain) GetSnapshotMeta(startTS uint64) (*meta.Meta, error) {
472
495
473
496
// ExpiredTimeStamp4PC gets expiredTimeStamp4PC from domain.
474
497
func (do * Domain ) ExpiredTimeStamp4PC () types.Time {
475
- do .m . Lock ()
476
- defer do .m . Unlock ()
498
+ do .expiredTimeStamp4PC . RLock ()
499
+ defer do .expiredTimeStamp4PC . RUnlock ()
477
500
478
- return do .expiredTimeStamp4PC
501
+ return do .expiredTimeStamp4PC . expiredTimeStamp
479
502
}
480
503
481
504
// SetExpiredTimeStamp4PC sets the expiredTimeStamp4PC from domain.
482
505
func (do * Domain ) SetExpiredTimeStamp4PC (time types.Time ) {
483
- do .m .Lock ()
484
- defer do .m .Unlock ()
506
+ do .expiredTimeStamp4PC .Lock ()
507
+ defer do .expiredTimeStamp4PC .Unlock ()
485
508
486
- do .expiredTimeStamp4PC = time
509
+ do .expiredTimeStamp4PC . expiredTimeStamp = time
487
510
}
488
511
489
512
// DDL gets DDL from domain.
@@ -1021,7 +1044,6 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio
1021
1044
slowQuery : newTopNSlowQueries (30 , time .Hour * 24 * 7 , 500 ),
1022
1045
indexUsageSyncLease : idxUsageSyncLease ,
1023
1046
dumpFileGcChecker : & dumpFileGcChecker {gcLease : dumpFileGcLease , paths : []string {replayer .GetPlanReplayerDirName (), GetOptimizerTraceDirName (), GetExtractTaskDirName ()}},
1024
- expiredTimeStamp4PC : types .NewTime (types .ZeroCoreTime , mysql .TypeTimestamp , types .DefaultFsp ),
1025
1047
mdlCheckTableInfo : & mdlCheckTableInfo {
1026
1048
mu : sync.Mutex {},
1027
1049
jobsVerMap : make (map [int64 ]int64 ),
@@ -1037,6 +1059,7 @@ func NewDomain(store kv.Storage, ddlLease time.Duration, statsLease time.Duratio
1037
1059
do .serverMemoryLimitHandle = servermemorylimit .NewServerMemoryLimitHandle (do .exit )
1038
1060
do .sysProcesses = SysProcesses {mu : & sync.RWMutex {}, procMap : make (map [uint64 ]sessionctx.Context )}
1039
1061
do .initDomainSysVars ()
1062
+ do .expiredTimeStamp4PC .expiredTimeStamp = types .NewTime (types .ZeroCoreTime , mysql .TypeTimestamp , types .DefaultFsp )
1040
1063
return do
1041
1064
}
1042
1065
0 commit comments