From 88c13f9709bbb0033dddca21e181a5d62f7317e7 Mon Sep 17 00:00:00 2001 From: Valery Piashchynski Date: Sun, 23 Feb 2020 16:13:54 +0300 Subject: Remove data race Smart restart --- service/reload/service.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'service') diff --git a/service/reload/service.go b/service/reload/service.go index a8e862cb..d5b6a024 100644 --- a/service/reload/service.go +++ b/service/reload/service.go @@ -111,9 +111,6 @@ func (s *Service) Serve() error { serviceConfig ServiceConfig service string }{serviceConfig: s.cfg.Services[e.service], service: e.service} - - ticker.Stop() - ticker = time.NewTicker(s.cfg.Interval) } }() @@ -126,6 +123,14 @@ func (s *Service) Serve() error { case config := <-treshholdc: // replace previous value in map by more recent without adding new one updated[config.service] = config.serviceConfig + // stop ticker + ticker.Stop() + // restart + // logic is following: + // if we getting a lot of events, we should't restart particular service on each of it (user doing bug move or very fast typing) + // instead, we are resetting the ticker and wait for Interval time + // If there is no more events, we restart service only once + ticker = time.NewTicker(s.cfg.Interval) case <-ticker.C: if len(updated) > 0 { for k, v := range updated { -- cgit v1.2.3