fix(ntp): simplify NTP service initialization and error handling

This commit is contained in:
riolurs 2024-01-17 16:13:55 +08:00
parent c34a0ef8f0
commit 460cc240b0

View File

@ -47,8 +47,12 @@ func (srv *Service) Start() {
srv.mu.Lock() srv.mu.Lock()
defer srv.mu.Unlock() defer srv.mu.Unlock()
log.Infoln("NTP service start, sync system time is %t", srv.syncSystemTime) log.Infoln("NTP service start, sync system time is %t", srv.syncSystemTime)
err := srv.update()
if err != nil {
log.Errorln("Initialize NTP time failed: %s", err)
return
}
service.running = true service.running = true
srv.update()
go srv.loopUpdate() go srv.loopUpdate()
} }
@ -71,20 +75,16 @@ func (srv *Service) Running() bool {
return srv.running return srv.running
} }
func (srv *Service) update() { func (srv *Service) update() error {
var response *ntp.Response var response *ntp.Response
var err error var err error
for i := 0; i < 3; i++ { for i := 0; i < 3; i++ {
response, err = ntp.Exchange(context.Background(), srv.dialer, srv.server) if response, err = ntp.Exchange(context.Background(), srv.dialer, srv.server); err == nil {
if err != nil { break
if i == 2 { }
log.Errorln("Initialize NTP time failed: %s", err) if i == 2 {
return return err
}
time.Sleep(time.Second * 2) // wait for 2 seconds before the next try
continue
} }
break
} }
offset = response.ClockOffset offset = response.ClockOffset
if offset > time.Duration(0) { if offset > time.Duration(0) {
@ -94,14 +94,15 @@ func (srv *Service) update() {
} }
if srv.syncSystemTime { if srv.syncSystemTime {
timeNow := response.Time timeNow := response.Time
err = setSystemTime(timeNow) syncErr := setSystemTime(timeNow)
if err == nil { if syncErr == nil {
log.Infoln("Sync system time success: %s", timeNow.Local().Format(ntp.TimeLayout)) log.Infoln("Sync system time success: %s", timeNow.Local().Format(ntp.TimeLayout))
} else { } else {
log.Errorln("Write time to system: %s", err) log.Errorln("Write time to system: %s", syncErr)
srv.syncSystemTime = false srv.syncSystemTime = false
} }
} }
return nil
} }
func (srv *Service) loopUpdate() { func (srv *Service) loopUpdate() {
@ -111,7 +112,10 @@ func (srv *Service) loopUpdate() {
return return
case <-srv.ticker.C: case <-srv.ticker.C:
} }
srv.update() err := srv.update()
if err != nil {
log.Warnln("Sync time failed: %s", err)
}
} }
} }