This is an automated email from the ASF dual-hosted git repository.
qianzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new 014431e Updated volume manager to support user specified target path
root.
014431e is described below
commit 014431e3c1b98e514e327318b52e5c54cc6174df
Author: Qian Zhang <[email protected]>
AuthorDate: Mon Aug 17 19:22:48 2020 +0800
Updated volume manager to support user specified target path root.
Review: https://reviews.apache.org/r/72781
---
src/csi/v0_volume_manager.cpp | 29 +++++++++++------------------
src/csi/v0_volume_manager_process.hpp | 1 +
src/csi/v1_volume_manager.cpp | 31 ++++++++++++-------------------
src/csi/v1_volume_manager_process.hpp | 1 +
src/slave/csi_server.cpp | 14 ++++++--------
5 files changed, 31 insertions(+), 45 deletions(-)
diff --git a/src/csi/v0_volume_manager.cpp b/src/csi/v0_volume_manager.cpp
index 9e840a7..42a23ba 100644
--- a/src/csi/v0_volume_manager.cpp
+++ b/src/csi/v0_volume_manager.cpp
@@ -92,7 +92,10 @@ VolumeManagerProcess::VolumeManagerProcess(
runtime(_runtime),
serviceManager(_serviceManager),
metrics(_metrics),
- secretResolver(_secretResolver)
+ secretResolver(_secretResolver),
+ mountRootDir(info.has_target_path_root()
+ ? info.target_path_root()
+ : paths::getMountRootDir(rootDir, info.type(), info.name()))
{
// This should have been validated in `VolumeManager::create`.
CHECK(!services.empty())
@@ -210,9 +213,6 @@ Future<Nothing> VolumeManagerProcess::recover()
}
// Garbage collect leftover mount paths that were failed to remove
before.
- const string mountRootDir =
- paths::getMountRootDir(rootDir, info.type(), info.name());
-
Try<list<string>> mountPaths = paths::getMountPaths(mountRootDir);
if (mountPaths.isError()) {
// TODO(chhsiao): This could indicate that something is seriously
wrong.
@@ -723,8 +723,7 @@ Future<bool> VolumeManagerProcess::_deleteVolume(const
std::string& volumeId)
if (volumeState.node_publish_required()) {
CHECK_EQ(VolumeState::PUBLISHED, volumeState.state());
- const string targetPath = paths::getMountTargetPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string targetPath = paths::getMountTargetPath(mountRootDir,
volumeId);
// NOTE: Normally the volume should have been cleaned up. However this may
// not be true for preprovisioned volumes (e.g., leftover from a previous
@@ -929,8 +928,7 @@ Future<Nothing> VolumeManagerProcess::_publishVolume(const
string& volumeId)
.then(process::defer(self(), &Self::_publishVolume, volumeId));
}
- const string targetPath = paths::getMountTargetPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string targetPath = paths::getMountTargetPath(mountRootDir, volumeId);
// NOTE: The target path will be cleaned up during volume removal.
Try<Nothing> mkdir = os::mkdir(targetPath);
@@ -959,7 +957,7 @@ Future<Nothing> VolumeManagerProcess::_publishVolume(const
string& volumeId)
if (nodeCapabilities->stageUnstageVolume) {
const string stagingPath = paths::getMountStagingPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ mountRootDir, volumeId);
CHECK(os::exists(stagingPath));
request.set_staging_target_path(stagingPath);
@@ -1044,8 +1042,7 @@ Future<Nothing>
VolumeManagerProcess::__publishVolume(const string& volumeId)
.then(process::defer(self(), &Self::__publishVolume, volumeId));
}
- const string stagingPath = paths::getMountStagingPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string stagingPath = paths::getMountStagingPath(mountRootDir,
volumeId);
// NOTE: The staging path will be cleaned up in during volume removal.
Try<Nothing> mkdir = os::mkdir(stagingPath);
@@ -1151,8 +1148,7 @@ Future<Nothing>
VolumeManagerProcess::_unpublishVolume(const string& volumeId)
checkpointVolumeState(volumeId);
}
- const string stagingPath = paths::getMountStagingPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string stagingPath = paths::getMountStagingPath(mountRootDir,
volumeId);
CHECK(os::exists(stagingPath));
@@ -1210,8 +1206,7 @@ Future<Nothing>
VolumeManagerProcess::__unpublishVolume(const string& volumeId)
checkpointVolumeState(volumeId);
}
- const string targetPath = paths::getMountTargetPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string targetPath = paths::getMountTargetPath(mountRootDir, volumeId);
CHECK(os::exists(targetPath));
@@ -1255,9 +1250,7 @@ void VolumeManagerProcess::garbageCollectMountPath(const
string& volumeId)
{
CHECK(!volumes.contains(volumeId));
- const string path = paths::getMountPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
-
+ const string path = paths::getMountPath(mountRootDir, volumeId);
if (os::exists(path)) {
Try<Nothing> rmdir = os::rmdir(path);
if (rmdir.isError()) {
diff --git a/src/csi/v0_volume_manager_process.hpp
b/src/csi/v0_volume_manager_process.hpp
index 1162955..e392c57 100644
--- a/src/csi/v0_volume_manager_process.hpp
+++ b/src/csi/v0_volume_manager_process.hpp
@@ -191,6 +191,7 @@ private:
ServiceManager* serviceManager;
Metrics* metrics;
SecretResolver* secretResolver;
+ const std::string mountRootDir;
Option<std::string> bootId;
Option<PluginCapabilities> pluginCapabilities;
diff --git a/src/csi/v1_volume_manager.cpp b/src/csi/v1_volume_manager.cpp
index 7230676..c05265c 100644
--- a/src/csi/v1_volume_manager.cpp
+++ b/src/csi/v1_volume_manager.cpp
@@ -93,7 +93,10 @@ VolumeManagerProcess::VolumeManagerProcess(
runtime(_runtime),
serviceManager(_serviceManager),
metrics(_metrics),
- secretResolver(_secretResolver)
+ secretResolver(_secretResolver),
+ mountRootDir(info.has_target_path_root()
+ ? info.target_path_root()
+ : paths::getMountRootDir(rootDir, info.type(), info.name()))
{
// This should have been validated in `VolumeManager::create`.
CHECK(!services.empty())
@@ -211,9 +214,6 @@ Future<Nothing> VolumeManagerProcess::recover()
}
// Garbage collect leftover mount paths that were failed to remove
before.
- const string mountRootDir =
- paths::getMountRootDir(rootDir, info.type(), info.name());
-
Try<list<string>> mountPaths = paths::getMountPaths(mountRootDir);
if (mountPaths.isError()) {
// TODO(chhsiao): This could indicate that something is seriously
wrong.
@@ -745,8 +745,7 @@ Future<bool> VolumeManagerProcess::_deleteVolume(const
std::string& volumeId)
if (volumeState.node_publish_required()) {
CHECK_EQ(VolumeState::PUBLISHED, volumeState.state());
- const string targetPath = paths::getMountTargetPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string targetPath = paths::getMountTargetPath(mountRootDir,
volumeId);
// NOTE: Normally the volume should have been cleaned up. However this may
// not be true for preprovisioned volumes (e.g., leftover from a previous
@@ -951,8 +950,7 @@ Future<Nothing> VolumeManagerProcess::_publishVolume(const
string& volumeId)
.then(process::defer(self(), &Self::_publishVolume, volumeId));
}
- const string targetPath = paths::getMountTargetPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string targetPath = paths::getMountTargetPath(mountRootDir, volumeId);
// Ensure the parent directory of the target path exists. The target path
// itself will be created by the plugin.
@@ -984,8 +982,8 @@ Future<Nothing> VolumeManagerProcess::_publishVolume(const
string& volumeId)
*request.mutable_volume_context() = volumeState.volume_context();
if (nodeCapabilities->stageUnstageVolume) {
- const string stagingPath = paths::getMountStagingPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string stagingPath =
+ paths::getMountStagingPath(mountRootDir, volumeId);
CHECK(os::exists(stagingPath));
request.set_staging_target_path(stagingPath);
@@ -1070,8 +1068,7 @@ Future<Nothing>
VolumeManagerProcess::__publishVolume(const string& volumeId)
.then(process::defer(self(), &Self::__publishVolume, volumeId));
}
- const string stagingPath = paths::getMountStagingPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string stagingPath = paths::getMountStagingPath(mountRootDir,
volumeId);
// NOTE: The staging path will be cleaned up in during volume removal.
Try<Nothing> mkdir = os::mkdir(stagingPath);
@@ -1177,8 +1174,7 @@ Future<Nothing>
VolumeManagerProcess::_unpublishVolume(const string& volumeId)
checkpointVolumeState(volumeId);
}
- const string stagingPath = paths::getMountStagingPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string stagingPath = paths::getMountStagingPath(mountRootDir,
volumeId);
CHECK(os::exists(stagingPath));
@@ -1236,8 +1232,7 @@ Future<Nothing>
VolumeManagerProcess::__unpublishVolume(const string& volumeId)
checkpointVolumeState(volumeId);
}
- const string targetPath = paths::getMountTargetPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
+ const string targetPath = paths::getMountTargetPath(mountRootDir, volumeId);
LOG(INFO) << "Calling '/csi.v1.Node/NodeUnpublishVolume' for volume '"
<< volumeId << "'";
@@ -1284,9 +1279,7 @@ void VolumeManagerProcess::garbageCollectMountPath(const
string& volumeId)
{
CHECK(!volumes.contains(volumeId));
- const string path = paths::getMountPath(
- paths::getMountRootDir(rootDir, info.type(), info.name()), volumeId);
-
+ const string path = paths::getMountPath(mountRootDir, volumeId);
if (os::exists(path)) {
Try<Nothing> rmdir = os::rmdir(path);
if (rmdir.isError()) {
diff --git a/src/csi/v1_volume_manager_process.hpp
b/src/csi/v1_volume_manager_process.hpp
index 63dc03e..9f2c1f5 100644
--- a/src/csi/v1_volume_manager_process.hpp
+++ b/src/csi/v1_volume_manager_process.hpp
@@ -191,6 +191,7 @@ private:
ServiceManager* serviceManager;
Metrics* metrics;
SecretResolver* secretResolver;
+ const std::string mountRootDir;
Option<std::string> bootId;
Option<PluginCapabilities> pluginCapabilities;
diff --git a/src/slave/csi_server.cpp b/src/slave/csi_server.cpp
index a9a3995..b435d5d 100644
--- a/src/slave/csi_server.cpp
+++ b/src/slave/csi_server.cpp
@@ -246,16 +246,14 @@ Future<string> CSIServerProcess::publishVolume(
.then([=]() {
CHECK(plugins.contains(volume.plugin_name()));
- const string targetRootDir =
- plugins.at(volume.plugin_name()).info.has_target_path_root()
- ? plugins.at(volume.plugin_name()).info.target_path_root()
- : rootDir;
+ const CSIPluginInfo& info = plugins.at(volume.plugin_name()).info;
+
+ const string mountRootDir = info.has_target_path_root()
+ ? info.target_path_root()
+ : csi::paths::getMountRootDir(rootDir, info.type(), info.name());
return csi::paths::getMountTargetPath(
- csi::paths::getMountRootDir(
- targetRootDir,
- plugins.at(volume.plugin_name()).info.type(),
- plugins.at(volume.plugin_name()).info.name()),
+ mountRootDir,
volume.static_provisioning().volume_id());
});
}