From fd050b4afee13c064d7e428df3dd9120a217ed2a Mon Sep 17 00:00:00 2001 From: zhangkun Date: Tue, 13 May 2025 15:04:27 +0800 Subject: [PATCH] feat: add fallback NTP server support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Added FallbackNTPServer configuration in dsg-configs with aliyun as default 2. Extended Manager struct to include fallbackNTPServer field 3. Implemented getDsgFallbackNTPServer method to retrieve fallback server 4. Modified setNTPServerToTimeSyncd to append fallback server when default NTP is used 5. Added logic to handle fallback server when primary NTP server fails The changes provide redundancy for time synchronization by automatically falling back to a secondary NTP server (ntp.aliyun.com) when the primary server is unavailable or using default settings. This improves system time reliability. feat: 添加后备NTP服务器支持 1. 在dsg-configs中添加FallbackNTPServer配置,默认使用阿里云服务器 2. 扩展Manager结构体包含fallbackNTPServer字段 3. 实现getDsgFallbackNTPServer方法获取后备服务器 4. 修改setNTPServerToTimeSyncd方法,在使用默认NTP时追加后备服务器 5. 添加处理逻辑在主NTP服务器不可用时使用后备服务器 这些修改通过在主NTP服务器不可用或使用默认设置时自动回退到备用NTP服务器 (ntp.aliyun.com),为时间同步提供了冗余,提高了系统时间的可靠性。 pms: BUG-315181 --- .../org.deepin.dde.daemon.timedated.json | 10 ++++ system/timedate1/manager.go | 48 ++++++++++++++----- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/misc/dsg-configs/org.deepin.dde.daemon.timedated.json b/misc/dsg-configs/org.deepin.dde.daemon.timedated.json index 383f69291..1bd9fe79b 100644 --- a/misc/dsg-configs/org.deepin.dde.daemon.timedated.json +++ b/misc/dsg-configs/org.deepin.dde.daemon.timedated.json @@ -21,6 +21,16 @@ "description": "current ntp server", "permissions": "readwrite", "visibility": "private" + }, + "FallbackNTPServer": { + "value": "ntp.aliyun.com", + "serial": 0, + "flags": ["global"], + "name": "fallback ntp server", + "name[zh_CN]": "后备的NTP服务地址", + "description": "fallback ntp server", + "permissions": "readonly", + "visibility": "private" } } } diff --git a/system/timedate1/manager.go b/system/timedate1/manager.go index 689cca418..e85c3ae5b 100644 --- a/system/timedate1/manager.go +++ b/system/timedate1/manager.go @@ -27,15 +27,16 @@ import ( //go:generate dbusutil-gen em -type Manager type Manager struct { - core timedate1.Timedate - service *dbusutil.Service - PropsMu sync.RWMutex - NTPServer string - timesyncd timesync1.Timesync1 - systemd systemd1.Manager - setNTPServerMu sync.RWMutex - signalLoop *dbusutil.SignalLoop - dsManager ConfigManager.Manager + core timedate1.Timedate + service *dbusutil.Service + PropsMu sync.RWMutex + NTPServer string + timesyncd timesync1.Timesync1 + systemd systemd1.Manager + setNTPServerMu sync.RWMutex + signalLoop *dbusutil.SignalLoop + dsManager ConfigManager.Manager + fallbackNTPServer string } const ( @@ -54,6 +55,7 @@ const ( dsettingsTimeDatedName = "org.deepin.dde.daemon.timedated" dsettingsKeyObsoleteNTPServer = "ObsoleteNTPServer" dsettingsKeyNTPServer = "NTPServer" + dsettingsFallbackNTPServer = "FallbackNTPServer" ) func NewManager(service *dbusutil.Service) (*Manager, error) { @@ -108,6 +110,18 @@ func (m *Manager) getDsgNTPServer() string { return v.Value().(string) } +func (m *Manager) getDsgFallbackNTPServer() string { + if m.dsManager == nil { + return "" + } + v, err := m.dsManager.Value(0, dsettingsFallbackNTPServer) + if err != nil { + logger.Warning(err) + return "" + } + return v.Value().(string) +} + func (m *Manager) setDsgObsoleteNTPServer(server string) error { if m.dsManager == nil { return errors.New("dsManager is nil") @@ -136,6 +150,7 @@ func (m *Manager) start() { } obsoleteNTPServer := m.getDsgObsoleteNTPServer() ntpServer := m.getDsgNTPServer() + m.fallbackNTPServer = m.getDsgFallbackNTPServer() logger.Infof("dsg obolete ntp server: %s; dsg ntp server: %s", obsoleteNTPServer, ntpServer) m.systemd = systemd1.NewManager(m.service.Conn()) @@ -259,7 +274,7 @@ func (m *Manager) setNTPServer(value string) error { m.setNTPServerMu.Lock() defer m.setNTPServerMu.Unlock() - err := setNTPServer(value) + err := m.setNTPServerToTimeSyncd(value) if err != nil { return err } @@ -313,13 +328,24 @@ func doAuthorized(msg, sysBusName string) (bool, error) { return ret.IsAuthorized, nil } -func setNTPServer(server string) error { +func (m *Manager) setNTPServerToTimeSyncd(server string) error { kf := keyfile.NewKeyFile() err := kf.LoadFromFile(timeSyncCfgFile) if err != nil && !os.IsNotExist(err) { return err } + setFallback, err := m.dsManager.IsDefaultValue(0, dsettingsKeyNTPServer) + if err != nil { + logger.Warning(err) + } + + if setFallback && m.fallbackNTPServer != "" { + // 配置支持FallbackNtp字段,经过验证无法达到要求,故采用这种方式 + server += " " + m.fallbackNTPServer + logger.Infof("set fallback ntp server: %s", m.fallbackNTPServer) + } + kf.SetString("Time", "NTP", server) dir := filepath.Dir(timeSyncCfgFile)