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 2014/11/21 01:27:31 UTC
[2/3] mesos git commit: Added validation for Resource objects with
DiskInfo.
Added validation for Resource objects with DiskInfo.
Review: https://reviews.apache.org/r/28258
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c1940a90
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c1940a90
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c1940a90
Branch: refs/heads/master
Commit: c1940a9049d5c2a7afe5200597e49654829e38d2
Parents: f42d250
Author: Jie Yu <yu...@gmail.com>
Authored: Wed Nov 19 12:49:23 2014 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Thu Nov 20 16:10:31 2014 -0800
----------------------------------------------------------------------
src/common/resources.cpp | 28 +++++++++++++++
src/tests/resources_tests.cpp | 74 ++++++++++++++++++++++++++++++++++++++
2 files changed, 102 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/c1940a90/src/common/resources.cpp
----------------------------------------------------------------------
diff --git a/src/common/resources.cpp b/src/common/resources.cpp
index 61d16a8..5cd64ff 100644
--- a/src/common/resources.cpp
+++ b/src/common/resources.cpp
@@ -308,6 +308,34 @@ Option<Error> Resources::validate(const Resource& resource)
return Error("Unsupported resource type");
}
+ // Checks for 'disk' resource.
+ if (resource.has_disk()) {
+ if (resource.name() != "disk") {
+ return Error(
+ "DiskInfo should not be set for " + resource.name() + " resource");
+ }
+
+ if (resource.disk().has_persistence()) {
+ if (resource.role() == "*") {
+ return Error("Persistent disk volume is disallowed for '*' role");
+ }
+
+ if (!resource.disk().has_volume()) {
+ return Error("Persistent disk should specify a volume");
+ }
+ }
+
+ if (resource.disk().has_volume()) {
+ if (resource.disk().volume().mode() == Volume::RO) {
+ return Error("Do not support RO volume in DiskInfo");
+ }
+
+ if (resource.disk().volume().has_host_path()) {
+ return Error("Volume in DiskInfo should not have 'host_path' set");
+ }
+ }
+ }
+
return None();
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/c1940a90/src/tests/resources_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/resources_tests.cpp b/src/tests/resources_tests.cpp
index 73f50ba..3857f8b 100644
--- a/src/tests/resources_tests.cpp
+++ b/src/tests/resources_tests.cpp
@@ -798,3 +798,77 @@ TEST(ResourcesTest, Find)
EXPECT_NONE(resources4.find(targets4));
}
+
+
+class DiskResourcesTest : public ::testing::Test
+{
+public:
+ Resource::DiskInfo createDiskInfo(
+ const Option<string>& persistenceID,
+ const Option<string>& containerPath)
+ {
+ Resource::DiskInfo info;
+
+ if (persistenceID.isSome()) {
+ Resource::DiskInfo::Persistence persistence;
+ persistence.set_id(persistenceID.get());
+ info.mutable_persistence()->CopyFrom(persistence);
+ }
+
+ if (containerPath.isSome()) {
+ Volume volume;
+ volume.set_container_path(containerPath.get());
+ volume.set_mode(Volume::RW);
+ info.mutable_volume()->CopyFrom(volume);
+ }
+
+ return info;
+ }
+
+ Resource createDiskResource(
+ const string& value,
+ const string& role,
+ const Option<string>& persistenceID,
+ const Option<string>& containerPath)
+ {
+ Resource resource = Resources::parse("disk", value, role).get();
+
+ if (persistenceID.isSome() || containerPath.isSome()) {
+ resource.mutable_disk()->CopyFrom(
+ createDiskInfo(persistenceID, containerPath));
+ }
+
+ return resource;
+ }
+};
+
+
+TEST_F(DiskResourcesTest, Validation)
+{
+ Resource cpus = Resources::parse("cpus", "2", "*").get();
+ cpus.mutable_disk()->CopyFrom(createDiskInfo("1", "path"));
+
+ Option<Error> error = Resources::validate(cpus);
+ ASSERT_SOME(error);
+ EXPECT_EQ(
+ "Resource with DiskInfo does not have the name 'disk'",
+ error.get().message);
+
+ error = Resources::validate(createDiskResource("10", "*", "1", "path"));
+ ASSERT_SOME(error);
+ EXPECT_EQ(
+ "Do not allow a persistent disk volume without reservation",
+ error.get().message);
+
+ error = Resources::validate(createDiskResource("10", "role", "1", None()));
+ ASSERT_SOME(error);
+ EXPECT_EQ(
+ "Persistent disk should specify a volume",
+ error.get().message);
+
+ EXPECT_NONE(
+ Resources::validate(createDiskResource("10", "role", "1", "path")));
+
+ EXPECT_NONE(
+ Resources::validate(createDiskResource("10", "*", None(), "path")));
+}