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;
+          }
         }
       }
     }