blob: 7cb3ce651997c04ef1ef95539098ed2a99270b11 [file] [log] [blame]
/**
* 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.internal;
// TODO(benh): Provide comments for each of these messages. Also,
// consider splitting these messages into different "packages" which
// represent which messages get handled by which components (e.g., the
// "mesos.internal.executor" package includes messages that the
// executor handles).
// TODO(benh): It would be great if this could just be a
// TaskInfo wherever it gets used! However, doing so would
// require adding the framework_id field, the executor_id field, and
// the state field into TaskInfo though (or send them another
// way). Also, one performance reason why we don't do that now is
// because storing whatever data is coupled with a TaskInfo
// could be large and unnecessary.
// TODO(bmahler): Add executor_uuid here, and send it to the master. This will
// allow us to expose executor work directories for tasks in the webui when
// looking from the master level. Currently only the slave knows which run the
// task belongs to.
message Task {
required string name = 1;
required TaskID task_id = 2;
required FrameworkID framework_id = 3;
optional ExecutorID executor_id = 4;
required SlaveID slave_id = 5;
required TaskState state = 6;
repeated Resource resources = 7;
repeated TaskStatus statuses = 8;
}
// Describes a role, which are used to group frameworks for allocation
// decisions, depending on the allocation policy being used.
// The weight field can be used to indicate forms of priority.
message RoleInfo {
required string name = 1;
optional double weight = 2 [default = 1];
}
message StatusUpdate {
required FrameworkID framework_id = 1;
optional ExecutorID executor_id = 2;
optional SlaveID slave_id = 3;
required TaskStatus status = 4;
required double timestamp = 5;
required bytes uuid = 6;
}
// This message encapsulates how we checkpoint a status update to disk.
// NOTE: If type == UPDATE, the 'update' field is required.
// NOTE: If type == ACK, the 'uuid' field is required.
message StatusUpdateRecord {
enum Type {
UPDATE = 0;
ACK = 1;
}
required Type type = 1;
optional StatusUpdate update = 2;
optional bytes uuid = 3;
}
message SubmitSchedulerRequest
{
required string name = 1;
}
message SubmitSchedulerResponse
{
required bool okay = 1;
}
message ExecutorToFrameworkMessage {
required SlaveID slave_id = 1;
required FrameworkID framework_id = 2;
required ExecutorID executor_id = 3;
required bytes data = 4;
}
message FrameworkToExecutorMessage {
required SlaveID slave_id = 1;
required FrameworkID framework_id = 2;
required ExecutorID executor_id = 3;
required bytes data = 4;
}
message RegisterFrameworkMessage {
required FrameworkInfo framework = 1;
}
message ReregisterFrameworkMessage {
required FrameworkInfo framework = 2;
required bool failover = 3;
}
message FrameworkRegisteredMessage {
required FrameworkID framework_id = 1;
required MasterInfo master_info = 2;
}
message FrameworkReregisteredMessage {
required FrameworkID framework_id = 1;
required MasterInfo master_info = 2;
}
message UnregisterFrameworkMessage {
required FrameworkID framework_id = 1;
}
message DeactivateFrameworkMessage {
required FrameworkID framework_id = 1;
}
message ResourceRequestMessage {
required FrameworkID framework_id = 1;
repeated Request requests = 2;
}
message ResourceOffersMessage {
repeated Offer offers = 1;
repeated string pids = 2;
}
message LaunchTasksMessage {
required FrameworkID framework_id = 1;
repeated TaskInfo tasks = 3;
required Filters filters = 5;
repeated OfferID offer_ids = 6;
}
message RescindResourceOfferMessage {
required OfferID offer_id = 1;
}
message ReviveOffersMessage {
required FrameworkID framework_id = 1;
}
message RunTaskMessage {
required FrameworkID framework_id = 1;
required FrameworkInfo framework = 2;
required string pid = 3;
required TaskInfo task = 4;
}
message KillTaskMessage {
// TODO(bmahler): Include the SlaveID here to improve the Master's
// ability to respond for non-activated slaves.
required FrameworkID framework_id = 1;
required TaskID task_id = 2;
}
// NOTE: If 'pid' is present, scheduler driver sends an
// acknowledgement to the pid.
message StatusUpdateMessage {
required StatusUpdate update = 1;
optional string pid = 2;
}
message StatusUpdateAcknowledgementMessage {
required SlaveID slave_id = 1;
required FrameworkID framework_id = 2;
required TaskID task_id = 3;
required bytes uuid = 4;
}
message LostSlaveMessage {
required SlaveID slave_id = 1;
}
// Allows the framework to query the status for non-terminal tasks.
// This causes the master to send back the latest task status for
// each task in 'statuses', if possible. Tasks that are no longer
// known will result in a TASK_LOST update. If statuses is empty,
// then the master will send the latest status for each task
// currently known.
message ReconcileTasksMessage {
required FrameworkID framework_id = 1;
repeated TaskStatus statuses = 2; // Should be non-terminal only.
}
message FrameworkErrorMessage {
required string message = 2;
}
message RegisterSlaveMessage {
required SlaveInfo slave = 1;
}
message ReregisterSlaveMessage {
// TODO(bmahler): Deprecate and remove the explicit slave_id as
// SlaveInfo already includes this information.
required SlaveID slave_id = 1;
required SlaveInfo slave = 2;
repeated ExecutorInfo executor_infos = 4;
repeated Task tasks = 3;
repeated Archive.Framework completed_frameworks = 5;
}
message SlaveRegisteredMessage {
required SlaveID slave_id = 1;
}
message SlaveReregisteredMessage {
required SlaveID slave_id = 1;
}
message UnregisterSlaveMessage {
required SlaveID slave_id = 1;
}
message HeartbeatMessage {
required SlaveID slave_id = 1;
}
// Tells a slave to shut down all executors of the given framework.
message ShutdownFrameworkMessage {
required FrameworkID framework_id = 1;
}
// Tells the executor to initiate a shut down by invoking
// Executor::shutdown.
message ShutdownExecutorMessage {}
message UpdateFrameworkMessage {
required FrameworkID framework_id = 1;
required string pid = 2;
}
message RegisterExecutorMessage {
required FrameworkID framework_id = 1;
required ExecutorID executor_id = 2;
}
message ExecutorRegisteredMessage {
required ExecutorInfo executor_info = 2;
required FrameworkID framework_id = 3;
required FrameworkInfo framework_info = 4;
required SlaveID slave_id = 5;
required SlaveInfo slave_info = 6;
}
message ExecutorReregisteredMessage {
required SlaveID slave_id = 1;
required SlaveInfo slave_info = 2;
}
message ExitedExecutorMessage {
required SlaveID slave_id = 1;
required FrameworkID framework_id = 2;
required ExecutorID executor_id = 3;
required int32 status = 4;
}
message ReconnectExecutorMessage {
required SlaveID slave_id = 1;
}
message ReregisterExecutorMessage {
required ExecutorID executor_id = 1;
required FrameworkID framework_id = 2;
repeated TaskInfo tasks = 3;
repeated StatusUpdate updates = 4;
}
message RegisterProjdMessage {
required string project = 1;
}
message ProjdReadyMessage {
required string project = 1;
}
message ProjdUpdateResourcesMessage {
optional Parameters parameters = 1;
}
message FrameworkExpiredMessage {
required FrameworkID framework_id = 1;
}
message ShutdownMessage {
optional string message = 1;
}
message AuthenticateMessage {
required string pid = 1; // PID that needs to be authenticated.
}
message AuthenticationMechanismsMessage {
repeated string mechanisms = 1; // List of available SASL mechanisms.
}
message AuthenticationStartMessage {
required string mechanism = 1;
optional string data = 2;
}
message AuthenticationStepMessage {
required bytes data = 1;
}
message AuthenticationCompletedMessage {}
message AuthenticationFailedMessage {}
message AuthenticationErrorMessage {
optional string error = 1;
}
// TODO(adam-mesos): Move this to an 'archive' package.
/**
* Describes Completed Frameworks, etc. for archival.
*/
message Archive {
message Framework {
required FrameworkInfo framework_info = 1;
optional string pid = 2;
repeated Task tasks = 3;
}
repeated Framework frameworks = 1;
}
// Message describing task current health status that is sent by
// the task health checker to the command executor.
// The command executor reports the task status back to the
// on each receive. If the health checker configured faiure
// condition meets, then kill_task flag will be set to true which
// the executor on message receive will kill the task.
message TaskHealthStatus {
required TaskID task_id = 1;
required bool healthy = 2;
// Flag to initiate task kill.
optional bool kill_task = 3 [default = false];
// Number of consecutive counts in current status.
// This will not be populated if task is healthy.
optional int32 consecutive_failures = 4;
}