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