From fa09affae6e8a5acc852d4aacb7edcacdc9c8c22 Mon Sep 17 00:00:00 2001 From: Ryan Leung Date: Fri, 3 Sep 2021 18:10:57 +0800 Subject: [PATCH] *: close ticker when function returns (#4053) Signed-off-by: Ryan Leung Co-authored-by: Ti Chi Robot --- server/cluster/coordinator_test.go | 2 +- server/core/region_storage.go | 36 ++++++++++++++---------------- server/region_syncer/server.go | 1 + tools/pd-tso-bench/main.go | 1 + 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/server/cluster/coordinator_test.go b/server/cluster/coordinator_test.go index 14c8df53882..27819522bc8 100644 --- a/server/cluster/coordinator_test.go +++ b/server/cluster/coordinator_test.go @@ -887,13 +887,13 @@ func BenchmarkPatrolRegion(b *testing.B) { for { if oc.OperatorCount(operator.OpMerge) == mergeLimit { co.cancel() - co.wg.Add(1) return } } }() <-listen + co.wg.Add(1) b.ResetTimer() co.patrolRegions() } diff --git a/server/core/region_storage.go b/server/core/region_storage.go index ea79fbae099..68518303cfb 100644 --- a/server/core/region_storage.go +++ b/server/core/region_storage.go @@ -72,35 +72,33 @@ func NewRegionStorage( regionStorageCtx: regionStorageCtx, regionStorageCancel: regionStorageCancel, } - s.backgroundFlush() + go s.backgroundFlush() return s, nil } func (s *RegionStorage) backgroundFlush() { - ticker := time.NewTicker(dirtyFlushTick) var ( isFlush bool err error ) - go func() { - defer ticker.Stop() - for { - select { - case <-ticker.C: - s.mu.RLock() - isFlush = s.flushTime.Before(time.Now()) - s.mu.RUnlock() - if !isFlush { - continue - } - if err = s.FlushRegion(); err != nil { - log.Error("flush regions meet error", errs.ZapError(err)) - } - case <-s.regionStorageCtx.Done(): - return + ticker := time.NewTicker(dirtyFlushTick) + defer ticker.Stop() + for { + select { + case <-ticker.C: + s.mu.RLock() + isFlush = s.flushTime.Before(time.Now()) + s.mu.RUnlock() + if !isFlush { + continue } + if err = s.FlushRegion(); err != nil { + log.Error("flush regions meet error", errs.ZapError(err)) + } + case <-s.regionStorageCtx.Done(): + return } - }() + } } // SaveRegion saves one region to storage. diff --git a/server/region_syncer/server.go b/server/region_syncer/server.go index b2ad1a9d239..010bdc83314 100644 --- a/server/region_syncer/server.go +++ b/server/region_syncer/server.go @@ -106,6 +106,7 @@ func (s *RegionSyncer) RunServer(regionNotifier <-chan *core.RegionInfo, quit ch var stats []*pdpb.RegionStat var leaders []*metapb.Peer ticker := time.NewTicker(syncerKeepAliveInterval) + defer ticker.Stop() for { select { case <-quit: diff --git a/tools/pd-tso-bench/main.go b/tools/pd-tso-bench/main.go index 1fde66536d4..1666ae3d26c 100644 --- a/tools/pd-tso-bench/main.go +++ b/tools/pd-tso-bench/main.go @@ -142,6 +142,7 @@ func showStats(ctx context.Context, durCh chan time.Duration) { defer cancel() ticker := time.NewTicker(*interval) + defer ticker.Stop() s := newStats() total := newStats()