diff --git a/client/internal/engine.go b/client/internal/engine.go index 865dd8a3d..9f36449fa 100644 --- a/client/internal/engine.go +++ b/client/internal/engine.go @@ -512,6 +512,13 @@ func (e *Engine) Start(netbirdConfig *mgmProto.NetbirdConfig, mgmtURL *url.URL) func (e *Engine) InitialUpdateHandling(autoUpdateSettings *mgmProto.AutoUpdateSettings) { e.syncMsgMux.Lock() defer e.syncMsgMux.Unlock() + + if e.updateManager == nil { + e.updateManager = updatemanager.NewUpdateManager(e.statusRecorder, e.stateManager) + } + + e.updateManager.CheckUpdateSuccess(e.ctx) + e.handleAutoUpdateVersion(autoUpdateSettings, true) } @@ -752,9 +759,8 @@ func (e *Engine) handleAutoUpdateVersion(autoUpdateSettings *mgmProto.AutoUpdate if e.updateManager == nil { log.Infof("starting auto-update manager") e.updateManager = updatemanager.NewUpdateManager(e.statusRecorder, e.stateManager) - e.updateManager.Start(e.ctx) } - + e.updateManager.Start(e.ctx) log.Infof("handling auto-update version: %s", autoUpdateSettings.Version) e.updateManager.SetVersion(autoUpdateSettings.Version) } diff --git a/client/internal/updatemanager/manager.go b/client/internal/updatemanager/manager.go index 6b9e42a59..8988b4d42 100644 --- a/client/internal/updatemanager/manager.go +++ b/client/internal/updatemanager/manager.go @@ -76,14 +76,18 @@ func NewUpdateManager(statusRecorder *peer.Status, stateManager *statemanager.Ma return manager } +// CheckUpdateSuccess checks if the update was successful. It works without to start the update manager. +func (u *UpdateManager) CheckUpdateSuccess(ctx context.Context) { + u.updateStateManager(ctx) + return +} + func (u *UpdateManager) Start(ctx context.Context) { if u.cancel != nil { log.Errorf("UpdateManager already started") return } - u.updateStateManager(ctx) - u.update.SetDaemonVersion(u.currentVersion) u.update.SetOnUpdateListener(func() { select {