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;
 };