From 9936370fef80cc532e79f0c5d49e6219bd824bb5 Mon Sep 17 00:00:00 2001 From: "Justin Terry (VM)" Date: Thu, 2 Aug 2018 11:20:35 -0700 Subject: [PATCH] Refactors the TasksService requires per platform Removes the start dependency on V1 runtimes in the TasksService for: // +build windows_v2. For unix and windows (v1) this code remains to load all v1 runtimes as expected. Signed-off-by: Justin Terry (VM) --- services/tasks/local.go | 28 +++------------ services/tasks/local_unix.go | 56 ++++++++++++++++++++++++++++++ services/tasks/local_windows_v2.go | 35 +++++++++++++++++++ 3 files changed, 96 insertions(+), 23 deletions(-) create mode 100644 services/tasks/local_unix.go create mode 100644 services/tasks/local_windows_v2.go diff --git a/services/tasks/local.go b/services/tasks/local.go index d01cdbfc3..74e7c1bee 100644 --- a/services/tasks/local.go +++ b/services/tasks/local.go @@ -60,20 +60,15 @@ var ( func init() { plugin.Register(&plugin.Registration{ - Type: plugin.ServicePlugin, - ID: services.TasksService, - Requires: []plugin.Type{ - plugin.RuntimePlugin, - plugin.RuntimePluginV2, - plugin.MetadataPlugin, - plugin.TaskMonitorPlugin, - }, - InitFn: initFunc, + Type: plugin.ServicePlugin, + ID: services.TasksService, + Requires: tasksServiceRequires, + InitFn: initFunc, }) } func initFunc(ic *plugin.InitContext) (interface{}, error) { - rt, err := ic.GetByType(plugin.RuntimePlugin) + runtimes, err := loadV1Runtimes(ic) if err != nil { return nil, err } @@ -87,20 +82,7 @@ func initFunc(ic *plugin.InitContext) (interface{}, error) { if err != nil { return nil, err } - runtimes := make(map[string]runtime.PlatformRuntime) - for _, rr := range rt { - ri, err := rr.Instance() - if err != nil { - log.G(ic.Context).WithError(err).Warn("could not load runtime instance due to initialization error") - continue - } - r := ri.(runtime.PlatformRuntime) - runtimes[r.ID()] = r - } - if len(runtimes) == 0 { - return nil, errors.New("no runtimes available to create task service") - } monitor, err := ic.Get(plugin.TaskMonitorPlugin) if err != nil { if !errdefs.IsNotFound(err) { diff --git a/services/tasks/local_unix.go b/services/tasks/local_unix.go new file mode 100644 index 000000000..a52a32e09 --- /dev/null +++ b/services/tasks/local_unix.go @@ -0,0 +1,56 @@ +// +build !windows_v2 + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package tasks + +import ( + "github.com/containerd/containerd/log" + "github.com/containerd/containerd/plugin" + "github.com/containerd/containerd/runtime" + "github.com/pkg/errors" +) + +var tasksServiceRequires = []plugin.Type{ + plugin.RuntimePlugin, + plugin.RuntimePluginV2, + plugin.MetadataPlugin, + plugin.TaskMonitorPlugin, +} + +func loadV1Runtimes(ic *plugin.InitContext) (map[string]runtime.PlatformRuntime, error) { + rt, err := ic.GetByType(plugin.RuntimePlugin) + if err != nil { + return nil, err + } + + runtimes := make(map[string]runtime.PlatformRuntime) + for _, rr := range rt { + ri, err := rr.Instance() + if err != nil { + log.G(ic.Context).WithError(err).Warn("could not load runtime instance due to initialization error") + continue + } + r := ri.(runtime.PlatformRuntime) + runtimes[r.ID()] = r + } + + if len(runtimes) == 0 { + return nil, errors.New("no runtimes available to create task service") + } + return runtimes, nil +} diff --git a/services/tasks/local_windows_v2.go b/services/tasks/local_windows_v2.go new file mode 100644 index 000000000..9e846ad04 --- /dev/null +++ b/services/tasks/local_windows_v2.go @@ -0,0 +1,35 @@ +// +build windows,windows_v2 + +/* + Copyright The containerd Authors. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +package tasks + +import ( + "github.com/containerd/containerd/plugin" + "github.com/containerd/containerd/runtime" +) + +var tasksServiceRequires = []plugin.Type{ + plugin.RuntimePluginV2, + plugin.MetadataPlugin, + plugin.TaskMonitorPlugin, +} + +// loadV1Runtimes on Windows V2 returns an empty map. There are no v1 runtimes +func loadV1Runtimes(ic *plugin.InitContext) (map[string]runtime.PlatformRuntime, error) { + return make(map[string]runtime.PlatformRuntime), nil +}