You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2016/07/22 22:23:18 UTC
mesos git commit: Added appcManifest to ImageInfo and ProvisionInfo.
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 <sr...@us.ibm.com>
Authored: Fri Jul 22 15:23:09 2016 -0700
Committer: Jie Yu <yu...@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;
};