27 #include <boost/circular_buffer.hpp> 102 class DiskProfileAdaptor;
108 class TaskStatusUpdateManager;
112 struct HttpConnection;
113 struct ResourceProvider;
119 Slave(
const std::string&
id,
137 const SlaveID& slaveId,
138 const MasterSlaveConnection& connection);
142 const SlaveID& slaveId,
143 const std::vector<ReconcileTasksMessage>& reconciliations,
144 const MasterSlaveConnection& connection);
152 RunTaskMessage&& runTaskMessage);
157 const FrameworkInfo& frameworkInfo,
158 const FrameworkID& frameworkId,
160 const TaskInfo& task,
161 const std::vector<ResourceVersionUUID>& resourceVersionUuids,
165 const FrameworkInfo& frameworkInfo,
166 ExecutorInfo executorInfo,
169 const std::vector<ResourceVersionUUID>& resourceVersionUuids,
181 const FrameworkInfo& frameworkInfo,
182 const ExecutorInfo& executorInfo,
185 const std::vector<ResourceVersionUUID>& resourceVersionUuids,
190 const FrameworkInfo& frameworkInfo,
191 const ExecutorInfo& executorInfo,
194 const std::vector<ResourceVersionUUID>& resourceVersionUuids,
205 const FrameworkID& frameworkId,
206 const ExecutorID& executorId,
207 const ContainerID& containerId,
208 const std::list<TaskInfo>& tasks,
209 const std::list<TaskGroupInfo>& taskGroups);
215 RunTaskGroupMessage&& runTaskGroupMessage);
220 const FrameworkInfo& frameworkInfo,
221 const ExecutorInfo& executorInfo,
222 const TaskGroupInfo& taskGroupInfo,
223 const std::vector<ResourceVersionUUID>& resourceVersionUuids,
229 const KillTaskMessage& killTaskMessage);
234 const FrameworkID& frameworkId,
235 const ExecutorID& executorId);
248 const FrameworkID& frameworkId);
251 const SlaveID& slaveId,
252 const FrameworkID& frameworkId,
253 const ExecutorID& executorId,
254 const std::string& data);
257 const UpdateFrameworkMessage& message);
260 std::vector<Resource> checkpointedResources,
264 const std::vector<Resource>& checkpointedResources);
276 const executor::Call::Subscribe&
subscribe,
282 const FrameworkID& frameworkId,
283 const ExecutorID& executorId);
291 const FrameworkID& frameworkId,
292 const ExecutorID& executorId,
293 const std::vector<TaskInfo>& tasks,
294 const std::vector<StatusUpdate>& updates);
298 const FrameworkID& frameworkId,
299 const ExecutorID& executorId,
300 const ContainerID& containerId);
303 const SlaveID& slaveId,
304 const FrameworkID& frameworkId,
305 const ExecutorID& executorId,
306 const std::string& data);
326 const ExecutorID& executorId,
333 const StatusUpdate& update,
335 const ExecutorID& executorId,
336 const ContainerID& containerId,
344 const StatusUpdate& update,
350 void forward(StatusUpdate update);
354 const SlaveID& slaveId,
355 const FrameworkID& frameworkId,
356 const TaskID& taskId,
357 const std::string& uuid);
361 const TaskID& taskId,
362 const FrameworkID& frameworkId,
367 const AcknowledgeOperationStatusMessage& acknowledgement);
370 const FrameworkID& frameworkId,
371 const ExecutorID& executorId,
372 const ContainerID& containerId,
377 const FrameworkID& frameworkId,
378 const ExecutorID& executorId,
380 mesos::slave::ContainerTermination>>& termination);
429 const FrameworkID& frameworkId,
430 const ExecutorID& executorId,
431 const ContainerID& containerId);
436 const FrameworkID& frameworkId,
437 const ExecutorID& executorId,
441 const std::string&
path,
442 const std::string& virtualPath);
480 const ExecutorInfo& executorInfo,
481 const ContainerID& executorContainerId,
487 const ExecutorInfo& executorInfo,
488 const ContainerID& executorContainerId,
489 const std::vector<Task>& tasks);
501 const FrameworkID& frameworkId,
502 const ExecutorID& executorId)
const;
510 const FrameworkInfo& frameworkInfo,
511 const TaskInfo& task)
const;
515 const FrameworkID& frameworkId,
516 const ExecutorID& executorId,
517 const ContainerID& containerId);
576 mesos::slave::QoSCorrection>>& correction);
584 const FrameworkID& frameworkId,
585 const ExecutorID& executorId,
586 const ContainerID& containerId);
598 void _authenticate();
606 const Resources& newCheckpointedResources);
609 const TaskInfo& task,
610 const FrameworkInfo& frameworkInfo);
617 const FrameworkID& frameworkId,
618 const ExecutorID& executorId);
620 void sendExecutorTerminatedStatusUpdate(
621 const TaskID& taskId,
623 mesos::slave::ContainerTermination>>& termination,
624 const FrameworkID& frameworkId,
627 void sendExitedExecutorMessage(
628 const FrameworkID& frameworkId,
629 const ExecutorID& executorId,
633 void forwardOversubscribed();
634 void _forwardOversubscribed(
641 UpdateSlaveMessage generateResourceProviderUpdate()
const;
642 UpdateSlaveMessage generateUpdateSlaveMessage()
const;
644 void handleResourceProviderMessage(
651 void updateOperation(
653 const UpdateOperationStatusMessage& update);
655 void removeOperation(
Operation* operation);
657 Operation* getOperation(
const UUID& uuid)
const;
673 double _frameworks_active()
675 return static_cast<double>(frameworks.size());
678 double _uptime_secs()
685 return master.isSome() ? 1 : 0;
688 double _tasks_staging();
689 double _tasks_starting();
690 double _tasks_running();
691 double _tasks_killing();
693 double _executors_registering();
694 double _executors_running();
695 double _executors_terminating();
697 double _executor_directory_max_allowed_age_secs();
699 double _resources_total(
const std::string&
name);
700 double _resources_used(
const std::string&
name);
701 double _resources_percent(
const std::string&
name);
703 double _resources_revocable_total(
const std::string&
name);
704 double _resources_revocable_used(
const std::string&
name);
705 double _resources_revocable_percent(
const std::string&
name);
711 const SlaveInfo& previous,
712 const SlaveInfo& current)
const;
773 const std::string metaDir;
776 unsigned int recoveryErrors;
781 std::string authenticateeName;
795 uint64_t failedAuthentications;
799 Duration executorDirectoryMaxAllowedAge;
805 std::shared_ptr<DiskProfileAdaptor> diskProfileAdaptor;
832 UUID resourceVersion;
849 contentType(_contentType),
853 template <
typename Message>
854 bool send(
const Message& message)
858 return writer.write(encoder.encode(
evolve(message)));
863 return writer.close();
868 return writer.readerClosed();
886 const FrameworkID& frameworkId,
887 const ExecutorInfo& info,
888 const ContainerID& containerId,
889 const std::string& directory,
896 void enqueueTaskGroup(
const TaskGroupInfo& taskGroup);
898 void enqueueTask(
const TaskInfo& task);
900 Task* addLaunchedTask(
const TaskInfo& task);
901 void completeTask(
const TaskID& taskId);
902 void checkpointExecutor();
903 void checkpointTask(
const TaskInfo& task);
904 void checkpointTask(
const Task& task);
911 bool incompleteTasks();
935 bool everSentTask()
const;
938 template <
typename Message>
939 void send(
const Message& message)
941 if (state == REGISTERING || state == TERMINATED) {
942 LOG(WARNING) <<
"Attempting to send message to disconnected" 943 <<
" executor " << *
this <<
" in state " <<
state;
947 if (!http->
send(message)) {
948 LOG(WARNING) <<
"Unable to send event to executor " << *
this 949 <<
": connection closed";
951 }
else if (pid.
isSome()) {
954 LOG(WARNING) <<
"Unable to send event to executor " << *
this 955 <<
": unknown connection type";
962 bool isGeneratedForCommandTask()
const;
965 void closeHttpConnection();
1053 bool isGeneratedForCommandTask_;
1063 const Flags& slaveFlags,
1064 const FrameworkInfo& info,
1078 void checkpointFramework()
const;
1080 const FrameworkID
id()
const {
return info.id(); }
1086 void destroyExecutor(
const ExecutorID& executorId);
1088 void recoverExecutor(
1090 bool recheckpointExecutor,
1093 void addPendingTask(
1094 const ExecutorID& executorId,
1095 const TaskInfo& task);
1098 void addPendingTaskGroup(
1099 const ExecutorID& executorId,
1100 const TaskGroupInfo& taskGroup);
1102 bool hasTask(
const TaskID& taskId)
const;
1103 bool isPending(
const TaskID& taskId)
const;
1109 bool removePendingTask(
const TaskID& taskId);
1179 const ResourceProviderInfo& _info,
1181 const UUID& _resourceVersion)
1183 totalResources(_totalResources),
1184 resourceVersion(_resourceVersion) {}
1186 void addOperation(
Operation* operation);
1187 void removeOperation(
Operation* operation);
1226 const ExecutorInfo& executorInfo,
1227 const std::string& directory,
1228 const SlaveID& slaveId,
1242 #endif // __SLAVE_HPP__ void schedulerMessage(const SlaveID &slaveId, const FrameworkID &frameworkId, const ExecutorID &executorId, const std::string &data)
struct mesos::internal::slave::Slave::RecoveryInfo recoveryInfo
virtual process::Future< ResourceUsage > usage()
void executorMessage(const SlaveID &slaveId, const FrameworkID &frameworkId, const ExecutorID &executorId, const std::string &data)
ResourceProvider(const ResourceProviderInfo &_info, const Resources &_totalResources, const UUID &_resourceVersion)
Definition: slave.hpp:1178
Try< uid_t > uid(const std::string &path, const FollowSymlink follow=FollowSymlink::FOLLOW_SYMLINK)
Definition: stat.hpp:182
Definition: nothing.hpp:16
ContentType
Definition: http.hpp:43
Definition: option.hpp:28
Try< bool > update(const std::string &link, const Handle &parent, uint16_t protocol, const action::Mirror &mirror)
virtual void ___run(const process::Future< Nothing > &future, const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId, const std::list< TaskInfo > &tasks, const std::list< TaskGroupInfo > &taskGroups)
State
Definition: slave.hpp:972
virtual void exited(const process::UPID &pid)
Invoked when a linked process has exited.
Definition: state.hpp:292
void _reregisterExecutor(const process::Future< Nothing > &future, const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
Duration age(double usage)
Definition: master.hpp:27
const Option< std::string > user
Definition: slave.hpp:997
std::ostream & operator<<(std::ostream &stream, const MesosContainerizerProcess::State &state)
virtual void finalize()
Invoked when a process is terminated.
const ExecutorInfo info
Definition: slave.hpp:986
virtual void removeFramework(Framework *framework)
void send(const Message &message)
Definition: slave.hpp:939
virtual void shutdownExecutor(const process::UPID &from, const FrameworkID &frameworkId, const ExecutorID &executorId)
void detachTaskVolumeDirectories(const ExecutorInfo &executorInfo, const ContainerID &executorContainerId, const std::vector< Task > &tasks)
void run(const FrameworkInfo &frameworkInfo, ExecutorInfo executorInfo, Option< TaskInfo > task, Option< TaskGroupInfo > taskGroup, const std::vector< ResourceVersionUUID > &resourceVersionUuids, const process::UPID &pid, const Option< bool > &launchExecutor)
void _checkDiskUsage(const process::Future< double > &usage)
Framework * getFramework(const FrameworkID &frameworkId) const
Definition: hashset.hpp:53
Definition: protobuf_utils.hpp:261
void _statusUpdateAcknowledgement(const process::Future< bool > &future, const TaskID &taskId, const FrameworkID &frameworkId, const UUID &uuid)
void removeExecutor(Framework *framework, Executor *executor)
process::Future< Nothing > _recoverContainerizer(const Option< state::SlaveState > &state)
process::Future< Nothing > closed() const
Definition: slave.hpp:866
Result< std::string > user(Option< uid_t > uid=None())
Definition: su.hpp:277
hashmap< ExecutorID, process::Sequence > taskLaunchSequences
Definition: slave.hpp:1158
std::list< TaskGroupInfo > pendingTaskGroups
Definition: slave.hpp:1163
v1::AgentID evolve(const SlaveID &slaveId)
Result< ProcessStatus > status(pid_t pid)
Definition: proc.hpp:166
Definition: slave.hpp:976
Definition: resources.hpp:79
UUID resourceVersion
Definition: slave.hpp:1203
friend class Executor
Definition: slave.hpp:589
void handleRunTaskGroupMessage(const process::UPID &from, RunTaskGroupMessage &&runTaskGroupMessage)
virtual void runTaskGroup(const process::UPID &from, const FrameworkInfo &frameworkInfo, const ExecutorInfo &executorInfo, const TaskGroupInfo &taskGroupInfo, const std::vector< ResourceVersionUUID > &resourceVersionUuids, const Option< bool > &launchExecutor)
bool reconnect
Definition: slave.hpp:417
virtual void executorTerminated(const FrameworkID &frameworkId, const ExecutorID &executorId, const process::Future< Option< mesos::slave::ContainerTermination >> &termination)
Definition: lambda.hpp:30
Option< process::UPID > pid
Definition: slave.hpp:1135
void subscribe(HttpConnection http, const executor::Call::Subscribe &subscribe, Framework *framework, Executor *executor)
hashmap< ExecutorID, hashmap< TaskID, TaskInfo > > pendingTasks
Definition: slave.hpp:1145
enum mesos::internal::slave::Slave::State state
Operation
Definition: cgroups.hpp:441
void _checkImageDiskUsage(const process::Future< double > &usage)
void reregisterExecutor(const process::UPID &from, const FrameworkID &frameworkId, const ExecutorID &executorId, const std::vector< TaskInfo > &tasks, const std::vector< StatusUpdate > &updates)
Slave * slave
Definition: slave.hpp:1124
Definition: duration.hpp:32
Option< mesos::slave::ContainerTermination > pendingTermination
Definition: slave.hpp:1047
std::map< std::string, std::string > executorEnvironment(const Flags &flags, const ExecutorInfo &executorInfo, const std::string &directory, const SlaveID &slaveId, const process::PID< Slave > &slavePid, const Option< Secret > &authenticationToken, bool checkpoint)
Returns a map of environment variables necessary in order to launch an executor.
void recoverFramework(const state::FrameworkState &state, const hashset< ExecutorID > &executorsToRecheckpoint, const hashmap< ExecutorID, hashset< TaskID >> &tasksToRecheckpoint)
Definition: protobuf_utils.hpp:377
void send(const process::UPID &to, const google::protobuf::Message &message)
Definition: protobuf.hpp:118
bool isSome() const
Definition: option.hpp:115
Definition: task_status_update_manager.hpp:58
LinkedHashMap< TaskID, TaskInfo > queuedTasks
Definition: slave.hpp:1023
void statusUpdateAcknowledgement(const process::UPID &from, const SlaveID &slaveId, const FrameworkID &frameworkId, const TaskID &taskId, const std::string &uuid)
const bool checkpoint
Definition: slave.hpp:999
void signaled(int signal, int uid)
bool close()
Definition: slave.hpp:861
ContentType contentType
Definition: slave.hpp:872
virtual void _shutdownExecutor(Framework *framework, Executor *executor)
void checkpointResourcesMessage(const std::vector< Resource > &checkpointedResources)
Definition: hashmap.hpp:38
process::Future< Nothing > garbageCollect(const std::string &path)
void operationStatusAcknowledgement(const process::UPID &from, const AcknowledgeOperationStatusMessage &acknowledgement)
Definition: resource_estimator.hpp:37
boost::circular_buffer< std::shared_ptr< Task > > completedTasks
Definition: slave.hpp:1040
process::Future< Secret > generateSecret(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
hashmap< std::string, MessageHandler > message
Definition: process.hpp:451
Resources allocatedResources(const Resources &resources, const std::string &role)
Definition: containerizer.hpp:57
void shutdownExecutorTimeout(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
void attachTaskVolumeDirectory(const ExecutorInfo &executorInfo, const ContainerID &executorContainerId, const Task &task)
Definition: slave.hpp:116
void registered(const process::UPID &from, const SlaveID &slaveId, const MasterSlaveConnection &connection)
An "untyped" PID, used to encapsulate the process ID for lower-layer abstractions (eg...
Definition: pid.hpp:39
Option< HttpConnection > http
Definition: slave.hpp:1013
void pingTimeout(process::Future< Option< MasterInfo >> future)
virtual void initialize()
Invoked when a process gets spawned.
void handleRunTaskMessage(const process::UPID &from, RunTaskMessage &&runTaskMessage)
const ContainerID containerId
Definition: slave.hpp:990
Definition: state.hpp:243
Definition: slave.hpp:1118
Option< process::UPID > pid
Definition: slave.hpp:1014
ExecutorInfo getExecutorInfo(const FrameworkInfo &frameworkInfo, const TaskInfo &task) const
void forward(StatusUpdate update)
Definition: protobuf_utils.hpp:448
void reconcileOperations(const ReconcileOperationsMessage &message)
const FrameworkID id() const
Definition: slave.hpp:1080
void launchExecutor(const Option< process::Future< Secret >> &future, const FrameworkID &frameworkId, const ExecutorID &executorId, const Option< TaskInfo > &taskInfo)
const T & get() const &
Definition: option.hpp:118
Definition: slave.hpp:975
protobuf::framework::Capabilities capabilities
Definition: slave.hpp:1128
process::Future< Nothing > _recover()
virtual process::Future< Nothing > _run(const FrameworkInfo &frameworkInfo, const ExecutorInfo &executorInfo, const Option< TaskInfo > &task, const Option< TaskGroupInfo > &taskGroup, const std::vector< ResourceVersionUUID > &resourceVersionUuids, const Option< bool > &launchExecutor)
ResourceProviderInfo info
Definition: slave.hpp:1189
The SecretGenerator interface represents a mechanism to create a secret from a principal.
Definition: secret_generator.hpp:34
Definition: protobuf.hpp:100
const ExecutorID id
Definition: slave.hpp:985
Definition: slave.hpp:974
HttpConnection(const process::http::Pipe::Writer &_writer, ContentType _contentType)
Definition: slave.hpp:846
State
Definition: slave.hpp:1115
::recordio::Encoder< v1::executor::Event > encoder
Definition: slave.hpp:873
void checkImageDiskUsage()
Definition: slave.hpp:408
void executorLaunched(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId, const process::Future< Containerizer::LaunchResult > &future)
void reregistered(const process::UPID &from, const SlaveID &slaveId, const std::vector< ReconcileTasksMessage > &reconciliations, const MasterSlaveConnection &connection)
void fileAttached(const process::Future< Nothing > &result, const std::string &path, const std::string &virtualPath)
Definition: slave.hpp:402
Try< std::vector< Entry > > list(const std::string &hierarchy, const std::string &cgroup)
Definition: slave.hpp:401
void _statusUpdate(StatusUpdate update, const Option< process::UPID > &pid, const ExecutorID &executorId, const Option< process::Future< ContainerStatus >> &containerStatus)
Definition: boundedhashmap.hpp:27
Definition: slave.hpp:403
const FrameworkID frameworkId
Definition: slave.hpp:988
void detected(const process::Future< Option< MasterInfo >> &_master)
Try< Nothing > checkpoint(const std::string &path, const std::string &message)
Definition: state.hpp:123
#define flags
Definition: decoder.hpp:18
A "process identifier" used to uniquely identify a process when dispatching messages.
Definition: pid.hpp:279
hashmap< ExecutorID, Executor * > executors
Definition: slave.hpp:1166
Definition: attributes.hpp:24
Definition: manager.hpp:37
boost::circular_buffer< process::Owned< Executor > > completedExecutors
Definition: slave.hpp:1168
Slave * slave
Definition: slave.hpp:983
LinkedHashMap< TaskID, Task * > launchedTasks
Definition: slave.hpp:1031
process::Future< Nothing > recover(const Try< state::State > &state)
Definition: slave.hpp:404
void ___statusUpdate(const process::Future< Nothing > &future, const StatusUpdate &update, const Option< process::UPID > &pid)
void shutdownFramework(const process::UPID &from, const FrameworkID &frameworkId)
void applyOperation(const ApplyOperationMessage &message)
Nothing detachFile(const std::string &path)
virtual void killTask(const process::UPID &from, const KillTaskMessage &killTaskMessage)
bool send(const Message &message)
Definition: slave.hpp:854
friend class Framework
Definition: slave.hpp:590
virtual void __recover(const process::Future< Nothing > &future)
Slave(const std::string &id, const Flags &flags, mesos::master::detector::MasterDetector *detector, Containerizer *containerizer, Files *files, GarbageCollector *gc, TaskStatusUpdateManager *taskStatusUpdateManager, mesos::slave::ResourceEstimator *resourceEstimator, mesos::slave::QoSController *qosController, mesos::SecretGenerator *secretGenerator, const Option< Authorizer * > &authorizer)
Resources totalResources
Definition: slave.hpp:1190
std::list< TaskGroupInfo > queuedTaskGroups
Definition: slave.hpp:1028
An abstraction of a Master detector which can be used to detect the leading master from a group...
Definition: detector.hpp:38
static Time now()
The current clock time for either the current process that makes this call or the global clock time i...
virtual void qosCorrections()
hashmap< UUID, Operation * > operations
Definition: slave.hpp:1207
void reregisterExecutorTimeout()
Definition: slave.hpp:1176
Definition: slave.hpp:977
virtual void __run(const FrameworkInfo &frameworkInfo, const ExecutorInfo &executorInfo, const Option< TaskInfo > &task, const Option< TaskGroupInfo > &taskGroup, const std::vector< ResourceVersionUUID > &resourceVersionUuids, const Option< bool > &launchExecutor)
void ping(const process::UPID &from, bool connected)
Definition: metrics.hpp:32
void checkpointResources(std::vector< Resource > checkpointedResources, bool changeTotal)
void __statusUpdate(const Option< process::Future< Nothing >> &future, const StatusUpdate &update, const Option< process::UPID > &pid, const ExecutorID &executorId, const ContainerID &containerId, bool checkpoint)
void doReliableRegistration(Duration maxBackoff)
Try< Nothing > bind(int_fd s, const Address &address)
Definition: network.hpp:46
process::Promise< Nothing > recovered
Definition: slave.hpp:412
Definition: qos_controller.hpp:44
std::string serialize(ContentType contentType, const google::protobuf::Message &message)
const std::string directory
Definition: slave.hpp:992
void statusUpdate(StatusUpdate update, const Option< process::UPID > &pid)
URI http(const std::string &host, const std::string &path="/", const Option< int > &port=None(), const Option< std::string > &query=None(), const Option< std::string > &fragment=None(), const Option< std::string > &user=None(), const Option< std::string > &password=None())
Creates an http URI with the given parameters.
Definition: http.hpp:35
State
Definition: slave.hpp:399
virtual void runTask(const process::UPID &from, const FrameworkInfo &frameworkInfo, const FrameworkID &frameworkId, const process::UPID &pid, const TaskInfo &task, const std::vector< ResourceVersionUUID > &resourceVersionUuids, const Option< bool > &launchExecutor)
FrameworkInfo info
Definition: slave.hpp:1126
Definition: slave.hpp:844
process::http::Pipe::Writer writer
Definition: slave.hpp:871
void shutdown(const process::UPID &from, const std::string &message)
Definition: slave.hpp:881
virtual void _qosCorrections(const process::Future< std::list< mesos::slave::QoSCorrection >> &correction)
Executor * getExecutor(const FrameworkID &frameworkId, const ExecutorID &executorId) const
void registerExecutor(const process::UPID &from, const FrameworkID &frameworkId, const ExecutorID &executorId)
Definition: slave.hpp:1117
PID< MetricsProcess > metrics
void updateFramework(const UpdateFrameworkMessage &message)
LinkedHashMap< TaskID, Task * > terminatedTasks
Definition: slave.hpp:1034
constexpr const char * name
Definition: shell.hpp:43
void registerExecutorTimeout(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
Definition: slave.hpp:1058
Definition: authenticatee.hpp:29
Definition: state.hpp:311