@@ -17,6 +17,7 @@ import (
1717 "regexp"
1818 "strconv"
1919 "strings"
20+ "time"
2021
2122 "github.com/gorilla/mux"
2223 "github.com/pkg/errors"
@@ -25,6 +26,7 @@ import (
2526 "github.com/containerd/nydus-snapshotter/pkg/daemon"
2627 "github.com/containerd/nydus-snapshotter/pkg/daemon/types"
2728 "github.com/containerd/nydus-snapshotter/pkg/errdefs"
29+ "github.com/containerd/nydus-snapshotter/pkg/filesystem"
2830 "github.com/containerd/nydus-snapshotter/pkg/manager"
2931 metrics "github.com/containerd/nydus-snapshotter/pkg/metrics/tool"
3032)
@@ -50,6 +52,7 @@ const defaultErrorCode string = "Unknown"
5052// 3. Rolling update
5153// 4. Daemons failures record as metrics
5254type Controller struct {
55+ fs * filesystem.Filesystem
5356 manager * manager.Manager
5457 // httpSever *http.Server
5558 addr * net.UnixAddr
@@ -117,7 +120,7 @@ type rafsInstanceInfo struct {
117120 ImageID string `json:"image_id"`
118121}
119122
120- func NewSystemController (manager * manager.Manager , sock string ) (* Controller , error ) {
123+ func NewSystemController (fs * filesystem. Filesystem , manager * manager.Manager , sock string ) (* Controller , error ) {
121124 if err := os .MkdirAll (filepath .Dir (sock ), os .ModePerm ); err != nil {
122125 return nil , err
123126 }
@@ -134,6 +137,7 @@ func NewSystemController(manager *manager.Manager, sock string) (*Controller, er
134137 }
135138
136139 sc := Controller {
140+ fs : fs ,
137141 manager : manager ,
138142 addr : addr ,
139143 router : mux .NewRouter (),
@@ -293,9 +297,11 @@ func (sc *Controller) upgradeNydusDaemon(d *daemon.Daemon, c upgradeRequest) err
293297 log .L .Infof ("Upgrading nydusd %s, request %v" , d .ID (), c )
294298
295299 manager := sc .manager
300+ fs := sc .fs
296301
297302 var new daemon.Daemon
298303 new .States = d .States
304+ new .Supervisor = d .Supervisor
299305 new .CloneInstances (d )
300306
301307 s := path .Base (d .GetAPISock ())
@@ -312,6 +318,11 @@ func (sc *Controller) upgradeNydusDaemon(d *daemon.Daemon, c upgradeRequest) err
312318 return err
313319 }
314320
321+ su := manager .SupervisorSet .GetSupervisor (d .ID ())
322+ if err := su .SendStatesTimeout (time .Second * 10 ); err != nil {
323+ return errors .Wrap (err , "Send states" )
324+ }
325+
315326 if err := cmd .Start (); err != nil {
316327 return errors .Wrap (err , "start process" )
317328 }
@@ -337,6 +348,8 @@ func (sc *Controller) upgradeNydusDaemon(d *daemon.Daemon, c upgradeRequest) err
337348 return errors .Wrap (err , "old daemon exits" )
338349 }
339350
351+ fs .TryRetainSharedDaemon (& new )
352+
340353 if err := new .Start (); err != nil {
341354 return errors .Wrap (err , "start file system service" )
342355 }
@@ -347,10 +360,12 @@ func (sc *Controller) upgradeNydusDaemon(d *daemon.Daemon, c upgradeRequest) err
347360
348361 log .L .Infof ("Started service of upgraded daemon on socket %s" , new .GetAPISock ())
349362
350- if err := manager .UpdateDaemon (& new ); err != nil {
363+ if err := manager .UpdateDaemonNoLock (& new ); err != nil {
351364 return err
352365 }
353366
367+ log .L .Infof ("Upgraded daemon success on socket %s" , new .GetAPISock ())
368+
354369 return nil
355370}
356371
0 commit comments