[
https://issues.apache.org/jira/browse/MESOS-1102?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13938124#comment-13938124
]
Nikita Vetoshkin commented on MESOS-1102:
-----------------------------------------
I'd rather vote too for having a way to set all common process attributes via
parameters and marking {{inChild}} function as "at your own risk".
List of common attributes isn't that big and hard to implement:
* {{argv}}
* {{env}}
* {{uid/gid}}
* {{cwd}}
* {{rlimits}}
* {{nice}} ?
> Add ability to process::subprocess to run function within child context
> -----------------------------------------------------------------------
>
> 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.2#6252)