From 7dc4594b3232c56ee751a82c217ee0be40b7596f Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Tue, 9 Apr 2019 21:24:57 +0000 Subject: [PATCH] Add InitializeFSContext hook to plugins --- container/containerd/plugin.go | 4 ++++ container/crio/plugin.go | 4 ++++ container/docker/plugin.go | 4 ++++ container/factory.go | 17 +++++++++++++++++ container/mesos/plugin.go | 4 ++++ container/rkt/plugin.go | 4 ++++ container/systemd/plugin.go | 4 ++++ manager/manager.go | 5 +++++ 8 files changed, 46 insertions(+) diff --git a/container/containerd/plugin.go b/container/containerd/plugin.go index a7dca6e5..9d42b5d4 100644 --- a/container/containerd/plugin.go +++ b/container/containerd/plugin.go @@ -28,6 +28,10 @@ func NewPlugin() container.Plugin { type plugin struct{} +func (p *plugin) InitializeFSContext(context *fs.Context) error { + return nil +} + func (p *plugin) Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { err := Register(factory, fsInfo, includedMetrics) return nil, err diff --git a/container/crio/plugin.go b/container/crio/plugin.go index 12116dc9..612bcbf5 100644 --- a/container/crio/plugin.go +++ b/container/crio/plugin.go @@ -28,6 +28,10 @@ func NewPlugin() container.Plugin { type plugin struct{} +func (p *plugin) InitializeFSContext(context *fs.Context) error { + return nil +} + func (p *plugin) Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { err := Register(factory, fsInfo, includedMetrics) return nil, err diff --git a/container/docker/plugin.go b/container/docker/plugin.go index 9fd97182..63938db8 100644 --- a/container/docker/plugin.go +++ b/container/docker/plugin.go @@ -28,6 +28,10 @@ func NewPlugin() container.Plugin { type plugin struct{} +func (p *plugin) InitializeFSContext(context *fs.Context) error { + return nil +} + func (p *plugin) Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { err := Register(factory, fsInfo, includedMetrics) return nil, err diff --git a/container/factory.go b/container/factory.go index 4094f6cb..e3d0ff3c 100644 --- a/container/factory.go +++ b/container/factory.go @@ -78,6 +78,10 @@ var pluginsLock sync.Mutex var plugins = make(map[string]Plugin) type Plugin interface { + // InitializeFSContext is invoked when populating an fs.Context object for a new manager. + // A returned error here is fatal. + InitializeFSContext(context *fs.Context) error + // Register is invoked when starting a manager. It can optionally return a container watcher. // A returned error is logged, but is not fatal. Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics MetricSet) (watcher.ContainerWatcher, error) @@ -94,6 +98,19 @@ func RegisterPlugin(name string, plugin Plugin) error { return nil } +func InitializeFSContext(context *fs.Context) error { + pluginsLock.Lock() + defer pluginsLock.Unlock() + for name, plugin := range plugins { + err := plugin.InitializeFSContext(context) + if err != nil { + klog.V(5).Infof("Initialization of the %s context failed: %v", name, err) + return err + } + } + return nil +} + func InitializePlugins(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics MetricSet) []watcher.ContainerWatcher { pluginsLock.Lock() defer pluginsLock.Unlock() diff --git a/container/mesos/plugin.go b/container/mesos/plugin.go index 63ce2a35..3f327ddb 100644 --- a/container/mesos/plugin.go +++ b/container/mesos/plugin.go @@ -28,6 +28,10 @@ func NewPlugin() container.Plugin { type plugin struct{} +func (p *plugin) InitializeFSContext(context *fs.Context) error { + return nil +} + func (p *plugin) Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { err := Register(factory, fsInfo, includedMetrics) return nil, err diff --git a/container/rkt/plugin.go b/container/rkt/plugin.go index d3e7440c..08970d79 100644 --- a/container/rkt/plugin.go +++ b/container/rkt/plugin.go @@ -28,6 +28,10 @@ func NewPlugin() container.Plugin { type plugin struct{} +func (p *plugin) InitializeFSContext(context *fs.Context) error { + return nil +} + func (p *plugin) Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { err := Register(factory, fsInfo, includedMetrics) if err != nil { diff --git a/container/systemd/plugin.go b/container/systemd/plugin.go index d0538821..28801a63 100644 --- a/container/systemd/plugin.go +++ b/container/systemd/plugin.go @@ -28,6 +28,10 @@ func NewPlugin() container.Plugin { type plugin struct{} +func (p *plugin) InitializeFSContext(context *fs.Context) error { + return nil +} + func (p *plugin) Register(factory info.MachineInfoFactory, fsInfo fs.FsInfo, includedMetrics container.MetricSet) (watcher.ContainerWatcher, error) { err := Register(factory, fsInfo, includedMetrics) return nil, err diff --git a/manager/manager.go b/manager/manager.go index b90b1860..a234d8ff 100644 --- a/manager/manager.go +++ b/manager/manager.go @@ -184,6 +184,11 @@ func New(memoryCache *memory.InMemoryCache, sysfs sysfs.SysFs, maxHousekeepingIn Root: crioInfo.StorageRoot, }, } + + if err := container.InitializeFSContext(&context); err != nil { + return nil, err + } + fsInfo, err := fs.NewFsInfo(context) if err != nil { return nil, err