diff --git a/config/config.go b/config/config.go index 672e072781..8505175a66 100644 --- a/config/config.go +++ b/config/config.go @@ -109,6 +109,7 @@ const ( type Experimental struct { EnableStargz bool `toml:"enable_stargz"` EnableReferrerDetect bool `toml:"enable_referrer_detect"` + EnableConfigSource bool `toml:"enable_config_source"` } type CgroupConfig struct { diff --git a/config/daemonconfig/daemonconfig.go b/config/daemonconfig/daemonconfig.go index cfee3d54d9..e50f960327 100644 --- a/config/daemonconfig/daemonconfig.go +++ b/config/daemonconfig/daemonconfig.go @@ -125,6 +125,9 @@ type DeviceConfig struct { // We don't have to persist configuration file for fscache since its configuration // is passed through HTTP API. func DumpConfigFile(c interface{}, path string) error { + if config.IsConfigSourceEnabled() { + return nil + } b, err := json.Marshal(c) if err != nil { return errors.Wrapf(err, "marshal config") diff --git a/config/global.go b/config/global.go index 2947703b5b..57785e9dc8 100644 --- a/config/global.go +++ b/config/global.go @@ -107,6 +107,10 @@ func GetDaemonProfileCPUDuration() int64 { return globalConfig.origin.SystemControllerConfig.DebugConfig.ProfileDuration } +func IsConfigSourceEnabled() bool { + return globalConfig.origin.Experimental.EnableConfigSource && globalConfig.origin.SystemControllerConfig.Enable +} + func ProcessConfigurations(c *SnapshotterConfig) error { if c.LoggingConfig.LogDir == "" { c.LoggingConfig.LogDir = filepath.Join(c.Root, logging.DefaultLogDirName) diff --git a/pkg/daemon/command/command.go b/pkg/daemon/command/command.go index d50d71ac47..ae62526220 100644 --- a/pkg/daemon/command/command.go +++ b/pkg/daemon/command/command.go @@ -10,7 +10,6 @@ import ( "fmt" "reflect" "strconv" - "strings" "github.com/pkg/errors" ) @@ -124,20 +123,15 @@ func WithThreadNum(num int) Opt { } } -func WithConfig(id string) Opt { +func WithConfig(config string) Opt { return func(cmd *DaemonCommand) { - config := strings.Replace("/api/v1/daemons/{id}/config", "{id}", id, 1) cmd.Config = config } } func WithConfigSource(source string) Opt { return func(cmd *DaemonCommand) { - if source == "" { - cmd.ConfigSource = "/run/containerd-nydus/system.sock" - } else { - cmd.ConfigSource = source - } + cmd.ConfigSource = source } } diff --git a/pkg/manager/daemon_adaptor.go b/pkg/manager/daemon_adaptor.go index b3acb0f281..2ab3279502 100644 --- a/pkg/manager/daemon_adaptor.go +++ b/pkg/manager/daemon_adaptor.go @@ -7,6 +7,7 @@ package manager import ( + "fmt" "os" "os/exec" "strings" @@ -25,6 +26,8 @@ import ( metrics "github.com/containerd/nydus-snapshotter/pkg/metrics/tool" ) +const endpointGetDaemonConfig string = "/api/v1/daemons/%s/config" + // Fork the nydusd daemon with the process PID decided func (m *Manager) StartDaemon(d *daemon.Daemon) error { cmd, err := m.BuildDaemonCommand(d, "", false) @@ -145,11 +148,20 @@ func (m *Manager) BuildDaemonCommand(d *daemon.Daemon, bin string, upgrade bool) return nil, errors.Wrapf(err, "locate bootstrap %s", bootstrap) } - cmdOpts = append(cmdOpts, - command.WithConfig(d.States.ID), - command.WithConfigSource(""), - command.WithBootstrap(bootstrap), - ) + if config.IsConfigSourceEnabled() { + configApiPath := fmt.Sprintf(endpointGetDaemonConfig, d.States.ID) + cmdOpts = append(cmdOpts, + command.WithConfig(configApiPath), + command.WithConfigSource(config.SystemControllerAddress()), + command.WithBootstrap(bootstrap), + ) + } else { + configFilePath := d.ConfigFile("") + cmdOpts = append(cmdOpts, + command.WithConfig(configFilePath), + command.WithBootstrap(bootstrap), + ) + } default: return nil, errors.Errorf("invalid daemon mode %s ", d.States.DaemonMode) }