You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ti...@apache.org on 2014/11/04 01:16:24 UTC

git commit: Updated Modules protobuf to simplify JSON parsing.

Repository: mesos
Updated Branches:
  refs/heads/master a425e0037 -> 0abfbd48b


Updated Modules protobuf to simplify JSON parsing.

Updates the --modules help messages accordingly.

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


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

Branch: refs/heads/master
Commit: 0abfbd48b78fb6605a3b662e27a2cfdc7de750df
Parents: a425e00
Author: Kapil Arya <ka...@mesosphere.io>
Authored: Tue Nov 4 00:50:40 2014 +0100
Committer: Till Toenshoff <to...@me.com>
Committed: Tue Nov 4 00:50:41 2014 +0100

----------------------------------------------------------------------
 src/master/flags.hpp        |  4 +-
 src/messages/messages.proto |  4 +-
 src/module/manager.cpp      |  5 ++-
 src/slave/flags.hpp         |  4 +-
 src/tests/flags.hpp         |  4 +-
 src/tests/module_tests.cpp  | 92 ++++++++++++++++++++++++++++++++--------
 6 files changed, 87 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0abfbd48/src/master/flags.hpp
----------------------------------------------------------------------
diff --git a/src/master/flags.hpp b/src/master/flags.hpp
index a144db0..1cea50c 100644
--- a/src/master/flags.hpp
+++ b/src/master/flags.hpp
@@ -325,10 +325,10 @@ public:
         "      \"modules\": [\n"
         "        {\n"
         "          \"name\": \"org_apache_mesos_bar\",\n"
-        "          \"flags\": [\n"
+        "          \"parameters\": [\n"
         "            {\n"
         "              \"key\": \"X\",\n"
-        "              \"value\": \"Y\",\n"
+        "              \"value\": \"Y\"\n"
         "            }\n"
         "          ]\n"
         "        },\n"

http://git-wip-us.apache.org/repos/asf/mesos/blob/0abfbd48/src/messages/messages.proto
----------------------------------------------------------------------
diff --git a/src/messages/messages.proto b/src/messages/messages.proto
index 76e3980..de0e2a2 100644
--- a/src/messages/messages.proto
+++ b/src/messages/messages.proto
@@ -441,8 +441,8 @@ message Modules {
       // Module name.
       optional string name = 1;
 
-      // Module specific flags.
-      optional Parameters parameters = 2;
+      // Module-specific parameters.
+      repeated Parameter parameters = 2;
     }
 
     repeated Module modules = 3;

http://git-wip-us.apache.org/repos/asf/mesos/blob/0abfbd48/src/module/manager.cpp
----------------------------------------------------------------------
diff --git a/src/module/manager.cpp b/src/module/manager.cpp
index 3062c41..0d71e33 100644
--- a/src/module/manager.cpp
+++ b/src/module/manager.cpp
@@ -231,7 +231,10 @@ Try<Nothing> ModuleManager::load(const Modules& modules)
       }
 
       moduleBases[moduleName] = (ModuleBase*) symbol.get();
-      moduleParameters[moduleName] = module.parameters();
+
+      // Now copy the supplied module-specific parameters.
+      moduleParameters[moduleName].mutable_parameter()->CopyFrom(
+          module.parameters());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/0abfbd48/src/slave/flags.hpp
----------------------------------------------------------------------
diff --git a/src/slave/flags.hpp b/src/slave/flags.hpp
index 319c002..838ca85 100644
--- a/src/slave/flags.hpp
+++ b/src/slave/flags.hpp
@@ -381,10 +381,10 @@ public:
         "      \"modules\": [\n"
         "        {\n"
         "          \"name\": \"org_apache_mesos_bar\",\n"
-        "          \"flags\": [\n"
+        "          \"parameters\": [\n"
         "            {\n"
         "              \"key\": \"X\",\n"
-        "              \"value\": \"Y\",\n"
+        "              \"value\": \"Y\"\n"
         "            }\n"
         "          ]\n"
         "        },\n"

http://git-wip-us.apache.org/repos/asf/mesos/blob/0abfbd48/src/tests/flags.hpp
----------------------------------------------------------------------
diff --git a/src/tests/flags.hpp b/src/tests/flags.hpp
index e988b6f..0b30083 100644
--- a/src/tests/flags.hpp
+++ b/src/tests/flags.hpp
@@ -100,10 +100,10 @@ public:
         "      \"modules\": [\n"
         "        {\n"
         "          \"name\": \"org_apache_mesos_bar\",\n"
-        "          \"flags\": [\n"
+        "          \"parameters\": [\n"
         "            {\n"
         "              \"key\": \"X\",\n"
-        "              \"value\": \"Y\",\n"
+        "              \"value\": \"Y\"\n"
         "            }\n"
         "          ]\n"
         "        },\n"

