Repository: mesos Updated Branches: refs/heads/master 17a1e58d3 -> 0eec82f3b
Added appcManifest to ImageInfo and ProvisionInfo. Review: https://reviews.apache.org/r/49232/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0eec82f3 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0eec82f3 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0eec82f3 Branch: refs/heads/master Commit: 0eec82f3b769ce26ccc31fbfb2777e3991864a9f Parents: 17a1e58 Author: Srinivas Brahmaroutu <srbra...@us.ibm.com> Authored: Fri Jul 22 15:23:09 2016 -0700 Committer: Jie Yu <yujie....@gmail.com> Committed: Fri Jul 22 15:23:09 2016 -0700 ---------------------------------------------------------------------- src/slave/containerizer/mesos/containerizer.cpp | 15 +++++++++++++++ .../containerizer/mesos/provisioner/appc/store.cpp | 17 ++++++++++++++--- .../mesos/provisioner/provisioner.cpp | 6 ++++-- .../mesos/provisioner/provisioner.hpp | 5 +++++ .../containerizer/mesos/provisioner/store.hpp | 5 +++++ 5 files changed, 43 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/0eec82f3/src/slave/containerizer/mesos/containerizer.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp index 1c9e17b..86a8d8a 100644 --- a/src/slave/containerizer/mesos/containerizer.cpp +++ b/src/slave/containerizer/mesos/containerizer.cpp @@ -68,6 +68,10 @@ #endif #ifdef __linux__ +#include "slave/containerizer/mesos/isolators/appc/runtime.hpp" +#endif // __linux__ + +#ifdef __linux__ #include "slave/containerizer/mesos/isolators/cgroups/cpushare.hpp" #include "slave/containerizer/mesos/isolators/cgroups/devices.hpp" #include "slave/containerizer/mesos/isolators/cgroups/mem.hpp" @@ -304,6 +308,7 @@ Try<MesosContainerizer*> MesosContainerizer::create( {"cgroups/mem", &CgroupsMemIsolatorProcess::create}, {"cgroups/net_cls", &CgroupsNetClsIsolatorProcess::create}, {"cgroups/perf_event", &CgroupsPerfEventIsolatorProcess::create}, + {"appc/runtime", &AppcRuntimeIsolatorProcess::create}, {"docker/runtime", &DockerRuntimeIsolatorProcess::create}, {"docker/volume", &DockerVolumeIsolatorProcess::create}, @@ -1018,10 +1023,20 @@ Future<list<Option<ContainerLaunchInfo>>> MesosContainerizerProcess::prepare( if (provisionInfo.isSome()) { containerConfig.set_rootfs(provisionInfo->rootfs); + if (provisionInfo->dockerManifest.isSome() && + provisionInfo->appcManifest.isSome()) { + return Failure("Container cannot have both Docker and Appc manifests"); + } + if (provisionInfo->dockerManifest.isSome()) { ContainerConfig::Docker* docker = containerConfig.mutable_docker(); docker->mutable_manifest()->CopyFrom(provisionInfo->dockerManifest.get()); } + + if (provisionInfo->appcManifest.isSome()) { + ContainerConfig::Appc* appc = containerConfig.mutable_appc(); + appc->mutable_manifest()->CopyFrom(provisionInfo->appcManifest.get()); + } } // We prepare the isolators sequentially according to their ordering http://git-wip-us.apache.org/repos/asf/mesos/blob/0eec82f3/src/slave/containerizer/mesos/provisioner/appc/store.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/appc/store.cpp b/src/slave/containerizer/mesos/provisioner/appc/store.cpp index aaa0efe..c27b1b5 100644 --- a/src/slave/containerizer/mesos/provisioner/appc/store.cpp +++ b/src/slave/containerizer/mesos/provisioner/appc/store.cpp @@ -195,9 +195,20 @@ Future<ImageInfo> StoreProcess::get(const Image& image) } return fetchImage(appc, image.cached()) - .then(defer(self(), [=](const vector<string>& imageIds) -> ImageInfo { - vector<string> rootfses; + .then(defer(self(), [=](const vector<string>& imageIds) + -> Future<ImageInfo> { + // Appc image contains the manifest at the top layer and the + // image id is at index 0. + Try<spec::ImageManifest> manifest = spec::getManifest( + paths::getImagePath(rootDir, imageIds.at(0))); + + if (manifest.isError()) { + return Failure( + "Failed to get manifest for Appc image '" + + appc.SerializeAsString() + "': " + manifest.error()); + } + vector<string> rootfses; // TODO(jojy): Print a warning if there are duplicated image ids // in the list. The semantics is weird when there are duplicated // image ids in the list. Appc spec does not discuss this @@ -206,7 +217,7 @@ Future<ImageInfo> StoreProcess::get(const Image& image) rootfses.emplace_back(paths::getImageRootfsPath(rootDir, imageId)); } - return ImageInfo{rootfses, None()}; + return ImageInfo{rootfses, None(), manifest.get()}; })); } http://git-wip-us.apache.org/repos/asf/mesos/blob/0eec82f3/src/slave/containerizer/mesos/provisioner/provisioner.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/provisioner.cpp b/src/slave/containerizer/mesos/provisioner/provisioner.cpp index 6825742..40ee1da 100644 --- a/src/slave/containerizer/mesos/provisioner/provisioner.cpp +++ b/src/slave/containerizer/mesos/provisioner/provisioner.cpp @@ -332,7 +332,8 @@ Future<ProvisionInfo> ProvisionerProcess::__provision( // to be handled, and this excludes any image using the bind // backend. if (imageInfo.layers.size() == 1 || image.type() != Image::DOCKER) { - return ProvisionInfo{rootfs, imageInfo.dockerManifest}; + return ProvisionInfo{ + rootfs, imageInfo.dockerManifest, imageInfo.appcManifest}; } #ifndef __WINDOWS__ @@ -398,7 +399,8 @@ Future<ProvisionInfo> ProvisionerProcess::__provision( } } - return ProvisionInfo{rootfs, imageInfo.dockerManifest}; + return ProvisionInfo{ + rootfs, imageInfo.dockerManifest, None()}; #else return ProvisionInfo{ rootfs, imageInfo.dockerManifest }; #endif // __WINDOWS__ http://git-wip-us.apache.org/repos/asf/mesos/blob/0eec82f3/src/slave/containerizer/mesos/provisioner/provisioner.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/provisioner.hpp b/src/slave/containerizer/mesos/provisioner/provisioner.hpp index 48a0505..8f378f6 100644 --- a/src/slave/containerizer/mesos/provisioner/provisioner.hpp +++ b/src/slave/containerizer/mesos/provisioner/provisioner.hpp @@ -21,6 +21,8 @@ #include <mesos/resources.hpp> +#include <mesos/appc/spec.hpp> + #include <mesos/docker/v1.hpp> #include <mesos/slave/isolator.hpp> // For ContainerState. @@ -58,6 +60,9 @@ struct ProvisionInfo // Docker v1 image manifest. Option<::docker::spec::v1::ImageManifest> dockerManifest; + + // Appc image manifest. + Option<::appc::spec::ImageManifest> appcManifest; }; http://git-wip-us.apache.org/repos/asf/mesos/blob/0eec82f3/src/slave/containerizer/mesos/provisioner/store.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/store.hpp b/src/slave/containerizer/mesos/provisioner/store.hpp index 1d477ef..a312ad9 100644 --- a/src/slave/containerizer/mesos/provisioner/store.hpp +++ b/src/slave/containerizer/mesos/provisioner/store.hpp @@ -22,6 +22,8 @@ #include <mesos/mesos.hpp> +#include <mesos/appc/spec.hpp> + #include <mesos/docker/v1.hpp> #include <process/future.hpp> @@ -43,6 +45,9 @@ struct ImageInfo // Docker v1 image manifest. Option<::docker::spec::v1::ImageManifest> dockerManifest; + + // Appc image manifest. + Option<::appc::spec::ImageManifest> appcManifest; };