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 2017/02/17 22:50:49 UTC
mesos git commit: Port_mapping isolator: do not depend on interface
speed.
Repository: mesos
Updated Branches:
refs/heads/master 267d719c7 -> d8b88e7f6
Port_mapping isolator: do not depend on interface speed.
Since a lot of environments do not provide interface speed in
/sys/class/net/<ifname>/speed`.
Review: https://reviews.apache.org/r/56493/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/d8b88e7f
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/d8b88e7f
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/d8b88e7f
Branch: refs/heads/master
Commit: d8b88e7f66d1207a388e641d4b947a85e7c252bb
Parents: 267d719
Author: Pierre Cheynier <me...@pierre-cheynier.net>
Authored: Fri Feb 17 13:22:57 2017 -0800
Committer: Jie Yu <yu...@gmail.com>
Committed: Fri Feb 17 14:42:15 2017 -0800
----------------------------------------------------------------------
.../mesos/isolators/network/port_mapping.cpp | 67 +++++++++++---------
1 file changed, 38 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/d8b88e7f/src/slave/containerizer/mesos/isolators/network/port_mapping.cpp
----------------------------------------------------------------------
diff --git a/src/slave/containerizer/mesos/isolators/network/port_mapping.cpp b/src/slave/containerizer/mesos/isolators/network/port_mapping.cpp
index f6f2bfe..c689aab 100644
--- a/src/slave/containerizer/mesos/isolators/network/port_mapping.cpp
+++ b/src/slave/containerizer/mesos/isolators/network/port_mapping.cpp
@@ -1587,35 +1587,44 @@ Try<Isolator*> PortMappingIsolatorProcess::create(const Flags& flags)
Option<Bytes> egressRateLimitPerContainer;
if (flags.egress_rate_limit_per_container.isSome()) {
// Read host physical link speed from /sys/class/net/eth0/speed.
- // This value is in MBits/s.
- Try<string> value =
- os::read(path::join("/sys/class/net", eth0.get(), "speed"));
-
- if (value.isError()) {
- return Error(
- "Failed to read " +
- path::join("/sys/class/net", eth0.get(), "speed") +
- ": " + value.error());
- }
-
- Try<uint64_t> hostLinkSpeed = numify<uint64_t>(strings::trim(value.get()));
- CHECK_SOME(hostLinkSpeed);
-
- // It could be possible that the nic driver doesn't support
- // reporting physical link speed. In that case, report error.
- if (hostLinkSpeed.get() == 0xFFFFFFFF) {
- return Error(
- "Network Isolator failed to determine link speed for " + eth0.get());
- }
-
- // Convert host link speed to Bytes/s for comparason.
- if (hostLinkSpeed.get() * 1000000 / 8 <
- flags.egress_rate_limit_per_container.get().bytes()) {
- return Error(
- "The given egress traffic limit for containers " +
- stringify(flags.egress_rate_limit_per_container.get().bytes()) +
- " Bytes/s is greater than the host link speed " +
- stringify(hostLinkSpeed.get() * 1000000 / 8) + " Bytes/s");
+ // This value is in MBits/s. Some distribution does not support
+ // reading speed (depending on the driver). If that's the case,
+ // simply print warnings.
+ const string eth0SpeedPath =
+ path::join("/sys/class/net", eth0.get(), "speed");
+
+ if (!os::exists(eth0SpeedPath)) {
+ LOG(WARNING) << "Cannot determine link speed of " << eth0.get()
+ << ": '" << eth0SpeedPath << "' does not exist";
+ } else {
+ Try<string> value = os::read(eth0SpeedPath);
+ if (value.isError()) {
+ return Error(
+ "Failed to read '" + eth0SpeedPath + "'"
+ ": " + value.error());
+ } else {
+ Try<uint64_t> hostLinkSpeed =
+ numify<uint64_t>(strings::trim(value.get()));
+
+ CHECK_SOME(hostLinkSpeed);
+
+ // It could be possible that the nic driver doesn't support
+ // reporting physical link speed. In that case, report error.
+ if (hostLinkSpeed.get() == 0xFFFFFFFF) {
+ LOG(WARNING) << "Link speed reporting is not supported for '"
+ << eth0.get() + "'";
+ } else {
+ // Convert host link speed to Bytes/s for comparason.
+ if (hostLinkSpeed.get() * 1000000 / 8 <
+ flags.egress_rate_limit_per_container.get().bytes()) {
+ return Error(
+ "The given egress traffic limit for containers " +
+ stringify(flags.egress_rate_limit_per_container.get().bytes()) +
+ " Bytes/s is greater than the host link speed " +
+ stringify(hostLinkSpeed.get() * 1000000 / 8) + " Bytes/s");
+ }
+ }
+ }
}
if (flags.egress_rate_limit_per_container.get() != Bytes(0)) {