You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2015/06/02 18:22:07 UTC

mesos git commit: Protocol file with the HTTP API messages between executor and slave.

Repository: mesos
Updated Branches:
  refs/heads/master 36ec7f22d -> 8a156c239


Protocol file with the HTTP API messages between executor and slave.

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


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

Branch: refs/heads/master
Commit: 8a156c239ff56a9bb6dc464b77f62db997a40e2e
Parents: 36ec7f2
Author: Alexander Rojas <al...@mesosphere.io>
Authored: Tue Jun 2 09:21:38 2015 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Tue Jun 2 09:21:38 2015 -0700

----------------------------------------------------------------------
 include/mesos/executor/executor.hpp   |  27 +++++
 include/mesos/executor/executor.proto | 171 +++++++++++++++++++++++++++++
 src/Makefile.am                       |  31 ++++++
 3 files changed, 229 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/8a156c23/include/mesos/executor/executor.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/executor/executor.hpp b/include/mesos/executor/executor.hpp
new file mode 100644
index 0000000..85f181c
--- /dev/null
+++ b/include/mesos/executor/executor.hpp
@@ -0,0 +1,27 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __EXECUTOR_PROTO_HPP__
+#define __EXECUTOR_PROTO_HPP__
+
+// NOTE: This header only becomes valid after running protoc
+// and generating the equivalent .ph.h files
+// See: src/messages/mesos.proto
+#include <executor/executor.pb.h>
+
+#endif // __EXECUTOR_PROTO_HPP__

