Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

domain: add timeout for updateStatsWorker exit process #40434

Merged
merged 28 commits into from
Jan 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
84152ed
fix
Yisaer Jan 9, 2023
a3de6d9
fix
Yisaer Jan 10, 2023
1186288
Merge branch 'master' into fix_40433
ti-chi-bot Jan 10, 2023
81f912e
Merge branch 'master' into fix_40433
ti-chi-bot Jan 10, 2023
4b24048
Merge branch 'master' into fix_40433
ti-chi-bot Jan 10, 2023
675bfff
Merge branch 'master' into fix_40433
ti-chi-bot Jan 10, 2023
fbe7f8b
Merge branch 'master' into fix_40433
hawkingrei Jan 10, 2023
b9a8adf
Merge branch 'master' into fix_40433
ti-chi-bot Jan 10, 2023
6afee65
Merge branch 'master' into fix_40433
ti-chi-bot Jan 10, 2023
2d9341b
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
fe7d292
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
0e0b446
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
189e96c
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
4ec8f3e
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
0a6074f
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
8307ab1
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
e3f15d7
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
556915c
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
b9bef86
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
cd54136
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
1af7831
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
1b66c2e
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
264983c
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
f7b408c
Merge branch 'master' into fix_40433
ti-chi-bot Jan 11, 2023
3300e4e
fix
Yisaer Jan 12, 2023
7c74d76
fix
Yisaer Jan 12, 2023
ce96599
Merge branch 'master' into fix_40433
ti-chi-bot Jan 12, 2023
01e0af2
Merge branch 'master' into fix_40433
ti-chi-bot Jan 12, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
44 changes: 37 additions & 7 deletions domain/domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -1728,12 +1728,13 @@ func (do *Domain) StartPlanReplayerHandle() {
}
do.wg.Add(2)
go func() {
logutil.BgLogger().Info("PlanReplayerTaskCollectHandle started")
tikcer := time.NewTicker(time.Duration(lease))
defer func() {
tikcer.Stop()
do.wg.Done()
logutil.BgLogger().Info("PlanReplayerTaskCollectHandle exited.")
util.Recover(metrics.LabelDomain, "PlanReplayerTaskCollectHandle", nil, false)
logutil.BgLogger().Info("PlanReplayerTaskCollectHandle exited.")
}()
for {
select {
Expand All @@ -1748,10 +1749,11 @@ func (do *Domain) StartPlanReplayerHandle() {
}
}()
go func() {
logutil.BgLogger().Info("PlanReplayerTaskCollectHandle started")
defer func() {
do.wg.Done()
logutil.BgLogger().Info("PlanReplayerTaskDumpHandle exited.")
util.Recover(metrics.LabelDomain, "PlanReplayerTaskDumpHandle", nil, false)
logutil.BgLogger().Info("PlanReplayerTaskDumpHandle exited.")
}()
for _, worker := range do.planReplayerHandle.planReplayerTaskDumpHandle.workers {
go worker.run()
Expand All @@ -1770,12 +1772,13 @@ func (do *Domain) GetPlanReplayerHandle() *planReplayerHandle {
func (do *Domain) DumpFileGcCheckerLoop() {
do.wg.Add(1)
go func() {
logutil.BgLogger().Info("dumpFileGcChecker started")
gcTicker := time.NewTicker(do.dumpFileGcChecker.gcLease)
defer func() {
gcTicker.Stop()
do.wg.Done()
logutil.BgLogger().Info("dumpFileGcChecker exited.")
util.Recover(metrics.LabelDomain, "dumpFileGcCheckerLoop", nil, false)
logutil.BgLogger().Info("dumpFileGcChecker exited.")
}()
for {
select {
Expand Down Expand Up @@ -1803,16 +1806,21 @@ func (do *Domain) StartHistoricalStatsWorker() {
}
do.wg.Add(1)
go func() {
logutil.BgLogger().Info("HistoricalStatsWorker started")
defer func() {
do.wg.Done()
logutil.BgLogger().Info("HistoricalStatsWorker exited.")
util.Recover(metrics.LabelDomain, "HistoricalStatsWorkerLoop", nil, false)
logutil.BgLogger().Info("HistoricalStatsWorker exited.")
}()
for {
select {
case <-do.exit:
close(do.historicalStatsWorker.tblCH)
return
case tblID := <-do.historicalStatsWorker.tblCH:
case tblID, ok := <-do.historicalStatsWorker.tblCH:
if !ok {
return
}
err := do.historicalStatsWorker.DumpHistoricalStats(tblID, do.StatsHandle())
if err != nil {
logutil.BgLogger().Warn("dump historical stats failed", zap.Error(err), zap.Int64("tableID", tblID))
Expand Down Expand Up @@ -2030,8 +2038,30 @@ func (do *Domain) syncIndexUsageWorker(owner owner.Manager) {
}
}

func (do *Domain) updateStatsWorkerExitPreprocessing(statsHandle *handle.Handle, owner owner.Manager) {
ch := make(chan struct{}, 1)
timeout, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
go func() {
logutil.BgLogger().Info("updateStatsWorker is going to exit, start to flush stats")
statsHandle.FlushStats()
logutil.BgLogger().Info("updateStatsWorker ready to release owner")
owner.Cancel()
ch <- struct{}{}
}()
select {
case <-ch:
logutil.BgLogger().Info("updateStatsWorker exit preprocessing finished")
return
case <-timeout.Done():
logutil.BgLogger().Warn("updateStatsWorker exit preprocessing timeout, force exiting")
return
}
}

func (do *Domain) updateStatsWorker(ctx sessionctx.Context, owner owner.Manager) {
defer util.Recover(metrics.LabelDomain, "updateStatsWorker", nil, false)
logutil.BgLogger().Info("updateStatsWorker started.")
lease := do.statsLease
deltaUpdateTicker := time.NewTicker(20 * lease)
gcStatsTicker := time.NewTicker(100 * lease)
Expand All @@ -2049,13 +2079,13 @@ func (do *Domain) updateStatsWorker(ctx sessionctx.Context, owner owner.Manager)
deltaUpdateTicker.Stop()
readMemTricker.Stop()
do.SetStatsUpdating(false)
util.Recover(metrics.LabelDomain, "updateStatsWorker", nil, false)
logutil.BgLogger().Info("updateStatsWorker exited.")
}()
for {
select {
case <-do.exit:
statsHandle.FlushStats()
owner.Cancel()
do.updateStatsWorkerExitPreprocessing(statsHandle, owner)
return
// This channel is sent only by ddl owner.
case t := <-statsHandle.DDLEventCh():
Expand Down
2 changes: 2 additions & 0 deletions domain/plan_replayer.go
Original file line number Diff line number Diff line change
Expand Up @@ -365,9 +365,11 @@ type planReplayerTaskDumpWorker struct {
}

func (w *planReplayerTaskDumpWorker) run() {
logutil.BgLogger().Info("planReplayerTaskDumpWorker started.")
for task := range w.taskCH {
w.handleTask(task)
}
logutil.BgLogger().Info("planReplayerTaskDumpWorker exited.")
}

func (w *planReplayerTaskDumpWorker) handleTask(task *PlanReplayerDumpTask) {
Expand Down