[
https://issues.apache.org/jira/browse/MESOS-1873?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
R.B. Boyer updated MESOS-1873:
------------------------------
Comment: was deleted
(was: Attaching a second attempt at the patch
(mesos_executor_overshare.v2.diff), this time I have reliably reproduced the
fix in a test environment by recompiling the library and swapping it out on a
running system.)
> Don't pass task-related arguments to mesos-executor
> ---------------------------------------------------
>
> Key: MESOS-1873
> URL: https://issues.apache.org/jira/browse/MESOS-1873
> Project: Mesos
> Issue Type: Bug
> Components: slave
> Affects Versions: 0.20.1
> Environment: Linux 3.13.0-35-generic x86_64 Ubuntu-Precise
> Reporter: R.B. Boyer
> Attachments: mesos_executor_overshare.v2.diff
>
>
> *TL;DR:* When a command executor is used with {{shell=false}} and an array of
> arguments, those same arguments are directly passed to {{mesos-executor}}
> which fails miserably.
> ---
> Attempting to launch a task using the command executor with {{shell=false}}
> and passing arguments fails strangely.
> {noformat:title=CommandInfo proto}
> command {
> value: "/my_program"
> user: "app"
> shell: false
> arguments: "my_program"
> arguments: "--start"
> arguments: "2014-10-06"
> arguments: "--end"
> arguments: "2014-10-07"
> }
> {noformat}
> Dies with:
> {noformat:title=stderr}
> Failed to load unknown flag 'end'
> Usage: my_program [...]
> Supported options:
> --[no-]help Prints this help message (default: false)
> --[no-]override Whether or not to override the command the executor
> should run
> when the task is launched. Only this flag is expected
> to be on
> the command line and all arguments after the flag will
> be used as
> the subsequent 'argv' to be used with 'execvp'
> (default: false)
> {noformat}
> This is coming from a failed attempt to have the slave launch
> {{mesos-executor}}. This is due to an adverse interaction between new
> {{CommandInfo}} features and this blurb from {{src/slave/slave.cpp}}:
> {code}
> // Copy the CommandInfo to get the URIs and environment, but
> // update it to invoke 'mesos-executor' (unless we couldn't
> // resolve 'mesos-executor' via 'realpath', in which case just
> // echo the error and exit).
> executor.mutable_command()->MergeFrom(task.command());
> Result<string> path = os::realpath(
> path::join(flags.launcher_dir, "mesos-executor"));
> if (path.isSome()) {
> executor.mutable_command()->set_value(path.get());
> } else {
> executor.mutable_command()->set_value(
> "echo '" +
> (path.isError()
> ? path.error()
> : "No such file or directory") +
> "'; exit 1");
> }
> {code}
> This is failing to:
> * clear the {{arguments}} field
> * probably explicitly restore {{shell=true}}
> * clear {{container}} ?
> * clear {{user}} ?
> I was able to quickly fix this locally by making a man-in-the-middle program
> at {{/usr/local/libexec/mesos/mesos-executor}} that stripped all args before
> exec-ing the real {{mesos-executor}} binary.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)