You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2016/01/25 05:13:49 UTC

[07/11] mesos git commit: Changed ContainerLogger and Fetcher to not duplicate FDs.

Changed ContainerLogger and Fetcher to not duplicate FDs.

This change shifts the burden of FD lifecycle management away from
ContainerLogger module writers.

This change also cleans up the Fetcher code slightly.

Review: https://reviews.apache.org/r/41780/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/2fb5a917
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/2fb5a917
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/2fb5a917

Branch: refs/heads/master
Commit: 2fb5a91765cdc91239f43904ca013e62e14ed897
Parents: a93a58e
Author: Joseph Wu <jo...@mesosphere.io>
Authored: Wed Jan 20 16:45:40 2016 -0800
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Sun Jan 24 20:13:22 2016 -0800

----------------------------------------------------------------------
 include/mesos/slave/container_logger.hpp | 6 +++++-
 src/slave/containerizer/fetcher.cpp      | 9 ++-------
 2 files changed, 7 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/2fb5a917/include/mesos/slave/container_logger.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/slave/container_logger.hpp b/include/mesos/slave/container_logger.hpp
index a236207..9623b0c 100644
--- a/include/mesos/slave/container_logger.hpp
+++ b/include/mesos/slave/container_logger.hpp
@@ -78,7 +78,11 @@ public:
 
       static IO FD(int fd)
       {
-        return IO(process::Subprocess::FD(fd));
+        // NOTE: The FD is not duplicated and will be closed (as seen by the
+        // agent process) when the container is spawned.  This shifts the
+        // burden of FD-lifecycle management into the Containerizer.
+        return IO(process::Subprocess::FD(
+            fd, process::Subprocess::IO::OWNED));
       }
 
       operator process::Subprocess::IO () const { return io; }

http://git-wip-us.apache.org/repos/asf/mesos/blob/2fb5a917/src/slave/containerizer/fetcher.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/fetcher.cpp b/src/slave/containerizer/fetcher.cpp
index 4ac9149..f7e3f7d 100644
--- a/src/slave/containerizer/fetcher.cpp
+++ b/src/slave/containerizer/fetcher.cpp
@@ -763,13 +763,11 @@ Future<Nothing> FetcherProcess::run(
   Try<Subprocess> fetcherSubprocess = subprocess(
       command,
       Subprocess::PIPE(),
-      Subprocess::FD(out.get()),
-      Subprocess::FD(err.get()),
+      Subprocess::FD(out.get(), Subprocess::IO::OWNED),
+      Subprocess::FD(err.get(), Subprocess::IO::OWNED),
       environment);
 
   if (fetcherSubprocess.isError()) {
-    os::close(out.get());
-    os::close(err.get());
     return Failure("Failed to execute mesos-fetcher: " +
                    fetcherSubprocess.error());
   }
@@ -811,9 +809,6 @@ Future<Nothing> FetcherProcess::run(
     .onAny(defer(self(), [=](const Future<Nothing>&) {
       // Clear the subprocess PID remembered from running mesos-fetcher.
       subprocessPids.erase(containerId);
-
-      os::close(out.get());
-      os::close(err.get());
     }));
 }