http://git-wip-us.apache.org/repos/asf/mesos/blob/8a156c23/include/mesos/executor/executor.proto
----------------------------------------------------------------------
diff --git a/include/mesos/executor/executor.proto b/include/mesos/executor/executor.proto
new file mode 100644
index 0000000..52c84b3
--- /dev/null
+++ b/include/mesos/executor/executor.proto
@@ -0,0 +1,171 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import "mesos/mesos.proto";
+
+package mesos.executor;
+
+option java_package = "org.apache.mesos.executor";
+option java_outer_classname = "Protos";
+
+
+/**
+ * Executor event API.
+ *
+ * An event is described using the standard protocol buffer "union"
+ * trick, see https://developers.google.com/protocol-buffers/docs/techniques#union.
+ */
+message Event {
+  // Possible event types, followed by message definitions if
+  // applicable.
+  enum Type {
+    SUBSCRIBED = 1;   // See 'Subscribed' below.
+    LAUNCH = 2;       // See 'Launch' below.
+    KILL = 3;         // See 'Kill' below.
+    ACKNOWLEDGED = 4; // See 'Acknowledged' below.
+    MESSAGE = 5;      // See 'Message' below.
+    SHUTDOWN = 6;     // See 'Type' below.
+    ERROR = 7;        // See 'Error' below.
+  }
+
+  // First event received when the executor subscribes.
+  // The 'id' field in the 'framework_info' will be set.
+   message Subscribed {
+    required ExecutorInfo executor_info = 1;
+    required FrameworkInfo framework_info = 2;
+    required SlaveInfo slave_info = 3;
+  }
+
+  // Received when the framework attempts to launch a task. Once
+  // the task is successfuly launched, the executor must respond with
+  // a TASK_RUNNING update (See TaskState in mesos.proto).
+  message Launch {
+    required TaskInfo task = 1;
+  }
+
+  // Received when the scheduler wants to kill a specific task. Once
+  // the task is terminated, the executor should send a TASK_KILLED
+  // (or TASK_FAILED) update. The terminal update is necessary so
+  // Mesos can release the resources associated with the task.
+  message Kill {
+    required TaskID task_id = 1;
+  }
+
+  // Received when the slave acknowledges the receipt of status
+  // update. Schedulers are responsible for explicitly acknowledging
+  // the receipt of status updates that have 'update.status().uuid()'
+  // field set. Unacknowledged updates can be retried by the executor.
+  // They should also be sent by the executor whenever it
+  // re-subscribes.
+  message Acknowledged {
+    required TaskID task_id = 1;
+    required bytes uuid = 2;
+  }
+
+  // Received when a custom message generated by the scheduler is
+  // forwarded by the slave. Note that this message is not
+  // interpreted by Mesos and is only forwarded (without reliability
+  // guarantees) to the executor. It is up to the scheduler to retry
+  // if the message is dropped for any reason.
+  message Message {
+    required bytes data = 1;
+  }
+
+  // Received in case the executor sends invalid calls (e.g.,
+  // required values not set).
+  // TODO(arojas): Remove this once the old executor driver is no
+  // longer supported. With HTTP API all errors will be signaled via
+  // HTTP response codes.
+  message Error {
+    required string message = 1;
+  }
+
+  // Type of the event, indicates which optional field below should be
+  // present if that type has a nested message definition.
+  required Type type = 1;
+
+  optional Subscribed susbcribed = 2;
+  optional Acknowledged acknowledged = 3;
+  optional Launch launch = 4;
+  optional Kill kill = 5;
+  optional Message message = 6;
+  optional Error error = 7;
+}
+
+
+/**
+ * Executor call API.
+ *
+ * Like Event, a Call is described using the standard protocol buffer
+ * "union" trick (see above).
+ */
+ message Call {
+  // Possible call types, followed by message definitions if
+  // applicable.
+  enum Type {
+    SUBSCRIBE = 1;    // See 'executor_info' below.
+    RESUBSCRIBE = 2;  // See 'Resubscribe' below.
+    UPDATE = 3;       // See 'Update' below.
+    MESSAGE = 4;      // See 'Message' below.
+  }
+
+  // Request to resubscribe with the slave. It must include a list of
+  // all the tasks and updates which haven't been acknoledged by the
+  // scheduler.
+  message Resubscribe {
+    repeated TaskInfo tasks = 1;
+    repeated Update updates = 2;
+  }
+
+  // Notifies the scheduler that a task has transitioned from one
+  // state to another. Status updates should be used by executors
+  // to reliably communicate the status of the tasks that they
+  // manage. It is crucial that a terminal update (see TaskState
+  // in mesos.proto) is sent to the scheduler as soon as the task
+  // terminates, in order for Mesos to release the resources allocated
+  // to the task. It is the responsibility of the scheduler to
+  // explicitly acknowledge the receipt of a status update. See
+  // 'Acknowledged' in the 'Events' section above for the semantics.
+  message Update {
+    required TaskStatus status = 1;
+    required double timestamp = 2;
+    required bytes uuid = 3;
+  }
+
+  // Sends arbitrary binary data to the scheduler. Note that Mesos
+  // neither interprets this data nor makes any guarantees about the
+  // delivery of this message to the scheduler.
+  // See 'Message' in the 'Events' section.
+  message Message {
+    required bytes data = 2;
+  }
+
+  // Identifies who generated this call. Always necessary, but the
+  // only thing that needs to be set for certain calls, e.g.,
+  // SUBSCRIBE.
+  required ExecutorInfo executor_info = 1;
+
+  // Type of the call, indicates which optional field below should be
+  // present if that type has a nested message definition.
+  // In case type is SUBSCRIBED, no message needs to be set.
+  required Type type = 2;
+
+  optional Resubscribe resubscribe = 3;
+  optional Update update = 4;
+  optional Message message = 5;
+}

http://git-wip-us.apache.org/repos/asf/mesos/blob/8a156c23/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index a5a7306..f2110a3 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -158,6 +158,9 @@ MODULE_PROTO =								\
 SCHEDULER_PROTO =							\
   $(top_srcdir)/include/mesos/scheduler/scheduler.proto
 
+EXECUTOR_PROTO =							\
+  $(top_srcdir)/include/mesos/executor/executor.proto
+
 OVERSUBSCRIPTION_PROTO =						\
   $(top_srcdir)/include/mesos/slave/oversubscription.proto
 
