You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2016/04/05 18:46:54 UTC
mesos git commit: Adjusted the status semantics in CNI isolator.
Repository: mesos
Updated Branches:
refs/heads/master e81046dc1 -> 5fcc857ef
Adjusted the status semantics in CNI isolator.
This patch also does a few minor cleanups.
Review: https://reviews.apache.org/r/45620
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/5fcc857e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/5fcc857e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/5fcc857e
Branch: refs/heads/master
Commit: 5fcc857efd5eaadb13715aac71a66368a6ae0ecc
Parents: e81046d
Author: Jie Yu <yu...@gmail.com>
Authored: Sat Apr 2 11:37:51 2016 -0700
Committer: Jie Yu <yu...@gmail.com>
Committed: Tue Apr 5 09:46:50 2016 -0700
----------------------------------------------------------------------
.../mesos/isolators/network/cni/cni.cpp | 60 +++++++++++---------
.../mesos/isolators/network/cni/cni.hpp | 10 ++--
2 files changed, 39 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/5fcc857e/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
index af5f490..5640f4b 100644
--- a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
+++ b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
@@ -319,7 +319,7 @@ Future<Nothing> NetworkCniIsolatorProcess::recover(
foreach (const ContainerState& state, states) {
const ContainerID& containerId = state.container_id();
- Try<Nothing> recover = _recover(containerId, state.executor_info());
+ Try<Nothing> recover = _recover(containerId, state);
if (recover.isError()) {
return Failure(
"Failed to recover CNI network information for container " +
@@ -367,7 +367,7 @@ Future<Nothing> NetworkCniIsolatorProcess::recover(
Try<Nothing> NetworkCniIsolatorProcess::_recover(
const ContainerID& containerId,
- const Option<ExecutorInfo>& executorInfo)
+ const Option<ContainerState>& state)
{
// NOTE: This method will add an 'Info' to 'infos' only if the container was
// launched by the CNI isolator and joined CNI network(s), and cleanup _might_
@@ -434,11 +434,11 @@ Try<Nothing> NetworkCniIsolatorProcess::_recover(
containerNetwork.networkName = networkName;
containerNetwork.ifName = interfaces->front();
- if (executorInfo.isSome()) {
- foreach (const mesos::NetworkInfo& _networkInfo,
- executorInfo->container().network_infos()) {
- if (_networkInfo.name() == networkName) {
- containerNetwork.networkInfo = _networkInfo;
+ if (state.isSome()) {
+ foreach (const mesos::NetworkInfo& networkInfo,
+ state->executor_info().container().network_infos()) {
+ if (networkInfo.name() == networkName) {
+ containerNetwork.networkInfo = networkInfo;
}
}
}
@@ -518,13 +518,13 @@ Future<Option<ContainerLaunchInfo>> NetworkCniIsolatorProcess::prepare(
int ifIndex = 0;
hashset<string> networkNames;
hashmap<string, ContainerNetwork> containerNetworks;
- foreach (const mesos::NetworkInfo& _networkInfo,
+ foreach (const mesos::NetworkInfo& networkInfo,
executorInfo.container().network_infos()) {
- if (!_networkInfo.has_name()) {
+ if (!networkInfo.has_name()) {
continue;
}
- const string& name = _networkInfo.name();
+ const string& name = networkInfo.name();
if (!networkConfigs.contains(name)) {
return Failure("Unknown CNI network '" + name + "'");
}
@@ -539,7 +539,7 @@ Future<Option<ContainerLaunchInfo>> NetworkCniIsolatorProcess::prepare(
ContainerNetwork containerNetwork;
containerNetwork.networkName = name;
containerNetwork.ifName = "eth" + stringify(ifIndex++);
- containerNetwork.networkInfo = _networkInfo;
+ containerNetwork.networkInfo = networkInfo;
containerNetworks.put(name, containerNetwork);
}
@@ -814,30 +814,38 @@ Future<ResourceStatistics> NetworkCniIsolatorProcess::usage(
Future<ContainerStatus> NetworkCniIsolatorProcess::status(
const ContainerID& containerId)
{
+ // TODO(jieyu): We don't create 'Info' struct for containers that
+ // want to join the host network. Currently, we rely on the
+ // slave/containerizer to set the IP addresses in ContainerStatus.
+ // Consider returning the IP address of the slave here.
if (!infos.contains(containerId)) {
return ContainerStatus();
}
ContainerStatus status;
- foreachvalue (const ContainerNetwork& _containerNetwork,
+ foreachvalue (const ContainerNetwork& containerNetwork,
infos[containerId]->containerNetworks) {
- mesos::NetworkInfo* networkInfo = status.add_network_infos();
- networkInfo->CopyFrom(_containerNetwork.networkInfo);
+ CHECK_SOME(containerNetwork.networkInfo);
- if (_containerNetwork.cniNetworkInfo.isSome()) {
- networkInfo->clear_ip_addresses();
+ // NOTE: 'cniNetworkInfo' is None() before 'isolate()' finishes.
+ if (containerNetwork.cniNetworkInfo.isNone()) {
+ continue;
+ }
- if (_containerNetwork.cniNetworkInfo->has_ip4()) {
- mesos::NetworkInfo::IPAddress* ip = networkInfo->add_ip_addresses();
- ip->set_protocol(mesos::NetworkInfo::IPv4);
- ip->set_ip_address(_containerNetwork.cniNetworkInfo->ip4().ip());
- }
+ mesos::NetworkInfo* networkInfo = status.add_network_infos();
+ networkInfo->CopyFrom(containerNetwork.networkInfo.get());
+ networkInfo->clear_ip_addresses();
- if (_containerNetwork.cniNetworkInfo->has_ip6()) {
- mesos::NetworkInfo::IPAddress* ip = networkInfo->add_ip_addresses();
- ip->set_protocol(mesos::NetworkInfo::IPv6);
- ip->set_ip_address(_containerNetwork.cniNetworkInfo->ip6().ip());
- }
+ if (containerNetwork.cniNetworkInfo->has_ip4()) {
+ mesos::NetworkInfo::IPAddress* ip = networkInfo->add_ip_addresses();
+ ip->set_protocol(mesos::NetworkInfo::IPv4);
+ ip->set_ip_address(containerNetwork.cniNetworkInfo->ip4().ip());
+ }
+
+ if (containerNetwork.cniNetworkInfo->has_ip6()) {
+ mesos::NetworkInfo::IPAddress* ip = networkInfo->add_ip_addresses();
+ ip->set_protocol(mesos::NetworkInfo::IPv6);
+ ip->set_ip_address(containerNetwork.cniNetworkInfo->ip6().ip());
}
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/5fcc857e/src/slave/containerizer/mesos/isolators/network/cni/cni.hpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/network/cni/cni.hpp b/src/slave/containerizer/mesos/isolators/network/cni/cni.hpp
index b1173d5..654137c 100644
--- a/src/slave/containerizer/mesos/isolators/network/cni/cni.hpp
+++ b/src/slave/containerizer/mesos/isolators/network/cni/cni.hpp
@@ -92,7 +92,7 @@ private:
// NetworkInfo copied from the ExecutorInfo.containerInfo.network_infos
// in 'prepare()' and '_recover()'.
- mesos::NetworkInfo networkInfo;
+ Option<mesos::NetworkInfo> networkInfo;
// Protobuf of CNI network information returned by CNI plugin.
Option<cni::spec::NetworkInfo> cniNetworkInfo;
@@ -115,6 +115,10 @@ private:
rootDir(_rootDir),
pluginDir(_pluginDir) {}
+ Try<Nothing> _recover(
+ const ContainerID& containerId,
+ const Option<mesos::slave::ContainerState>& state = None());
+
process::Future<Nothing> attach(
const ContainerID& containerId,
const std::string& networkName,
@@ -144,10 +148,6 @@ private:
const ContainerID& containerId,
const std::list<process::Future<Nothing>>& detaches);
- Try<Nothing> _recover(
- const ContainerID& containerId,
- const Option<ExecutorInfo>& executorInfo = None());
-
// CNI network configurations keyed by network name.
hashmap<std::string, NetworkConfigInfo> networkConfigs;