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 <[email protected]> Authored: Tue Jun 2 09:21:38 2015 -0700 Committer: Vinod Kone <[email protected]> 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)
