This is an automated email from the ASF dual-hosted git repository.

abudnik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit e855f1ee7fdcc812cf2bc48d198054a49c5320f2
Author: Andrei Budnik <abud...@mesosphere.com>
AuthorDate: Tue Mar 3 14:57:09 2020 +0100

    Moved cgroup path helpers to `paths.hpp`.
    
    Review: https://reviews.apache.org/r/72121/
---
 .../mesos/isolators/network/ports.cpp              |  5 +-
 src/slave/containerizer/mesos/linux_launcher.cpp   | 77 ++++------------------
 src/slave/containerizer/mesos/linux_launcher.hpp   |  6 --
 src/slave/containerizer/mesos/paths.cpp            | 60 +++++++++++++++++
 src/slave/containerizer/mesos/paths.hpp            | 14 ++++
 5 files changed, 88 insertions(+), 74 deletions(-)

diff --git a/src/slave/containerizer/mesos/isolators/network/ports.cpp 
b/src/slave/containerizer/mesos/isolators/network/ports.cpp
index fec74d3..86d3053 100644
--- a/src/slave/containerizer/mesos/isolators/network/ports.cpp
+++ b/src/slave/containerizer/mesos/isolators/network/ports.cpp
@@ -38,7 +38,7 @@
 
 #include "slave/constants.hpp"
 
-#include "slave/containerizer/mesos/linux_launcher.hpp"
+#include "slave/containerizer/mesos/paths.hpp"
 
 using std::list;
 using std::set;
