mesos-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Adam B (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (MESOS-1102) Further extensions to process::subprocess
Date Tue, 07 Apr 2015 10:25:12 GMT

    [ https://issues.apache.org/jira/browse/MESOS-1102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14482954#comment-14482954
] 

Adam B commented on MESOS-1102:
-------------------------------

[~tillt] Perhaps you'd like to create new finer-grained tickets for the other improvements
you suggested.

> Further extensions to process::subprocess
> -----------------------------------------
>
>                 Key: MESOS-1102
>                 URL: https://issues.apache.org/jira/browse/MESOS-1102
>             Project: Mesos
>          Issue Type: Improvement
>          Components: libprocess
>    Affects Versions: 0.19.0
>            Reporter: Till Toenshoff
>            Assignee: Till Toenshoff
>            Priority: Minor
>              Labels: libprocess, subprocess
>
> I would like to propose the addition of a way to run a function within the forked child
context to process::subprocess.
> The subprocess implementation is already extremely valuable and will allow us to remove
many scattered, similar implementations within mesos once it is flexible enough.
> The recent addition (in review) of adding an environment map is just the right step into
that direction.
> However, there still are areas, mostly within containerizer specifics that can not be
replaced by the subprocess implementation as is, IMHO because running a function in the child
context is missing. See e.g. /src/slave/containerizer/launcher.cpp, /src/slave/containerizer/mesos_containerizer.cpp
and last but not least the pluggable_containerizer (in review).
> My envisioned approach would look something like this:
> {noformat}
> // Runs the provided command in a subprocess.
> // NOTE: Take extra care about the design of the inChild
> // lambda as it must not contain any async unsafe code.
> Try<Subprocess> subprocess(
>     const std::string& command,
>     const std::map<std::string, std::string>& env = std::map<std::string,
std::string>(),
>     const lambda::function<void()>& inChild = NULL);
> {noformat}
> Example usage:
> {noformat}
> struct ChildFunction {
>   ChildFunction(const string& directory) : directory(directory) {};
>   void operator ()()
>   {
>     if (::chdir(directory) < 0) {
>       ABORT("Failed to chdir");
>     }
>   }
>   const string& directory;
> };
> Try<Subprocess> external = subprocess(
>     "foo",
>     map<string, string>(),
>     ChildFunction("bar");
> {noformat}
> Please let me know what you think about this or if I was on a wrong track. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message