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 2015/12/18 23:40:20 UTC

[6/9] mesos git commit: Implemented docker v1 parse serialization method in spec.

Implemented docker v1 parse serialization method in spec.

Review: https://reviews.apache.org/r/41489/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/a154120d
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/a154120d
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/a154120d

Branch: refs/heads/master
Commit: a154120d45fc684cb579c483bc9219e14fc5e362
Parents: 6fc8f81
Author: Gilbert Song <so...@gmail.com>
Authored: Fri Dec 18 14:13:43 2015 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Dec 18 14:29:59 2015 -0800

----------------------------------------------------------------------
 .../provisioner/docker/registry_client.cpp      |  2 +-
 .../mesos/provisioner/docker/spec.cpp           | 43 ++++++++++++++++++--
 .../mesos/provisioner/docker/spec.hpp           | 23 +++++++++--
 .../containerizer/provisioner_docker_tests.cpp  |  9 ++--
 4 files changed, 66 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/a154120d/src/slave/containerizer/mesos/provisioner/docker/registry_client.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/provisioner/docker/registry_client.cpp b/src/slave/containerizer/mesos/provisioner/docker/registry_client.cpp
index 5bbf0ff..93e7b3b 100644
--- a/src/slave/containerizer/mesos/provisioner/docker/registry_client.cpp
+++ b/src/slave/containerizer/mesos/provisioner/docker/registry_client.cpp
@@ -586,7 +586,7 @@ Future<v2::ImageManifest> RegistryClientProcess::getManifest(
       // This is a good place to validate the manifest.
 
       Try<v2::ImageManifest> manifest =
-        spec::parse(JSON::parse<JSON::Object>(response.body).get());
+        spec::v2::parse(JSON::parse<JSON::Object>(response.body).get());
       if (manifest.isError()) {
         return Failure(
             "Failed to parse manifest response: " + manifest.error());

http://git-wip-us.apache.org/repos/asf/mesos/blob/a154120d/src/slave/containerizer/mesos/provisioner/docker/spec.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/provisioner/docker/spec.cpp b/src/slave/containerizer/mesos/provisioner/docker/spec.cpp
index 97f858a..5bbd98c 100644
--- a/src/slave/containerizer/mesos/provisioner/docker/spec.cpp
+++ b/src/slave/containerizer/mesos/provisioner/docker/spec.cpp
@@ -29,8 +29,43 @@ namespace slave {
 namespace docker {
 namespace spec {
 
-// Validate if the specified image manifest conforms to the Docker spec.
-Option<Error> validateManifest(const docker::v2::ImageManifest& manifest)
+namespace v1 {
+
+// Validate if the specified v1 image manifest conforms to
+// the Docker v1 spec.
+Option<Error> validate(const docker::v1::ImageManifest& manifest)
+{
+  // TODO(gilbert): Add constraints to validate manifest.
+  return None();
+}
+
+
+Try<docker::v1::ImageManifest> parse(const JSON::Object& json)
+{
+  Try<docker::v1::ImageManifest> manifest =
+    protobuf::parse<docker::v1::ImageManifest>(json);
+
+  if (manifest.isError()) {
+    return Error("Protobuf parse failed: " + manifest.error());
+  }
+
+  Option<Error> error = validate(manifest.get());
+  if (error.isSome()) {
+    return Error("Docker v1 Image Manifest Validation failed: " +
+                 error.get().message);
+  }
+
+  return manifest.get();
+}
+
+} // namespace v1 {
+
+
+namespace v2 {
+
+// Validate if the specified v2 image manifest conforms to
+// the Docker v2 spec.
+Option<Error> validate(const docker::v2::ImageManifest& manifest)
 {
   // Validate required fields are present,
   // e.g., repeated fields that has to be >= 1.
@@ -74,7 +109,7 @@ Try<docker::v2::ImageManifest> parse(const JSON::Object& json)
     return Error("Protobuf parse failed: " + manifest.error());
   }
 
-  Option<Error> error = validateManifest(manifest.get());
+  Option<Error> error = validate(manifest.get());
   if (error.isSome()) {
     return Error("Docker v2 Image Manifest Validation failed: " +
                  error.get().message);
@@ -83,6 +118,8 @@ Try<docker::v2::ImageManifest> parse(const JSON::Object& json)
   return manifest.get();
 }
 
+} // namespace v2 {
+
 } // namespace spec {
 } // namespace docker {
 } // namespace slave {

http://git-wip-us.apache.org/repos/asf/mesos/blob/a154120d/src/slave/containerizer/mesos/provisioner/docker/spec.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/provisioner/docker/spec.hpp b/src/slave/containerizer/mesos/provisioner/docker/spec.hpp
index e9e2132..1bd4ac1 100644
--- a/src/slave/containerizer/mesos/provisioner/docker/spec.hpp
+++ b/src/slave/containerizer/mesos/provisioner/docker/spec.hpp
@@ -31,14 +31,31 @@ namespace slave {
 namespace docker {
 namespace spec {
 
-// Validate if the specified image manifest conforms to the Docker spec.
-Option<Error> validateManifest(const docker::v2::ImageManifest& manifest);
+namespace v1 {
 
-// TODO(Gilbert): add validations here, e.g., Manifest, Blob, Layout, ImageID.
+// Validate if the specified v1 image manifest conforms to
+// the Docker v1 spec.
+Option<Error> validate(const docker::v1::ImageManifest& manifest);
+
+// Parse the v1::ImageManifest from the specified JSON object.
+Try<docker::v1::ImageManifest> parse(const JSON::Object& json);
+
+} // namespace v1 {
+
+
+namespace v2 {
+
+// Validate if the specified v2 image manifest conforms to
+// the Docker v2 spec.
+Option<Error> validate(const docker::v2::ImageManifest& manifest);
+
+// TODO(gilbert): Add validations here, e.g., Manifest, Blob, Layout, ImageID.
 
 // Parse the v2::ImageManifest from the specified JSON object.
 Try<docker::v2::ImageManifest> parse(const JSON::Object& json);
 
+} // namespace v2 {
+
 } // namespace spec {
 } // namespace docker {
 } // namespace slave {

http://git-wip-us.apache.org/repos/asf/mesos/blob/a154120d/src/tests/containerizer/provisioner_docker_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/provisioner_docker_tests.cpp b/src/tests/containerizer/provisioner_docker_tests.cpp
index 225e7e9..8a83df5 100644
--- a/src/tests/containerizer/provisioner_docker_tests.cpp
+++ b/src/tests/containerizer/provisioner_docker_tests.cpp
@@ -389,7 +389,7 @@ TEST_F(DockerSpecTest, SerializeV2DockerManifest)
   ASSERT_SOME(json);
 
   Try<slave::docker::v2::ImageManifest> manifest =
-    spec::parse(json.get());
+    spec::v2::parse(json.get());
 
   ASSERT_SOME(manifest);
 
@@ -435,8 +435,9 @@ TEST_F(DockerSpecTest, SerializeV2DockerInvalidManifest)
   Try<JSON::Object> json = JSON::parse<JSON::Object>(stringify(manifestJson));
   ASSERT_SOME(json);
 
+
   Try<slave::docker::v2::ImageManifest> manifest =
-    spec::parse(json.get());
+    spec::v2::parse(json.get());
 
   EXPECT_ERROR(manifest);
 }
@@ -475,7 +476,7 @@ TEST_F(DockerSpecTest, ValidationV2DockerManifestFsLayersNonEmpty)
   ASSERT_SOME(json);
 
   Try<slave::docker::v2::ImageManifest> manifest =
-    spec::parse(json.get());
+    spec::v2::parse(json.get());
 
   EXPECT_ERROR(manifest);
 }
@@ -501,7 +502,7 @@ TEST_F(DockerSpecTest, ValidationV2DockerManifestSignaturesNonEmpty)
   ASSERT_SOME(json);
 
   Try<slave::docker::v2::ImageManifest> manifest =
-    spec::parse(json.get());
+    spec::v2::parse(json.get());
 
   EXPECT_ERROR(manifest);
 }