http://git-wip-us.apache.org/repos/asf/mesos/blob/0abfbd48/src/tests/module_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/module_tests.cpp b/src/tests/module_tests.cpp
index e079dbe..df30e16 100644
--- a/src/tests/module_tests.cpp
+++ b/src/tests/module_tests.cpp
@@ -21,6 +21,7 @@
 #include <stout/dynamiclibrary.hpp>
 #include <stout/os.hpp>
 
+#include "common/parse.hpp"
 #include "examples/test_module.hpp"
 #include "module/isolator.hpp"
 #include "module/manager.hpp"
@@ -129,30 +130,63 @@ string ModuleTest::originalLdLibraryPath;
 string ModuleTest::libraryDirectory;
 
 
-static Modules getModules(
-    const string& libraryName,
-    const string& moduleName,
-    const string& parameterKey = "",
-    const string& parameterValue = "")
+static Modules getModules(const string& libraryName, const string& moduleName)
 {
   Modules modules;
   Modules::Library* library = modules.add_libraries();
   library->set_file(os::libraries::expandName(libraryName));
   Modules::Library::Module* module = library->add_modules();
   module->set_name(moduleName);
-  if (!parameterKey.empty() || !parameterValue.empty()) {
-    Parameter* parameter = module->mutable_parameters()->add_parameter();
-    if (!parameterKey.empty()) {
-      parameter->set_key(parameterKey);
-    }
-    if (!parameterValue.empty()) {
-      parameter->set_value(parameterValue);
-    }
-  }
   return modules;
 }
 
 
+static Modules getModules(
+    const string& libraryName,
+    const string& moduleName,
+    const string& parameterKey,
+    const string& parameterValue)
+{
+  Modules modules = getModules(libraryName, moduleName);
+  Modules::Library* library = modules.mutable_libraries(0);
+  Modules::Library::Module* module = library->mutable_modules(0);
+  Parameter* parameter = module->add_parameters();
+  parameter->set_key(parameterKey);
+  parameter->set_value(parameterValue);
+  return modules;
+}
+
+
+static Try<Modules> getModulesFromJson(
+    const string& libraryName,
+    const string& moduleName,
+    const string& parameterKey,
+    const string& parameterValue)
+{
+  string jsonString =
+    "{\n"
+    "  \"libraries\": [\n"
+    "    {\n"
+    "      \"file\": \"" + os::libraries::expandName(libraryName) + "\",\n"
+    "      \"modules\": [\n"
+    "        {\n"
+    "          \"name\": \"" + moduleName + "\",\n"
+    "          \"parameters\": [\n"
+    "            {\n"
+    "              \"key\": \"" + parameterKey + "\",\n"
+    "              \"value\": \"" + parameterValue + "\"\n"
+    "            }\n"
+    "          ]\n"
+    "        }\n"
+    "      ]\n"
+    "    }\n"
+    "  ]\n"
+    "}";
+
+  return flags::parse<Modules>(jsonString);
+}
+
+
 // Test that a module library gets loaded,  and its contents
 // version-verified. The provided test library matches the current
 // Mesos version exactly.
@@ -177,8 +211,11 @@ TEST_F(ModuleTest, ExampleModuleLoadTest)
 // Test passing parameter without value.
 TEST_F(ModuleTest, ParameterWithoutValue)
 {
-  Modules modules =
-    getModules(DEFAULT_MODULE_LIBRARY_NAME, DEFAULT_MODULE_NAME, "operation");
+  Modules modules = getModules(
+      DEFAULT_MODULE_LIBRARY_NAME,
+      DEFAULT_MODULE_NAME,
+      "operation",
+      "");
 
   EXPECT_SOME(ModuleManager::load(modules));
   module = ModuleManager::create<TestModule>(DEFAULT_MODULE_NAME);
@@ -209,7 +246,10 @@ TEST_F(ModuleTest, ParameterWithoutKey)
 
   EXPECT_SOME(ModuleManager::load(modules));
   module = ModuleManager::create<TestModule>(DEFAULT_MODULE_NAME);
-  EXPECT_ERROR(module);
+  EXPECT_SOME(module);
+
+  // Since there was no valid key, baz() should return -1.
+  EXPECT_EQ(module.get()->baz(5, 10), -1);
 }
 
 
@@ -245,6 +285,24 @@ TEST_F(ModuleTest, ValidParameters)
 }
 
 
+// Test Json parsing to generate Modules protobuf.
+TEST_F(ModuleTest, JsonParseTest)
+{
+  Try<Modules> modules = getModulesFromJson(
+      DEFAULT_MODULE_LIBRARY_NAME,
+      DEFAULT_MODULE_NAME,
+      "operation",
+      "sum");
+  EXPECT_SOME(modules);
+
+  EXPECT_SOME(ModuleManager::load(modules.get()));
+  module = ModuleManager::create<TestModule>(DEFAULT_MODULE_NAME);
+  EXPECT_SOME(module);
+
+  EXPECT_EQ(module.get()->baz(5, 10), 15);
+}
+
+
 // Test that unloading a module succeeds if it has not been unloaded
 // already.  Unloading unknown modules should fail as well.
 TEST_F(ModuleTest, ExampleModuleUnloadTest)