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)