Hi everyone,

As a part of our current sprint at Mesosphere, we are striving to work on
and land an extension to the modules subsystem which we (per
https://issues.apache.org/jira/browse/MESOS-2060) have referred to as
‘hooks’. We wanted to give some background to this feature and will be
asking for input to the proposal.

The term is inspired by Apache Web Server hooks (
http://httpd.apache.org/docs/2.2/developer/hooks.html) which allows modules
to tie into the request processing life-cycle. It is different from the
existing modules capability, in that the usual request processing remains
untouched (and isn’t replaced fully as a regular module would do).

In our case, we are interested in being able to tie into the life-cycle of
tasks to run pre and post-actions during task launch in the master and
slave processes. In general, it adds capability for all sorts of external
tooling and instrumentation.
The main idea is to enable modules to register themselves as hook
providers. For example through a new flag: --hooks=”module_name1,
module_name2, ...”

A new ‘HookManager’ will query each module and get an object back of type ‘
Hooks’ which has virtual member functions which points to the desired
callbacks in the module.


For example,

class Hooks {

public:

 virtual TaskInfo preMasterLaunchTask(TaskInfo task) = 0;

 virtual TaskInfo postMasterLaunchTask(TaskInfo task) = 0;

 virtual TaskInfo preSlaveLaunchTask(TaskInfo task) = 0;

 virtual TaskInfo postSlaveLaunchTask(TaskInfo task) = 0;

 // ...

};

An example of the call site in Mesos could be:

Master::launchTask(..., TaskInfo task, ...)

{

 task = HookManager::preMasterLaunchTask(task);

 ...

 task = HookManager::postMasterLaunchTask(task);

}

We are not tied at all to how the hooks will be named (they could
potentially live in Master, Slave, Allocator, ...) subclasses, return Try,
Option, Result to indicate failure and so on.



Introducing the hook functionality is similar to what we’ve done in the
past with Isolators for the MesosContainerizer that enables people to
provide new functionality for launching containers. In that same way, we
want people to be able to provide new functionality with respect to
launching tasks without changing the existing task flow.


We’d love to get people’s feedback so we can move forward!


Thanks,
Niklas

Reply via email to