@@ -176,6 +179,8 @@ CXX_PROTOS =								\
   ../include/mesos/module/module.pb.h					\
   scheduler/scheduler.pb.cc						\
   ../include/mesos/scheduler/scheduler.pb.h				\
+  executor/executor.pb.cc						\
+  ../include/mesos/executor/executor.pb.h				\
   slave/oversubscription.pb.cc						\
   ../include/mesos/slave/oversubscription.pb.h
 
@@ -254,6 +259,12 @@ scheduler/%.pb.cc ../include/mesos/scheduler/%.pb.h: $(SCHEDULER_PROTO)
 	$(PROTOC) $(PROTOCFLAGS) --cpp_out=../include $^
 	mv ../include/mesos/scheduler/*.pb.cc $(@D)
 
+executor/%.pb.cc ../include/mesos/executor/%.pb.h: $(EXECUTOR_PROTO)
+	$(MKDIR_P) $(@D)
+	$(MKDIR_P) ../include/mesos/executor
+	$(PROTOC) $(PROTOCFLAGS) --cpp_out=../include $^
+	mv ../include/mesos/executor/*.pb.cc $(@D)
+
 slave/%.pb.cc ../include/mesos/slave/%.pb.h: $(OVERSUBSCRIPTION_PROTO)
 	$(MKDIR_P) $(@D)
 	$(MKDIR_P) ../include/mesos/slave
@@ -281,6 +292,10 @@ java/generated/org/apache/mesos/scheduler/Protos.java: $(SCHEDULER_PROTO)
 	$(MKDIR_P)  $(@D)
 	$(PROTOC) $(PROTOCFLAGS) --java_out=java/generated $^
 
+java/generated/org/apache/mesos/executor/Protos.java: $(EXECUTOR_PROTO)
+	$(MKDIR_P)  $(@D)
+	$(PROTOC) $(PROTOCFLAGS) --java_out=java/generated $^
+
 python/interface/src/mesos/interface/mesos_pb2.py: $(MESOS_PROTO)
 	$(MKDIR_P) $(@D)
 	$(PROTOC) -I$(top_srcdir)/include/mesos				\
@@ -305,6 +320,13 @@ python/interface/src/mesos/interface/scheduler_pb2.py: $(SCHEDULER_PROTO)
 		--python_out=python/interface/src/mesos/interface $^
 	sed -e 's/mesos\.mesos_pb2/mesos_pb2/' <$@ >$@
 
+python/interface/src/mesos/interface/executor_pb2.py: $(EXECUTOR_PROTO)
+	$(MKDIR_P) $(@D)
+	$(PROTOC) -I$(top_srcdir)/include/mesos/executor		\
+		$(PROTOCFLAGS)						\
+		--python_out=python/interface/src/mesos/interface $^
+	sed -e 's/mesos\.mesos_pb2/mesos_pb2/' <$@ >$@
+
 # We even use a convenience library for most of Mesos so that we can
 # exclude third party libraries so setuptools/distribute can build a
 # self-contained Python library and statically link in the third party
@@ -462,6 +484,14 @@ scheduler_HEADERS =							\
 
 nodist_scheduler_HEADERS = ../include/mesos/scheduler/scheduler.pb.h
 
+executordir = $(pkgincludedir)/executor
+
+executor_HEADERS =							\
+  $(top_srcdir)/include/mesos/executor/executor.hpp			\
+  $(top_srcdir)/include/mesos/executor/executor.proto
+
+nodist_executor_HEADERS = ../include/mesos/executor/executor.pb.h
+
 slavedir = $(pkgincludedir)/slave
 
 slave_HEADERS =								\
@@ -737,6 +767,7 @@ libmesos_la_SOURCES =							\
   $(MESOS_PROTO)							\
   $(MODULE_PROTO)							\
   $(SCHEDULER_PROTO)							\
+  $(EXECUTOR_PROTO)							\
   $(OVERSUBSCRIPTION_PROTO)
 
 libmesos_la_LDFLAGS = -release $(PACKAGE_VERSION)