@@ -94,7 +94,8 @@ collectContainerListeners(
 
   foreach (const ContainerID& containerId, containerIds) {
     // Reconstruct the cgroup path from the container ID.
-    string cgroup = LinuxLauncher::cgroup(cgroupsRoot, containerId);
+    string cgroup =
+      containerizer::paths::getCgroupPath(cgroupsRoot, containerId);
 
     VLOG(1) << "Checking processes for container " << containerId
             << " in cgroup " << cgroup;
diff --git a/src/slave/containerizer/mesos/linux_launcher.cpp 
b/src/slave/containerizer/mesos/linux_launcher.cpp
index c10092b..0c8c890 100644
--- a/src/slave/containerizer/mesos/linux_launcher.cpp
+++ b/src/slave/containerizer/mesos/linux_launcher.cpp
@@ -37,7 +37,6 @@
 
 #include "mesos/resources.hpp"
 
-#include "slave/containerizer/mesos/constants.hpp"
 #include "slave/containerizer/mesos/linux_launcher.hpp"
 #include "slave/containerizer/mesos/paths.hpp"
 
@@ -105,10 +104,6 @@ private:
 
   Future<Nothing> _destroy(const ContainerID& containerId);
 
-  // Helper for parsing the cgroup path to determine the container ID
-  // it belongs to.
-  Option<ContainerID> parse(const string& cgroup);
-
   static const string subsystem;
   const Flags flags;
   const string freezerHierarchy;
@@ -194,19 +189,6 @@ bool LinuxLauncher::available()
 }
 
 
-string LinuxLauncher::cgroup(
-    const string& cgroupsRoot,
-    const ContainerID& containerId)
-{
-  return path::join(
-      cgroupsRoot,
-      containerizer::paths::buildPath(
-          containerId,
-          CGROUP_SEPARATOR,
-          containerizer::paths::JOIN));
-}
-
-
 LinuxLauncher::LinuxLauncher(
     const Flags& flags,
     const string& freezerHierarchy,
@@ -326,7 +308,9 @@ Future<hashset<ContainerID>> LinuxLauncherProcess::recover(
     // created (e.g., in the future we might have nested containers
     // that are managed by something else rooted within the freezer
     // hierarchy).
-    Option<ContainerID> containerId = parse(cgroup);
+    Option<ContainerID> containerId =
+      containerizer::paths::parseCgroupPath(flags.cgroups_root, cgroup);
+
     if (containerId.isNone()) {
       LOG(INFO) << "Not recovering cgroup " << cgroup;
       continue;
@@ -510,7 +494,9 @@ Try<pid_t> LinuxLauncherProcess::fork(
   parentHooks.emplace_back(Subprocess::ParentHook([=](pid_t child) {
     return cgroups::isolate(
         freezerHierarchy,
-        LinuxLauncher::cgroup(this->flags.cgroups_root, containerId),
+        containerizer::paths::getCgroupPath(
+            this->flags.cgroups_root,
+            containerId),
         child);
   }));
 
@@ -519,7 +505,9 @@ Try<pid_t> LinuxLauncherProcess::fork(
     parentHooks.emplace_back(Subprocess::ParentHook([=](pid_t child) {
       return cgroups::isolate(
           systemdHierarchy.get(),
-          LinuxLauncher::cgroup(this->flags.cgroups_root, containerId),
+          containerizer::paths::getCgroupPath(
+              this->flags.cgroups_root,
+              containerId),
           child);
     }));
   }
@@ -591,7 +579,7 @@ Future<Nothing> LinuxLauncherProcess::destroy(const 
ContainerID& containerId)
   }
 
   const string cgroup =
-    LinuxLauncher::cgroup(flags.cgroups_root, container->id);
+    containerizer::paths::getCgroupPath(flags.cgroups_root, container->id);
 
   // We remove the container so that we don't attempt multiple
   // destroys simultaneously and no other functions will return
@@ -641,7 +629,7 @@ Future<Nothing> LinuxLauncherProcess::_destroy(const 
ContainerID& containerId)
   }
 
   const string cgroup =
-    LinuxLauncher::cgroup(flags.cgroups_root, containerId);
+    containerizer::paths::getCgroupPath(flags.cgroups_root, containerId);
 
   if (!cgroups::exists(systemdHierarchy.get(), cgroup)) {
     return Nothing();
@@ -675,49 +663,6 @@ Future<ContainerStatus> LinuxLauncherProcess::status(
   return status;
 }
 
-
-Option<ContainerID> LinuxLauncherProcess::parse(const string& cgroup)
-{
-  Option<ContainerID> current;
-
-  // Start not expecting to see a separator and adjust after each
-  // non-separator we see.
-  bool separator = false;
-
-  vector<string> tokens = strings::tokenize(
-      strings::remove(cgroup, flags.cgroups_root, strings::PREFIX),
-      stringify(os::PATH_SEPARATOR));
-
-  for (size_t i = 0; i < tokens.size(); i++) {
-    if (separator && tokens[i] == CGROUP_SEPARATOR) {
-      separator = false;
-
-      // If the cgroup has CGROUP_SEPARATOR as the last segment,
-      // should just ignore it because this cgroup belongs to us.
-      if (i == tokens.size() - 1) {
-        return None();
-      } else {
-        continue;
-      }
-    } else if (separator) {
-      return None();
-    } else {
-      separator = true;
-    }
-
-    ContainerID id;
-    id.set_value(tokens[i]);
-
-    if (current.isSome()) {
-      id.mutable_parent()->CopyFrom(current.get());
-    }
-
-    current = id;
-  }
-
-  return current;
-}
-
 } // namespace slave {
 } // namespace internal {
 } // namespace mesos {
diff --git a/src/slave/containerizer/mesos/linux_launcher.hpp 
b/src/slave/containerizer/mesos/linux_launcher.hpp
index 993a264..8d63411 100644
--- a/src/slave/containerizer/mesos/linux_launcher.hpp
+++ b/src/slave/containerizer/mesos/linux_launcher.hpp
@@ -37,12 +37,6 @@ public:
   // Returns 'true' if prerequisites for using LinuxLauncher are available.
   static bool available();
 
-  // Helper for determining the cgroup for a container (i.e., the path
-  // in a cgroup subsystem).
-  static std::string cgroup(
-      const std::string& cgroupsRoot,
-      const ContainerID& containerId);
-
   ~LinuxLauncher() override;
 
   process::Future<hashset<ContainerID>> recover(
diff --git a/src/slave/containerizer/mesos/paths.cpp 
b/src/slave/containerizer/mesos/paths.cpp
index b028795..8230028 100644
--- a/src/slave/containerizer/mesos/paths.cpp
+++ b/src/slave/containerizer/mesos/paths.cpp
@@ -22,7 +22,9 @@
 #include "common/protobuf_utils.hpp"
 #include "common/resources_utils.hpp"
 
+#include "slave/containerizer/mesos/constants.hpp"
 #include "slave/containerizer/mesos/paths.hpp"
+
 #include "slave/state.hpp"
 
 #ifndef __WINDOWS__
@@ -594,6 +596,64 @@ Try<string> getParentShmPath(
   return parentShmPath;
 }
 
+
+string getCgroupPath(
+    const string& cgroupsRoot,
+    const ContainerID& containerId)
+{
+  return path::join(
+      cgroupsRoot,
+      containerizer::paths::buildPath(
+          containerId,
+          CGROUP_SEPARATOR,
+          containerizer::paths::JOIN));
+}
+
+
+Option<ContainerID> parseCgroupPath(
+    const string& cgroupsRoot,
+    const string& cgroup)
+{
+  Option<ContainerID> current;
+
+  // Start not expecting to see a separator and adjust after each
+  // non-separator we see.
+  bool separator = false;
+
+  vector<string> tokens = strings::tokenize(
+      strings::remove(cgroup, cgroupsRoot, strings::PREFIX),
+      stringify(os::PATH_SEPARATOR));
+
+  for (size_t i = 0; i < tokens.size(); i++) {
+    if (separator && tokens[i] == CGROUP_SEPARATOR) {
+      separator = false;
+
+      // If the cgroup has CGROUP_SEPARATOR as the last segment,
+      // should just ignore it because this cgroup belongs to us.
+      if (i == tokens.size() - 1) {
+        return None();
+      } else {
+        continue;
+      }
+    } else if (separator) {
+      return None();
+    } else {
+      separator = true;
+    }
+
+    ContainerID id;
+    id.set_value(tokens[i]);
+
+    if (current.isSome()) {
+      id.mutable_parent()->CopyFrom(current.get());
+    }
+
+    current = id;
+  }
+
+  return current;
+}
+
 } // namespace paths {
 } // namespace containerizer {
 } // namespace slave {
diff --git a/src/slave/containerizer/mesos/paths.hpp 
b/src/slave/containerizer/mesos/paths.hpp
index e35d380..5f188e5 100644
--- a/src/slave/containerizer/mesos/paths.hpp
+++ b/src/slave/containerizer/mesos/paths.hpp
@@ -272,6 +272,20 @@ Try<std::string> getParentShmPath(
     const std::string runtimeDir,
     const ContainerID& containerId);
 
+
+// Helper for determining the cgroup for a container (i.e., the path
+// in a cgroup subsystem).
+std::string getCgroupPath(
+    const std::string& cgroupsRoot,
+    const ContainerID& containerId);
+
+
+// Helper for parsing the cgroup path to determine the container ID
+// it belongs to.
+Option<ContainerID> parseCgroupPath(
+    const std::string& cgroupsRoot,
+    const std::string& cgroup);
+
 } // namespace paths {
 } // namespace containerizer {
 } // namespace slave {

Reply via email to