> On June 4, 2014, 6:31 p.m., Dominic Hamon wrote: > > src/tests/launcher_tests.cpp, line 70 > > <https://reviews.apache.org/r/22224/diff/1/?file=603296#file603296line70> > > > > we should be able to inject this. we can start with a default for > > production and have tests have access to a method that can override it.
Discussed with Dominic offline, he proposed a way to kill 'path' which I liked a lot. Here is the plan: We will provide a 'launcher::initialize(const std::string& path);'. The 'path' here is the directory I can find the mesos-launcher binary. This 'initialize' should be called before launching any operation (otherwise, launch will fail). So, when the slave initialize, it should call launcher::initialize(flags.launcher_dir); In tests, we should call launcher::initialize(tests::flags::build_dir + "/src"); in tests/environment.hpp - Jie ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/22224/#review44737 ----------------------------------------------------------- On June 3, 2014, 11:46 p.m., Jie Yu wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/22224/ > ----------------------------------------------------------- > > (Updated June 3, 2014, 11:46 p.m.) > > > Review request for mesos, Benjamin Hindman, Ian Downes, and Vinod Kone. > > > Bugs: MESOS-1446 > https://issues.apache.org/jira/browse/MESOS-1446 > > > Repository: mesos-git > > > Description > ------- > > Currently, whenever we want something to be executed in a subprocess, we > create a separate binary (e.g., mesos-fetcher, mesos-executor, mesos-usage, > etc.). This has several drawbacks: > > 1) Code duplication (passing arguments, main function, etc.) > 2) Split logic into multiple files (not good for readability) > > To solve that, I created a generic 'launcher' for 'Operation's. Users can > define their own 'Operation' and 'launch' it in a subprocess. For instance: > > class CustomizedOperation : public Operation > { > public: > class Flags : public flags::FlagsBase > { > Flags(); > Option<string> arg1; > Option<int> arg2; > }; > > protected: > virtual string name() const { return "customized_operation"; } > > virtual int execute() > { > if (arg1.isNone()) { return 1; } > if (arg2.isNone()) { return 1; } > > do_something(arg1.get(), arg2.get()); > } > }; > > In your code, if you want to execute 'CustomizedOperation' in a subprocess, > you can just launch it: > > CustomizedOperation operation; > operation.flags.arg1 = "arg1"; > operation.flags.arg2 = "arg2"; > > operation.launch(flags.launcher_dir + "/mesos-launcher"); > > We will handle the flags passing and parsing for you under the hood. > > > Diffs > ----- > > src/Makefile.am ffde59b > src/launcher/launcher.hpp PRE-CREATION > src/launcher/launcher.cpp PRE-CREATION > src/launcher/main.cpp PRE-CREATION > src/tests/launcher_tests.cpp PRE-CREATION > > Diff: https://reviews.apache.org/r/22224/diff/ > > > Testing > ------- > > make check > > > Thanks, > > Jie Yu > >