[ 
https://issues.apache.org/jira/browse/MESOS-9000?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Rukletsov reassigned MESOS-9000:
------------------------------------------

            Shepherd: Alexander Rukletsov
            Assignee: Benno Evers
              Sprint: Mesosphere Sprint 2018-27
        Story Points: 3
    Target Version/s: 1.7.0
              Labels: mesosphere  (was: )
         Component/s: HTTP API

> Operator API event stream can miss task status updates
> ------------------------------------------------------
>
>                 Key: MESOS-9000
>                 URL: https://issues.apache.org/jira/browse/MESOS-9000
>             Project: Mesos
>          Issue Type: Bug
>          Components: HTTP API
>            Reporter: Benno Evers
>            Assignee: Benno Evers
>            Priority: Major
>              Labels: mesosphere
>
> As of now, the master only sends TaskUpdated messages to subscribers when the 
> latest known task state on the agent changed:
> {noformat}
>   // src/master/master.cpp
>   if (!protobuf::isTerminalState(task->state())) {
>     if (status.state() != task->state()) {
>       sendSubscribersUpdate = true;
>     }
>     task->set_state(latestState.getOrElse(status.state()));
>   }
> {noformat}
> The latest state is set like this:
> {noformat}
> // src/messages/messages.proto
> message StatusUpdate {
>   [...]
>   // This corresponds to the latest state of the task according to the
>   // agent. Note that this state might be different than the state in
>   // 'status' because task status update manager queues updates. In
>   // other words, 'status' corresponds to the update at top of the
>   // queue and 'latest_state' corresponds to the update at bottom of
>   // the queue.
>   optional TaskState latest_state = 7;
> }
> {noformat}
> However, the `TaskStatus` message included in an `TaskUpdated` event is the 
> event at the bottom of the queue when the update was sent.
> So we can easily get in a situation where e.g. the first TaskUpdated has 
> .status.state == TASK_STARTING and .state == TASK_RUNNING, and the second 
> update with .status.state == TASK_RUNNNING and .state == TASK_RUNNING would 
> not get delivered because the latest known state did not change.
> This implies that schedulers can not reliably wait for the status information 
> corresponding to specific task state, since there is no guarantee that 
> subscribers get notified during the time when this status update will be 
> included in the status field.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to