mesos-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jie Yu" <yujie....@gmail.com>
Subject Re: Review Request 22224: Added an abstraction for launching operations in a subprocess.
Date Wed, 04 Jun 2014 18:49:17 GMT


> 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
> 
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message