You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gr...@apache.org on 2019/07/15 18:50:21 UTC
[mesos] 01/14: Added minimal agent handler for 'DrainSlaveMessage'.
This is an automated email from the ASF dual-hosted git repository.
grag pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 3c959eb769ec4a39721947e7ec173dd9eefc6af4
Author: Greg Mann <gr...@mesosphere.io>
AuthorDate: Mon Jul 15 10:25:30 2019 -0700
Added minimal agent handler for 'DrainSlaveMessage'.
This patch adds a minimal handler to the agent for the
`DrainSlaveMessage`. This handler will later be extended
to implement the full functionality.
Review: https://reviews.apache.org/r/70834/
---
src/slave/paths.cpp | 9 +++++++++
src/slave/paths.hpp | 6 ++++++
src/slave/slave.cpp | 20 ++++++++++++++++++++
src/slave/slave.hpp | 8 ++++++++
4 files changed, 43 insertions(+)
diff --git a/src/slave/paths.cpp b/src/slave/paths.cpp
index 1163c88..28a7cf9 100644
--- a/src/slave/paths.cpp
+++ b/src/slave/paths.cpp
@@ -55,6 +55,7 @@ namespace paths {
// File names.
const char BOOT_ID_FILE[] = "boot_id";
const char SLAVE_INFO_FILE[] = "slave.info";
+const char DRAIN_CONFIG_FILE[] = "drain.config";
const char FRAMEWORK_PID_FILE[] = "framework.pid";
const char FRAMEWORK_INFO_FILE[] = "framework.info";
const char LIBPROCESS_PID_FILE[] = "libprocess.pid";
@@ -658,6 +659,14 @@ string getResourcesTargetPath(
}
+string getDrainConfigPath(
+ const string& metaDir,
+ const SlaveID& slaveId)
+{
+ return path::join(getSlavePath(metaDir, slaveId), DRAIN_CONFIG_FILE);
+}
+
+
Try<list<string>> getPersistentVolumePaths(
const std::string& workDir)
{
diff --git a/src/slave/paths.hpp b/src/slave/paths.hpp
index ad76826..e077587 100644
--- a/src/slave/paths.hpp
+++ b/src/slave/paths.hpp
@@ -76,6 +76,7 @@ namespace paths {
// | | |-- latest (symlink)
// | | |-- <slave_id>
// | | |-- slave.info
+// | | |-- drain.config
// | | |-- operations
// | | | |-- <operation_uuid>
// | | | |-- operation.updates
@@ -422,6 +423,11 @@ std::string getResourcesTargetPath(
const std::string& rootDir);
+std::string getDrainConfigPath(
+ const std::string& metaDir,
+ const SlaveID& slaveId);
+
+
Try<std::list<std::string>> getPersistentVolumePaths(
const std::string& workDir);
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index 30039b0..fc688dc 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -749,6 +749,8 @@ void Slave::initialize()
&Slave::shutdown,
&ShutdownMessage::message);
+ install<DrainSlaveMessage>(&Slave::drain);
+
install<PingSlaveMessage>(
&Slave::ping,
&PingSlaveMessage::connected);
@@ -982,6 +984,24 @@ void Slave::shutdown(const UPID& from, const string& message)
}
+void Slave::drain(
+ const UPID& from,
+ DrainSlaveMessage&& drainSlaveMessage)
+{
+ LOG(INFO)
+ << "Checkpointing DrainConfig. Previous drain config was "
+ << (drainConfig.isSome() ? stringify(drainConfig.get()) : "NONE")
+ << ", new drain config is " << drainSlaveMessage.config();
+
+ CHECK_SOME(state::checkpoint(
+ paths::getDrainConfigPath(metaDir, info.id()),
+ drainSlaveMessage.config()))
+ << "Failed to checkpoint DrainConfig";
+
+ drainConfig = drainSlaveMessage.config();
+}
+
+
void Slave::fileAttached(
const Future<Nothing>& result,
const string& path,
diff --git a/src/slave/slave.hpp b/src/slave/slave.hpp
index 6954f53..dbcceed 100644
--- a/src/slave/slave.hpp
+++ b/src/slave/slave.hpp
@@ -376,6 +376,10 @@ public:
const process::UPID& from,
const AcknowledgeOperationStatusMessage& acknowledgement);
+ void drain(
+ const process::UPID& from,
+ DrainSlaveMessage&& drainSlaveMessage);
+
void executorLaunched(
const FrameworkID& frameworkId,
const ExecutorID& executorId,
@@ -885,6 +889,10 @@ private:
// Operations that are checkpointed by the agent.
hashmap<UUID, Operation> checkpointedOperations;
+
+ // If the agent is currently draining, contains the configuration used to
+ // drain the agent. If NONE, the agent is not currently draining.
+ Option<DrainConfig> drainConfig;
};