Skip to content

Commit

Permalink
system: retain shared daemon when live upgrade
Browse files Browse the repository at this point in the history
By this we can use the new daemon to handle the upcomming mounts.

Signed-off-by: Huang Jianan <[email protected]>
  • Loading branch information
mofishzz committed Feb 27, 2023
1 parent 93b0e9e commit 038023a
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 23 deletions.
6 changes: 3 additions & 3 deletions pkg/filesystem/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ type Filesystem struct {
rootMountpoint string
}

func (fs *Filesystem) tryRetainSharedDaemon(d *daemon.Daemon) {
func (fs *Filesystem) TryRetainSharedDaemon(d *daemon.Daemon) {
// FsDriver can be changed between two startups.
if d.HostMountpoint() == fs.rootMountpoint || config.GetFsDriver() == config.FsDriverFscache {
fs.sharedDaemon = d
Expand Down Expand Up @@ -110,13 +110,13 @@ func NewFileSystem(ctx context.Context, opt ...NewFSOpt) (*Filesystem, error) {

// Found shared daemon
// Fscache userspace daemon has no host mountpoint.
fs.tryRetainSharedDaemon(d)
fs.TryRetainSharedDaemon(d)

}

for _, d := range liveDaemons {
// Found shared daemon
fs.tryRetainSharedDaemon(d)
fs.TryRetainSharedDaemon(d)
}

return &fs, nil
Expand Down
8 changes: 7 additions & 1 deletion pkg/system/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/containerd/nydus-snapshotter/pkg/daemon"
"github.com/containerd/nydus-snapshotter/pkg/daemon/types"
"github.com/containerd/nydus-snapshotter/pkg/errdefs"
"github.com/containerd/nydus-snapshotter/pkg/filesystem"
"github.com/containerd/nydus-snapshotter/pkg/manager"
metrics "github.com/containerd/nydus-snapshotter/pkg/metrics/tool"
)
Expand All @@ -50,6 +51,7 @@ const defaultErrorCode string = "Unknown"
// 3. Rolling update
// 4. Daemons failures record as metrics
type Controller struct {
fs *filesystem.Filesystem
manager *manager.Manager
// httpSever *http.Server
addr *net.UnixAddr
Expand Down Expand Up @@ -117,7 +119,7 @@ type rafsInstanceInfo struct {
ImageID string `json:"image_id"`
}

func NewSystemController(manager *manager.Manager, sock string) (*Controller, error) {
func NewSystemController(fs *filesystem.Filesystem, manager *manager.Manager, sock string) (*Controller, error) {
if err := os.MkdirAll(filepath.Dir(sock), os.ModePerm); err != nil {
return nil, err
}
Expand All @@ -134,6 +136,7 @@ func NewSystemController(manager *manager.Manager, sock string) (*Controller, er
}

sc := Controller{
fs: fs,
manager: manager,
addr: addr,
router: mux.NewRouter(),
Expand Down Expand Up @@ -293,6 +296,7 @@ func (sc *Controller) upgradeNydusDaemon(d *daemon.Daemon, c upgradeRequest) err
log.L.Infof("Upgrading nydusd %s, request %v", d.ID(), c)

manager := sc.manager
fs := sc.fs

var new daemon.Daemon
new.States = d.States
Expand Down Expand Up @@ -337,6 +341,8 @@ func (sc *Controller) upgradeNydusDaemon(d *daemon.Daemon, c upgradeRequest) err
return errors.Wrap(err, "old daemon exits")
}

fs.TryRetainSharedDaemon(&new)

if err := new.Start(); err != nil {
return errors.Wrap(err, "start file system service")
}
Expand Down
38 changes: 19 additions & 19 deletions snapshot/snapshot.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ import (
"github.com/containerd/nydus-snapshotter/pkg/metrics"
"github.com/containerd/nydus-snapshotter/pkg/metrics/collector"
"github.com/containerd/nydus-snapshotter/pkg/pprof"
"github.com/containerd/nydus-snapshotter/pkg/system"

"github.com/containerd/nydus-snapshotter/pkg/resolve"
"github.com/containerd/nydus-snapshotter/pkg/store"
"github.com/containerd/nydus-snapshotter/pkg/system"

"github.com/containerd/nydus-snapshotter/pkg/filesystem"
"github.com/containerd/nydus-snapshotter/pkg/label"
Expand Down Expand Up @@ -122,24 +122,6 @@ func NewSnapshotter(ctx context.Context, cfg *config.SnapshotterConfig) (snapsho
}()
}

if config.IsSystemControllerEnabled() {
systemController, err := system.NewSystemController(manager, config.SystemControllerAddress())
if err != nil {
return nil, errors.Wrap(err, "create system controller")
}
go func() {
if err := systemController.Run(); err != nil {
log.L.WithError(err).Error("Failed to start system controller")
}
}()
pprofAddress := config.SystemControllerPprofAddress()
if pprofAddress != "" {
if err := pprof.NewPprofHTTPListener(pprofAddress); err != nil {
return nil, errors.Wrap(err, "Failed to start pprof HTTP server")
}
}
}

opts := []filesystem.NewFSOpt{
filesystem.WithManager(manager),
filesystem.WithNydusImageBinaryPath(cfg.DaemonConfig.NydusdPath),
Expand Down Expand Up @@ -169,6 +151,24 @@ func NewSnapshotter(ctx context.Context, cfg *config.SnapshotterConfig) (snapsho
return nil, errors.Wrap(err, "failed to initialize nydus filesystem")
}

if config.IsSystemControllerEnabled() {
systemController, err := system.NewSystemController(nydusFs, manager, config.SystemControllerAddress())
if err != nil {
return nil, errors.Wrap(err, "create system controller")
}
go func() {
if err := systemController.Run(); err != nil {
log.L.WithError(err).Error("Failed to start system controller")
}
}()
pprofAddress := config.SystemControllerPprofAddress()
if pprofAddress != "" {
if err := pprof.NewPprofHTTPListener(pprofAddress); err != nil {
return nil, errors.Wrap(err, "Failed to start pprof HTTP server")
}
}
}

// With fuse driver enabled and a fuse daemon configuration with "localfs"
// storage backend, it indicates that a Blobs Manager is needed to download
// blobs from registry alone with no help of nydusd or containerd.
Expand Down

0 comments on commit 038023a

Please sign in to comment.