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)