| 222 | } |
| 223 | |
| 224 | Future<Option<mesos::slave::ContainerTermination>> destroy( |
| 225 | const ContainerID& containerId) |
| 226 | { |
| 227 | if (!containers_.contains(containerId)) { |
| 228 | return None(); |
| 229 | } |
| 230 | |
| 231 | const Owned<ContainerData>& containerData = containers_.at(containerId); |
| 232 | |
| 233 | if (containerData->executorId.isSome()) { |
| 234 | CHECK(executors.contains(containerData->executorId.get())); |
| 235 | |
| 236 | const Owned<ExecutorData>& executorData = |
| 237 | executors.at(containerData->executorId.get()); |
| 238 | |
| 239 | if (executorData->driver.get() != nullptr) { |
| 240 | executorData->driver->stop(); |
| 241 | executorData->driver->join(); |
| 242 | } |
| 243 | |
| 244 | executors.erase(containerData->executorId.get()); |
| 245 | } |
| 246 | |
| 247 | ContainerTermination termination; |
| 248 | termination.set_message("Killed executor"); |
| 249 | termination.set_status(0); |
| 250 | |
| 251 | containerData->termination.set(termination); |
| 252 | |
| 253 | containers_.erase(containerId); |
| 254 | terminatedContainers[containerId] = termination; |
| 255 | |
| 256 | return termination; |
| 257 | } |
| 258 | |
| 259 | // Additional destroy method for testing because we won't know the |
| 260 | // ContainerID created for each container. |