| 548 | |
| 549 | |
| 550 | Future<Option<ContainerLaunchInfo>> CgroupsIsolatorProcess::_prepare( |
| 551 | const ContainerID& containerId, |
| 552 | const ContainerConfig& containerConfig, |
| 553 | const vector<Future<Nothing>>& futures) |
| 554 | { |
| 555 | vector<string> errors; |
| 556 | foreach (const Future<Nothing>& future, futures) { |
| 557 | if (!future.isReady()) { |
| 558 | errors.push_back((future.isFailed() |
| 559 | ? future.failure() |
| 560 | : "discarded")); |
| 561 | } |
| 562 | } |
| 563 | |
| 564 | if (errors.size() > 0) { |
| 565 | return Failure( |
| 566 | "Failed to prepare subsystems: " + |
| 567 | strings::join(";", errors)); |
| 568 | } |
| 569 | |
| 570 | return update( |
| 571 | containerId, |
| 572 | containerConfig.resources(), |
| 573 | containerConfig.limits()) |
| 574 | .then(defer( |
| 575 | PID<CgroupsIsolatorProcess>(this), |
| 576 | &CgroupsIsolatorProcess::__prepare, |
| 577 | containerId, |
| 578 | containerConfig)); |
| 579 | } |
| 580 | |
| 581 | |
| 582 | Future<Option<ContainerLaunchInfo>> CgroupsIsolatorProcess::__prepare( |