You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by qi...@apache.org on 2019/08/22 06:32:32 UTC
[mesos] branch master updated: Recovered network info for
nested/standalone containers in CNI isolator.
This is an automated email from the ASF dual-hosted git repository.
qianzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new adac620 Recovered network info for nested/standalone containers in CNI isolator.
adac620 is described below
commit adac620f1b5d600c3c5685569a0a8f1b0cc5572d
Author: Qian Zhang <zh...@gmail.com>
AuthorDate: Mon Jul 29 15:21:15 2019 +0800
Recovered network info for nested/standalone containers in CNI isolator.
Review: https://reviews.apache.org/r/71174
---
include/mesos/slave/containerizer.proto | 3 +++
src/common/protobuf_utils.cpp | 5 +++++
src/common/protobuf_utils.hpp | 1 +
src/slave/containerizer/mesos/containerizer.cpp | 4 ++++
.../mesos/isolators/network/cni/cni.cpp | 20 ++++++++++++++++----
5 files changed, 29 insertions(+), 4 deletions(-)
diff --git a/include/mesos/slave/containerizer.proto b/include/mesos/slave/containerizer.proto
index 3e5b667..8b1a268 100644
--- a/include/mesos/slave/containerizer.proto
+++ b/include/mesos/slave/containerizer.proto
@@ -71,6 +71,9 @@ message ContainerState {
// This field only exists for top level containers.
optional ExecutorInfo executor_info = 1;
+ // This field only exists for nested containers and standalone containers.
+ optional ContainerInfo container_info = 6;
+
// The container Id.
required ContainerID container_id = 2;
diff --git a/src/common/protobuf_utils.cpp b/src/common/protobuf_utils.cpp
index 64777c0..8f143e5 100644
--- a/src/common/protobuf_utils.cpp
+++ b/src/common/protobuf_utils.cpp
@@ -1179,6 +1179,7 @@ ContainerLimitation createContainerLimitation(
ContainerState createContainerState(
const Option<ExecutorInfo>& executorInfo,
+ const Option<ContainerInfo>& containerInfo,
const ContainerID& containerId,
pid_t pid,
const string& directory)
@@ -1189,6 +1190,10 @@ ContainerState createContainerState(
state.mutable_executor_info()->CopyFrom(executorInfo.get());
}
+ if (containerInfo.isSome()) {
+ state.mutable_container_info()->CopyFrom(containerInfo.get());
+ }
+
state.mutable_container_id()->CopyFrom(containerId);
state.set_pid(pid);
state.set_directory(directory);
diff --git a/src/common/protobuf_utils.hpp b/src/common/protobuf_utils.hpp
index 5d6a35d..93ee42a 100644
--- a/src/common/protobuf_utils.hpp
+++ b/src/common/protobuf_utils.hpp
@@ -398,6 +398,7 @@ mesos::slave::ContainerLimitation createContainerLimitation(
mesos::slave::ContainerState createContainerState(
const Option<ExecutorInfo>& executorInfo,
+ const Option<ContainerInfo>& containerInfo,
const ContainerID& id,
pid_t pid,
const std::string& directory);
diff --git a/src/slave/containerizer/mesos/containerizer.cpp b/src/slave/containerizer/mesos/containerizer.cpp
index 9030af1..16149a1 100644
--- a/src/slave/containerizer/mesos/containerizer.cpp
+++ b/src/slave/containerizer/mesos/containerizer.cpp
@@ -894,6 +894,7 @@ Future<Nothing> MesosContainerizerProcess::recover(
ContainerState executorRunState =
protobuf::slave::createContainerState(
executorInfo,
+ None(),
run->id.get(),
run->forkedPid.get(),
directory);
@@ -1094,6 +1095,9 @@ Future<Nothing> MesosContainerizerProcess::recover(
ContainerState state =
protobuf::slave::createContainerState(
None(),
+ config.isSome() && config->has_container_info() ?
+ Option<ContainerInfo>(config->container_info()) :
+ Option<ContainerInfo>::none(),
containerId,
container->pid.get(),
container->directory.get());
diff --git a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
index 8d03733..4142160 100644
--- a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
+++ b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
@@ -539,10 +539,22 @@ Try<Nothing> NetworkCniIsolatorProcess::_recover(
containerNetwork.ifName = interfaces->front();
if (state.isSome()) {
- foreach (const mesos::NetworkInfo& networkInfo,
- state->executor_info().container().network_infos()) {
- if (networkInfo.name() == networkName) {
- containerNetwork.networkInfo = networkInfo;
+ if (state->has_executor_info()) {
+ // This is the case that executor container joins CNI network.
+ foreach (const mesos::NetworkInfo& networkInfo,
+ state->executor_info().container().network_infos()) {
+ if (networkInfo.name() == networkName) {
+ containerNetwork.networkInfo = networkInfo;
+ }
+ }
+ } else if (state->has_container_info()) {
+ // This is the case that nested container or standalone container
+ // joins CNI network.
+ foreach (const mesos::NetworkInfo& networkInfo,
+ state->container_info().network_infos()) {
+ if (networkInfo.name() == networkName) {
+ containerNetwork.networkInfo = networkInfo;
+ }
}
}
}