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)