27 #include <boost/circular_buffer.hpp>
101 class DiskProfileAdaptor;
107 class TaskStatusUpdateManager;
111 struct HttpConnection;
112 struct ResourceProvider;
118 Slave(
const std::string&
id,
136 const SlaveID& slaveId,
137 const MasterSlaveConnection& connection);
141 const SlaveID& slaveId,
142 const std::vector<ReconcileTasksMessage>& reconciliations,
143 const MasterSlaveConnection& connection);
150 const FrameworkInfo& frameworkInfo,
151 const FrameworkID& frameworkId,
153 const TaskInfo& task,
154 const std::vector<ResourceVersionUUID>& resourceVersionUuids);
157 const FrameworkInfo& frameworkInfo,
158 ExecutorInfo executorInfo,
161 const std::vector<ResourceVersionUUID>& resourceVersionUuids,
167 const FrameworkInfo& frameworkInfo,
168 const ExecutorInfo& executorInfo,
171 const std::vector<ResourceVersionUUID>& resourceVersionUuids);
176 const FrameworkInfo& frameworkInfo,
177 const ExecutorInfo& executorInfo,
178 const TaskGroupInfo& taskGroupInfo,
179 const std::vector<ResourceVersionUUID>& resourceVersionUuids);
184 const KillTaskMessage& killTaskMessage);
189 const FrameworkID& frameworkId,
190 const ExecutorID& executorId);
194 const FrameworkID& frameworkId);
197 const SlaveID& slaveId,
198 const FrameworkID& frameworkId,
199 const ExecutorID& executorId,
200 const std::string& data);
203 const UpdateFrameworkMessage& message);
206 std::vector<Resource> checkpointedResources,
210 const std::vector<Resource>& checkpointedResources);
222 const executor::Call::Subscribe&
subscribe,
228 const FrameworkID& frameworkId,
229 const ExecutorID& executorId);
237 const FrameworkID& frameworkId,
238 const ExecutorID& executorId,
239 const std::vector<TaskInfo>& tasks,
240 const std::vector<StatusUpdate>& updates);
244 const FrameworkID& frameworkId,
245 const ExecutorID& executorId,
246 const ContainerID& containerId);
249 const SlaveID& slaveId,
250 const FrameworkID& frameworkId,
251 const ExecutorID& executorId,
252 const std::string& data);
272 const ExecutorID& executorId,
279 const StatusUpdate& update,
281 const ExecutorID& executorId,
282 const ContainerID& containerId,
290 const StatusUpdate& update,
296 void forward(StatusUpdate update);
300 const SlaveID& slaveId,
301 const FrameworkID& frameworkId,
302 const TaskID& taskId,
303 const std::string& uuid);
307 const TaskID& taskId,
308 const FrameworkID& frameworkId,
313 const AcknowledgeOperationStatusMessage& acknowledgement);
316 const FrameworkID& frameworkId,
317 const ExecutorID& executorId,
318 const ContainerID& containerId,
323 const FrameworkID& frameworkId,
324 const ExecutorID& executorId,
326 mesos::slave::ContainerTermination>>& termination);
376 const FrameworkInfo& frameworkInfo,
377 const ExecutorInfo& executorInfo,
380 const std::vector<ResourceVersionUUID>& resourceVersionUuids);
388 const FrameworkID& frameworkId,
389 const ExecutorID& executorId,
390 const ContainerID& containerId,
391 const std::list<TaskInfo>& tasks,
392 const std::list<TaskGroupInfo>& taskGroups);
395 const FrameworkID& frameworkId,
396 const ExecutorID& executorId,
397 const ContainerID& containerId);
402 const FrameworkID& frameworkId,
403 const ExecutorID& executorId,
407 const std::string& path,
408 const std::string& virtualPath);
430 const ExecutorInfo& executorInfo,
431 const ContainerID& executorContainerId,
437 const ExecutorInfo& executorInfo,
438 const ContainerID& executorContainerId,
439 const std::vector<Task>& tasks);
451 const FrameworkID& frameworkId,
452 const ExecutorID& executorId)
const;
460 const FrameworkInfo& frameworkInfo,
461 const TaskInfo& task)
const;
465 const FrameworkID& frameworkId,
466 const ExecutorID& executorId,
467 const ContainerID& containerId);
526 mesos::slave::QoSCorrection>>& correction);
534 const FrameworkID& frameworkId,
535 const ExecutorID& executorId,
536 const ContainerID& containerId);
548 void _authenticate();
563 const Resources& newCheckpointedResources);
566 const TaskInfo& task,
567 const FrameworkInfo& frameworkInfo);
574 const FrameworkID& frameworkId,
575 const ExecutorID& executorId);
577 void sendExecutorTerminatedStatusUpdate(
578 const TaskID& taskId,
580 mesos::slave::ContainerTermination>>& termination,
581 const FrameworkID& frameworkId,
585 void forwardOversubscribed();
586 void _forwardOversubscribed(
593 UpdateSlaveMessage generateResourceProviderUpdate()
const;
594 UpdateSlaveMessage generateUpdateSlaveMessage()
const;
596 void handleResourceProviderMessage(
603 void updateOperation(
605 const UpdateOperationStatusMessage& update);
607 void removeOperation(
Operation* operation);
625 double _frameworks_active()
627 return static_cast<double>(frameworks.size());
630 double _uptime_secs()
637 return master.
isSome() ? 1 : 0;
640 double _tasks_staging();
641 double _tasks_starting();
642 double _tasks_running();
643 double _tasks_killing();
645 double _executors_registering();
646 double _executors_running();
647 double _executors_terminating();
649 double _executor_directory_max_allowed_age_secs();
651 double _resources_total(
const std::string&
name);
652 double _resources_used(
const std::string&
name);
653 double _resources_percent(
const std::string&
name);
655 double _resources_revocable_total(
const std::string&
name);
656 double _resources_revocable_used(
const std::string&
name);
657 double _resources_revocable_percent(
const std::string&
name);
663 const SlaveInfo& previous,
664 const SlaveInfo& current)
const;
666 protobuf::master::Capabilities requiredMasterCapabilities;
674 protobuf::slave::Capabilities capabilities;
699 Containerizer* containerizer;
707 GarbageCollector* gc;
709 TaskStatusUpdateManager* taskStatusUpdateManager;
725 const std::string metaDir;
728 unsigned int recoveryErrors;
733 std::string authenticateeName;
747 uint64_t failedAuthentications;
751 Duration executorDirectoryMaxAllowedAge;
757 std::shared_ptr<DiskProfileAdaptor> diskProfileAdaptor;
767 ResourceProviderManager resourceProviderManager;
805 template <
typename Message>
806 bool send(
const Message& message)
838 const FrameworkID& frameworkId,
839 const ExecutorInfo&
info,
840 const ContainerID& containerId,
866 template <
typename Message>
867 void send(
const Message& message)
870 LOG(WARNING) <<
"Attempting to send message to disconnected"
871 <<
" executor " << *
this <<
" in state " <<
state;
875 if (!http->
send(message)) {
876 LOG(WARNING) <<
"Unable to send event to executor " << *
this
877 <<
": connection closed";
879 }
else if (pid.
isSome()) {
880 slave->
send(pid.
get(), message);
882 LOG(WARNING) <<
"Unable to send event to executor " << *
this
883 <<
": unknown connection type";
981 bool isGeneratedForCommandTask_;
991 const Flags& slaveFlags,
992 const FrameworkInfo&
info,
1008 const FrameworkID
id()
const {
return info.id(); }
1018 bool recheckpointExecutor,
1022 const ExecutorID& executorId,
1023 const TaskInfo& task);
1027 const ExecutorID& executorId,
1028 const TaskGroupInfo& taskGroup);
1030 bool hasTask(
const TaskID& taskId)
const;
1031 bool isPending(
const TaskID& taskId)
const;
1094 const ResourceProviderInfo& _info,
1141 const ExecutorInfo& executorInfo,
1142 const std::string& directory,
1143 const SlaveID& slaveId,
1157 #endif // __SLAVE_HPP__
void schedulerMessage(const SlaveID &slaveId, const FrameworkID &frameworkId, const ExecutorID &executorId, const std::string &data)
Option< TaskInfo > dequeueTask(const TaskID &taskId)
bool isPending(const TaskID &taskId) const
struct mesos::internal::slave::Slave::RecoveryInfo recoveryInfo
virtual process::Future< ResourceUsage > usage()
enum mesos::internal::slave::Framework::State state
void checkpointTask(const TaskInfo &task)
void executorMessage(const SlaveID &slaveId, const FrameworkID &frameworkId, const ExecutorID &executorId, const std::string &data)
void enqueueTaskGroup(const TaskGroupInfo &taskGroup)
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)
State
Definition: slave.hpp:900
virtual void exited(const process::UPID &pid)
Invoked when a linked process has exited.
void checkpointExecutor()
Definition: state.hpp:284
hashmap< id::UUID, Operation * > operations
Definition: slave.hpp:1122
void _reregisterExecutor(const process::Future< Nothing > &future, const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
Duration age(double usage)
const Option< std::string > user
Definition: slave.hpp:925
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:914
virtual void removeFramework(Framework *framework)
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)
void send(const Message &message)
Definition: slave.hpp:867
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 _checkDiskUsage(const process::Future< double > &usage)
Framework * getFramework(const FrameworkID &frameworkId) const
Definition: hashset.hpp:53
void removeExecutor(Framework *framework, Executor *executor)
process::Future< Nothing > _recoverContainerizer(const Option< state::SlaveState > &state)
process::Future< Nothing > closed() const
Definition: slave.hpp:818
std::list< TaskGroupInfo > pendingTaskGroups
Definition: slave.hpp:1078
v1::AgentID evolve(const SlaveID &slaveId)
Result< ProcessStatus > status(pid_t pid)
Definition: proc.hpp:166
void addOperation(Operation *operation)
Definition: slave.hpp:904
void closeHttpConnection()
void recoverTask(const state::TaskState &state, bool recheckpointTask)
Definition: resources.hpp:79
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)
enum mesos::internal::slave::Executor::State state
virtual void runTaskGroup(const process::UPID &from, const FrameworkInfo &frameworkInfo, const ExecutorInfo &executorInfo, const TaskGroupInfo &taskGroupInfo, const std::vector< ResourceVersionUUID > &resourceVersionUuids)
virtual void _run(const process::Future< std::list< bool >> &unschedules, const FrameworkInfo &frameworkInfo, const ExecutorInfo &executorInfo, const Option< TaskInfo > &task, const Option< TaskGroupInfo > &taskGroup, const std::vector< ResourceVersionUUID > &resourceVersionUuids)
bool reconnect
Definition: slave.hpp:363
virtual void executorTerminated(const FrameworkID &frameworkId, const ExecutorID &executorId, const process::Future< Option< mesos::slave::ContainerTermination >> &termination)
Option< process::UPID > pid
Definition: slave.hpp:1063
void subscribe(HttpConnection http, const executor::Call::Subscribe &subscribe, Framework *framework, Executor *executor)
hashmap< ExecutorID, hashmap< TaskID, TaskInfo > > pendingTasks
Definition: slave.hpp:1073
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:1052
Definition: duration.hpp:32
Option< mesos::slave::ContainerTermination > pendingTermination
Definition: slave.hpp:975
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)
Option< ExecutorID > getExecutorIdForPendingTask(const TaskID &taskId) const
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:951
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:927
void signaled(int signal, int uid)
bool close()
Definition: slave.hpp:813
bool isGeneratedForCommandTask() const
ContentType contentType
Definition: slave.hpp:824
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:968
void recoverExecutor(const state::ExecutorState &state, bool recheckpointExecutor, const hashset< TaskID > &tasksToRecheckpoint)
process::Future< Secret > generateSecret(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
hashmap< std::string, MessageHandler > message
Definition: process.hpp:443
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)
bool hasTask(const TaskID &taskId) const
void _statusUpdateAcknowledgement(const process::Future< bool > &future, const TaskID &taskId, const FrameworkID &frameworkId, const id::UUID &uuid)
Definition: slave.hpp:115
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:941
Resources allocatedResources() const
void pingTimeout(process::Future< Option< MasterInfo >> future)
virtual void initialize()
Invoked when a process gets spawned.
const ContainerID containerId
Definition: slave.hpp:918
Definition: state.hpp:235
Definition: slave.hpp:1046
Option< process::UPID > pid
Definition: slave.hpp:942
ExecutorInfo getExecutorInfo(const FrameworkInfo &frameworkInfo, const TaskInfo &task) const
void __run(const process::Future< std::list< bool >> &future, const FrameworkInfo &frameworkInfo, const ExecutorInfo &executorInfo, const Option< TaskInfo > &task, const Option< TaskGroupInfo > &taskGroup, const std::vector< ResourceVersionUUID > &resourceVersionUuids)
void forward(StatusUpdate update)
Definition: protobuf_utils.hpp:439
void reconcileOperations(const ReconcileOperationsMessage &message)
bool write(std::string s)
const FrameworkID id() const
Definition: slave.hpp:1008
Future< Nothing > readerClosed() const
void launchExecutor(const Option< process::Future< Secret >> &future, const FrameworkID &frameworkId, const ExecutorID &executorId, const Option< TaskInfo > &taskInfo)
friend struct Metrics
Definition: slave.hpp:543
const T & get() const &
Definition: option.hpp:118
Definition: slave.hpp:903
protobuf::framework::Capabilities capabilities
Definition: slave.hpp:1056
process::Future< Nothing > _recover()
ResourceProviderInfo info
Definition: slave.hpp:1104
The SecretGenerator interface represents a mechanism to create a secret from a principal.
Definition: secret_generator.hpp:34
Definition: protobuf.hpp:100
Executor * getExecutor(const ExecutorID &executorId) const
const ExecutorID id
Definition: slave.hpp:913
ResourceProvider(const ResourceProviderInfo &_info, const Resources &_totalResources, const id::UUID &_resourceVersion)
Definition: slave.hpp:1093
Executor(Slave *slave, const FrameworkID &frameworkId, const ExecutorInfo &info, const ContainerID &containerId, const std::string &directory, const Option< std::string > &user, bool checkpoint)
Definition: slave.hpp:902
HttpConnection(const process::http::Pipe::Writer &_writer, ContentType _contentType)
Definition: slave.hpp:798
State
Definition: slave.hpp:1043
::recordio::Encoder< v1::executor::Event > encoder
Definition: slave.hpp:825
void checkImageDiskUsage()
Definition: slave.hpp:354
void executorLaunched(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId, const process::Future< Containerizer::LaunchResult > &future)
Task * addLaunchedTask(const TaskInfo &task)
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:348
Try< std::vector< Entry > > list(const std::string &hierarchy, const std::string &cgroup)
Definition: slave.hpp:347
void _statusUpdate(StatusUpdate update, const Option< process::UPID > &pid, const ExecutorID &executorId, const Option< process::Future< ContainerStatus >> &containerStatus)
Definition: boundedhashmap.hpp:27
void run(const FrameworkInfo &frameworkInfo, ExecutorInfo executorInfo, Option< TaskInfo > task, Option< TaskGroupInfo > taskGroup, const std::vector< ResourceVersionUUID > &resourceVersionUuids, const process::UPID &pid)
Definition: slave.hpp:349
const FrameworkID frameworkId
Definition: slave.hpp:916
void detected(const process::Future< Option< MasterInfo >> &_master)
Try< Nothing > checkpoint(const std::string &path, const std::string &message)
Definition: state.hpp:115
#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:1081
void completeTask(const TaskID &taskId)
Executor * addExecutor(const ExecutorInfo &executorInfo)
boost::circular_buffer< process::Owned< Executor > > completedExecutors
Definition: slave.hpp:1083
Slave * slave
Definition: slave.hpp:911
LinkedHashMap< TaskID, Task * > launchedTasks
Definition: slave.hpp:959
Try< Nothing > updateTaskState(const TaskStatus &status)
process::Future< Nothing > recover(const Try< state::State > &state)
Definition: slave.hpp:350
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)
void destroyExecutor(const ExecutorID &executorId)
virtual void killTask(const process::UPID &from, const KillTaskMessage &killTaskMessage)
bool send(const Message &message)
Definition: slave.hpp:806
virtual void __recover(const process::Future< Nothing > &future)
void addPendingTask(const ExecutorID &executorId, const TaskInfo &task)
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:1105
std::list< TaskGroupInfo > queuedTaskGroups
Definition: slave.hpp:956
An abstraction of a Master detector which can be used to detect the leading master from a group...
Definition: detector.hpp:38
id::UUID resourceVersion
Definition: slave.hpp:1118
static Time now()
The current clock time for either the current process that makes this call or the global clock time i...
Option< TaskGroupInfo > getQueuedTaskGroup(const TaskID &taskId)
virtual void qosCorrections()
void reregisterExecutorTimeout()
Definition: slave.hpp:1091
Definition: slave.hpp:905
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
Option< TaskGroupInfo > getTaskGroupForPendingTask(const TaskID &taskId)
process::Promise< Nothing > recovered
Definition: slave.hpp:358
Definition: qos_controller.hpp:44
std::string serialize(ContentType contentType, const google::protobuf::Message &message)
void removeOperation(Operation *operation)
const std::string directory
Definition: slave.hpp:920
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:345
FrameworkInfo info
Definition: slave.hpp:1054
Definition: slave.hpp:796
process::http::Pipe::Writer writer
Definition: slave.hpp:823
void shutdown(const process::UPID &from, const std::string &message)
Definition: slave.hpp:833
friend class Http
Definition: slave.hpp:541
void checkpointFramework() const
bool removePendingTask(const TaskID &taskId)
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:1045
PID< MetricsProcess > metrics
void updateFramework(const UpdateFrameworkMessage &message)
LinkedHashMap< TaskID, Task * > terminatedTasks
Definition: slave.hpp:962
constexpr const char * name
Definition: shell.hpp:41
Resources allocatedResources() const
void addPendingTaskGroup(const ExecutorID &executorId, const TaskGroupInfo &taskGroup)
void registerExecutorTimeout(const FrameworkID &frameworkId, const ExecutorID &executorId, const ContainerID &containerId)
Definition: slave.hpp:986
Definition: authenticatee.hpp:29
void enqueueTask(const TaskInfo &task)
Definition: future.hpp:57
Definition: state.hpp:303
Framework(Slave *slave, const Flags &slaveFlags, const FrameworkInfo &info, const Option< process::UPID > &pid)