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 <[email protected]> Authored: Tue Nov 4 00:50:40 2014 +0100 Committer: Till Toenshoff <[email protected]> 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)
