Jie Yu created MESOS-1417:
-----------------------------

             Summary: Slave should not send terminal status update before 
containerizer update is finished
                 Key: MESOS-1417
                 URL: https://issues.apache.org/jira/browse/MESOS-1417
             Project: Mesos
          Issue Type: Bug
            Reporter: Jie Yu
            Priority: Critical


This starts to become a problem when we introduce the network isolator. Say a 
port P is initially allocated to task A. When task A finishes, if we don't wait 
for containerizer update to finish and send TASK_FINISHED to the master, port P 
might be allocated to some other task B on the same host before it is even 
freed!

{noformat}
void Slave::statusUpdate(const StatusUpdate& update, const UPID& pid)
{
  ...
  if (protobuf::isTerminalState(status.state()) &&
      (executor->queuedTasks.contains(status.task_id()) ||
       executor->launchedTasks.contains(status.task_id()))) {
    executor->terminateTask(status.task_id(), status.state());

    // Tell the isolator to update the resources.
    // TODO(idownes): Wait until this completes.
    CHECK_SOME(executor->resources);
    containerizer->update(executor->containerId, executor->resources.get());
  }

  if (executor->checkpoint) {
    // Ask the status update manager to checkpoint and reliably send the update.
    statusUpdateManager->update(
        update,
        info.id(),
        executor->id,
        executor->containerId)
      .onAny(defer(self(),
                   &Slave::_statusUpdate,
                   lambda::_1,
                   update,
                   pid));
  } else {
    ...
  }
}
{noformat}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to