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