erl_mesos_scheduler process a wrapper on top of gen_server process.
Each scheduler handler must implement erl_mesos_scheduler behaviour.
erl_mesos_scheduler callbacks:
Module:init(Options) ->
{ok, FrameworkInfo, State} | {stop, Reason}.Data types:
Options = term()
FrameworkInfo = erl_mesos:'FrameworkInfo'()
State = term()
Reason = term()Whenever a erl_mesos_scheduler process is started using
erl_mesos:start_scheduler/4 or erl_mesos_scheduler:start_link/4
this function is called by the new process to initialize the framework.
Module:registered(SchedulerInfo, EventSubscribed, State) ->
{ok, NewState} | {stop, NewState}Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventSubscribed = erl_mesos_scheduler:'Event.Subscribed'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives subscribed event from
Mesos this function is called to handle this event.
Module:disconnected(SchedulerInfo, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process disconnected from
Mesos this function is called to handle the disconnection.
Then the erl_mesos_scheduler process will try to reconnect to one of
the Mesos masters. In case of success reconnection the
Module:reregistered/2 will be called. Otherwise erl_mesos_scheduler
will be stopped.
Module:reregistered(SchedulerInfo, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process reregistered to the Mesos
master this function is called to handle the registration.
Module:offer_rescinded(SchedulerInfo, EventRescind, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventRescind = erl_mesos_scheduler:'Event.Rescind'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives rescind event from
Mesos this function is called to handle this event.
Module:status_update(SchedulerInfo, EventUpdate, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventUpdate = erl_mesos_scheduler:'Event.Update'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives update event from
Mesos this function is called to handle this event.
Module:framework_message(SchedulerInfo, EventMessage, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventMessage = erl_mesos_scheduler:'Event.Message'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives message event from
Mesos this function is called to handle this event.
Module:slave_lost(SchedulerInfo, EventFailure, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventFailure = erl_mesos_scheduler:'Event.Failure'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives failure event without
executor id data from Mesos this function is called to handle this
event.
Module:executor_lost(SchedulerInfo, EventFailure, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventFailure = erl_mesos_scheduler:'Event.Failure'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives failure event with
executor id data from Mesos this function is called to handle this
event.
Module:error(SchedulerInfo, EventError, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
EventError = erl_mesos_scheduler:'Event.Error'()
State = term()
NewState = term()Whenever a erl_mesos_scheduler process receives error event from Mesos
this function is called to handle this event.
Module:handle_info(SchedulerInfo, Info, State) ->
{ok, NewState} | {stop, NewState}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
Info = term()
State = term()
NewState = term()This function is called by a erl_mesos_scheduler it receives any other
message than Mesos event.
Module:terminate(SchedulerInfo, Reason, State) ->
Result.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
Reason = term()
State = term()
Result = term()This function is called by a erl_mesos_scheduler when it is about to
terminate.
erl_mesos_scheduler:teardown(SchedulerInfo) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
Reason = term()Teardown call.
erl_mesos_scheduler:accept(SchedulerInfo, OfferIds, Operations) ->
ok | {error, Reason}.erl_mesos_scheduler:accept(SchedulerInfo, OfferIds, Operations,
Filters) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
OfferIds = [erl_mesos:'OfferID'()]
Operations = [erl_mesos:'Offer.Operation'()]
Filters = undefined | erl_mesos:'Filters'()
Reason = term()Accept call.
erl_mesos_scheduler:decline(SchedulerInfo, OfferIds) ->
ok | {error, Reason}.erl_mesos_scheduler:decline(SchedulerInfo, OfferIds, Filters) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
OfferIds = [erl_mesos:'OfferID'()]
Filters = undefined | erl_mesos:'Filters'()
Reason = term()Decline call.
erl_mesos_scheduler:revive(SchedulerInfo) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
Reason = term()Revive call.
erl_mesos_scheduler:kill(SchedulerInfo, TaskId) ->
ok | {error, Reason}.erl_mesos_scheduler:kill(SchedulerInfo, TaskId, AgentId) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
TaskId = erl_mesos:'TaskID'()
AgentId = undefined | erl_mesos:'AgentID()'
Reason = term()Kill call.
erl_mesos_scheduler:shutdown(SchedulerInfo, ExecutorId) ->
ok | {error, Reason}.erl_mesos_scheduler:shutdown(SchedulerInfo, ExecutorId, AgentId) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
ExecutorId = erl_mesos:'TaskID'()
AgentId = undefined | erl_mesos:'AgentID()'
Reason = term()Shutdown call.
erl_mesos_scheduler:acknowledge(SchedulerInfo, AgentId, TaskId, Uuid) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
AgentId = erl_mesos:'AgentID()'
TaskId = erl_mesos:'TaskID'()
Uuid = binary()
Reason = term()Acknowledge call.
erl_mesos_scheduler:reconcile(SchedulerInfo, CallReconcileTasks) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
CallReconcileTasks = [erl_mesos:'Call.Reconcile.Task'()]
Reason = term()Reconcile call.
erl_mesos_scheduler:reconcile(SchedulerInfo, AgentId, ExecutorId,
Data) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
AgentId = erl_mesos:'AgentID'()
ExecutorId = erl_mesos:'ExecutorID'()
Data = binary()
Reason = term()Reconcile call.
erl_mesos_scheduler:request(SchedulerInfo, Requests) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()
Requests = [erl_mesos:'Request'()]
Reason = term()Request call.
erl_mesos_scheduler:request(SchedulerInfo) ->
ok | {error, Reason}.Data types:
SchedulerInfo = erl_mesos_scheduler:scheduler_info()Suppress call.
Scheduler can be started by calling erl_mesos:start_scheduler/4:
{ok, Pid} = erl_mesos:start_scheduler(Ref, Scheduler, SchedulerOptions, Options)
Ref = term()
Scheduler = module()
SchedulerOptions = term()
Options = erl_mesos_scheduler:options()Refis an unique executor identifier. Usually is atom.Scheduleris a scheduler module.SchedulerOptionsis a term which will be passed to theScheduler:init/1.Optionsis a scheduler options.
Also scheduler process may be started by custom supervisor:
{ok, Pid} = erl_mesos_scheduler:start_link(Ref, Scheduler, SchedulerOptions, Options)
Ref = term()
Scheduler = module()
SchedulerOptions = term()
Options = erl_mesos_scheduler:options()| Name | Default value | Possible types |
|---|---|---|
| master_hosts | [<<"localhost:5000">>] | [string() | binary()] |
| heartbeat_timeout_window | 5000 | pos_integer() |
| request_options | [] | [{atom, term()}] |
| max_num_resubscribe | 1 | non_neg_integer() |
| resubscribe_interval | 0 | non_neg_integer() |
master_hosts - list of hosts which scheduler will use during subscription
or resubscription.
heartbeat_timeout_window - additional timeout value for waiting for heartbeat Mesos event.
request_options - HTTP request options. See https://github.com/benoitc/hackney for details.
Each time when scheduler disconnect from current mesos master it will
try to resubscribe to each host from master_hosts lists max_num_resubscribe
times with resubscribe_interval.
ok = erl_mesos:stop_scheduler(Ref)
Ref = term()erl_mesos_executor process a wrapper on top of gen_server process.
Each executor handler must implement erl_mesos_executor behaviour.
erl_mesos_executor callbacks:
Module:init(Options) ->
{ok, CallSubscribe, State} | {stop, Reason}.Data types:
Options = term()
CallSubscribe = erl_mesos_executor:'Call.Subscribe'()
State = term()
Reason = term()Whenever a erl_mesos_executor process is started using
erl_mesos_executor:start_link/4 this function is called by the new process to
initialize the executor.
-callback registered(executor_info(), 'Event.Subscribed'(), term()) -> {ok, term()} | {stop, term()}.
Module:registered(ExecutorInfo, EventSubscribed, State) ->
{ok, NewState} | {stop, NewState}Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
EventSubscribed = erl_mesos_executor:'Event.Subscribed'()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives subscribed event from
Mesos this function is called to handle this event.
Module:disconnected(ExecutorInfo, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
State = term()
NewState = term()Whenever a erl_mesos_executor process disconnected from
Mesos this function is called to handle the disconnection.
Then the erl_mesos_executor process will try to reconnect to the
Mesos slave if checkpoint is enabled.
Module:reregister(ExecutorInfo, State) ->
{ok, CallSubscribe, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
State = term()
CallSubscribe = erl_mesos_executor:'Call.Subscribe'()
NewState = term()Whenever a erl_mesos_executor process will try to reregistered to the Mesos
slave this function is called before registration to initialize it.
Module:reregistered(ExecutorInfo, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
State = term()
NewState = term()Whenever a erl_mesos_executor process reregistered to the Mesos slave this
function is called to handle the registration.
Module:launch_task(ExecutorInfo, EventLaunch, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
EventLaunch = erl_mesos_executor:'Event.Launch'()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives launch task event from
Mesos this function is called to handle this event.
Module:kill_task(ExecutorInfo, EventKill, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
EventKill = erl_mesos_executor:'Event.Kill'()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives kill task event from
Mesos this function is called to handle this event.
Module:acknowledged(ExecutorInfo, EventAcknowledged, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
EventAcknowledged = erl_mesos_executor:'Event.Acknowledged'()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives acknowledged event from
Mesos this function is called to handle this event.
Module:framework_message(ExecutorInfo, EventMessage, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
EventMessage = erl_mesos_executor:'Event.Message'()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives framework message event from
Mesos this function is called to handle this event.
Module:error(ExecutorInfo, EventError, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
EventError = erl_mesos_executor:'Event.Error'()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives error event from
Mesos this function is called to handle this event.
Module:shutdown(ExecutorInfo, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
State = term()
NewState = term()Whenever a erl_mesos_executor process receives shutdown event from
Mesos this function is called to handle this event.
Module:handle_info(ExecutorInfo, Info, State) ->
{ok, NewState} | {stop, NewState}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
Info = term()
State = term()
NewState = term()This function is called by a erl_mesos_executor it receives any other
message than Mesos event.
Module:terminate(ExecutorInfo, Reason, State) ->
Result.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
Reason = term()
State = term()
Result = term()This function is called by a erl_mesos_executor when it is about to
terminate.
erl_mesos_executor:update(ExecutorInfo, TaskStatus) ->
ok | {error, Reason}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
TaskStatus = erl_mesos:'TaskStatus'()
Reason = term()Update call.
erl_mesos_executor:message(ExecutorInfo, Data) ->
ok | {error, Reason}.Data types:
ExecutorInfo = erl_mesos_executor:executor_info()
Data = binary()
Reason = term()Message call.
Executor can be started by calling erl_mesos_executor:start_link/4:
{ok, Pid} = erl_mesos_executor:start_link(Ref, Executor, ExecutorOptions, Options)
Ref = term()
Executor = module()
ExecutorOptions = term()
Options = erl_mesos_executor:options()Refis an unique executor identifier. Usually is atom.Executoris a executor module.ExecutorOptionsis a term which will be passed to theExecutor:init/1.Optionsis a executor options.
| Name | Default value | Possible types |
|---|---|---|
| request_options | [] | [{atom, term()}] |
request_options - HTTP request options. See https://github.com/benoitc/hackney for details.