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

git commit: Added --module flag for Mesos master.

Repository: mesos
Updated Branches:
  refs/heads/master 88b56261e -> 913b65326


Added --module flag for Mesos master.

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


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

Branch: refs/heads/master
Commit: 913b653268d8622bd2ec3c251fc92f8cbc1c8671
Parents: 88b5626
Author: Kapil Arya <ka...@mesosphere.io>
Authored: Fri Oct 10 15:33:22 2014 -0700
Committer: Niklas Q. Nielsen <ni...@mesosphere.io>
Committed: Fri Oct 10 16:03:07 2014 -0700

----------------------------------------------------------------------
 src/common/parse.hpp      | 16 ++++++++++++++++
 src/common/type_utils.hpp |  8 ++++++++
 src/master/flags.hpp      | 27 +++++++++++++++++++++++++++
 src/master/main.cpp       | 12 ++++++++++++
 src/module/manager.hpp    |  5 +++--
 5 files changed, 66 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/913b6532/src/common/parse.hpp
----------------------------------------------------------------------
diff --git a/src/common/parse.hpp b/src/common/parse.hpp
index e6153d8..c9ca30f 100644
--- a/src/common/parse.hpp
+++ b/src/common/parse.hpp
@@ -23,6 +23,8 @@
 
 #include <stout/flags/parse.hpp>
 
+#include "messages/messages.hpp"
+
 namespace flags {
 
 template<>
@@ -52,6 +54,20 @@ inline Try<mesos::RateLimits> parse(const std::string& value)
   return protobuf::parse<mesos::RateLimits>(json.get());
 }
 
+
+template<>
+inline Try<mesos::internal::Modules> parse(const std::string& value)
+{
+  // Convert from string or file to JSON.
+  Try<JSON::Object> json = parse<JSON::Object>(value);
+  if (json.isError()) {
+    return Error(json.error());
+  }
+
+  // Convert from JSON to Protobuf.
+  return protobuf::parse<mesos::internal::Modules>(json.get());
+}
+
 } // namespace flags {
 
 #endif // __COMMON_PARSE_HPP__

http://git-wip-us.apache.org/repos/asf/mesos/blob/913b6532/src/common/type_utils.hpp
----------------------------------------------------------------------
diff --git a/src/common/type_utils.hpp b/src/common/type_utils.hpp
index 480c088..f10b2d3 100644
--- a/src/common/type_utils.hpp
+++ b/src/common/type_utils.hpp
@@ -340,6 +340,14 @@ inline std::ostream& operator << (
     << StatusUpdateRecord::Type_descriptor()->FindValueByNumber(type)->name();
 }
 
+
+inline std::ostream& operator << (
+    std::ostream& stream,
+    const Modules& modules)
+{
+  return stream << modules.DebugString();
+}
+
 } // namespace internal {
 } // namespace mesos {
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/913b6532/src/master/flags.hpp
----------------------------------------------------------------------
diff --git a/src/master/flags.hpp b/src/master/flags.hpp
index b8b59a2..44249f8 100644
--- a/src/master/flags.hpp
+++ b/src/master/flags.hpp
@@ -35,6 +35,8 @@
 
 #include "mesos/mesos.hpp"
 
+#include "messages/messages.hpp"
+
 namespace mesos {
 namespace internal {
 namespace master {
@@ -298,6 +300,30 @@ public:
         "Duration of time before an offer is rescinded from a framework.\n"
         "This helps fairness when running frameworks that hold on to offers,\n"
         "or frameworks that accidentally drop offers.\n");
+
+    add(&Flags::modules,
+        "modules",
+        "List of modules to be loaded and be available to the internal\n"
+        "subsystems.\n"
+        "\n"
+        "Use --module=filepath to specify the list of modules via a\n"
+        "file containing a JSON formatted string. 'filepath' can be\n"
+        "of the form 'file:///path/to/file' or '/path/to/file'.\n"
+        "\n"
+        "Use --module=\"{...}\" to specify the list of modules inline.\n"
+        "\n"
+        "Example:\n"
+        "{\n"
+        "  \"libraries\": [\n"
+        "    {\n"
+        "      \"file\": \"/path/to/libfoo.so\",\n"
+        "      \"modules\": [\n"
+        "        \"org_apache_mesos_bar\",\n"
+        "        \"org_apache_mesos_baz\"\n"
+        "      ]\n"
+        "    }\n"
+        "  ]\n"
+        "}");
   }
 
   bool version;
@@ -327,6 +353,7 @@ public:
   Option<ACLs> acls;
   Option<RateLimits> rate_limits;
   Option<Duration> offer_timeout;
+  Option<Modules> modules;
 
 #ifdef WITH_NETWORK_ISOLATOR
   Option<size_t> max_executors_per_slave;

http://git-wip-us.apache.org/repos/asf/mesos/blob/913b6532/src/master/main.cpp
----------------------------------------------------------------------
diff --git a/src/master/main.cpp b/src/master/main.cpp
index 018f803..72e243a 100644
--- a/src/master/main.cpp
+++ b/src/master/main.cpp
@@ -53,6 +53,8 @@
 #include "master/registrar.hpp"
 #include "master/repairer.hpp"
 
+#include "module/manager.hpp"
+
 #include "state/in_memory.hpp"
 #include "state/log.hpp"
 #include "state/protobuf.hpp"
@@ -141,6 +143,16 @@ int main(int argc, char** argv)
     exit(1);
   }
 
+  // Initialize modules. Note that since other subsystems may depend
+  // upon modules, we should initialize modules before anything else.
+  if (flags.modules.isSome()) {
+    Try<Nothing> result = ModuleManager::load(flags.modules.get());
+    if (result.isError()) {
+      cerr << "Error loading modules: " << result.error() << endl;
+      exit(1);
+    }
+  }
+
   // Initialize libprocess.
   if (ip.isSome()) {
     os::setenv("LIBPROCESS_IP", ip.get());

http://git-wip-us.apache.org/repos/asf/mesos/blob/913b6532/src/module/manager.hpp
----------------------------------------------------------------------
diff --git a/src/module/manager.hpp b/src/module/manager.hpp
index 8275fd0..797728a 100644
--- a/src/module/manager.hpp
+++ b/src/module/manager.hpp
@@ -27,6 +27,9 @@
 
 #include <glog/logging.h>
 
+#include <mesos/mesos.hpp>
+#include <mesos/module.hpp>
+
 #include <messages/messages.hpp>
 
 #include <process/owned.hpp>
@@ -37,8 +40,6 @@
 
 #include "common/lock.hpp"
 
-#include "mesos/mesos.hpp"
-
 namespace mesos {
 namespace internal {