You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2014/09/03 06:38:24 UTC
git commit: Added Resources support to return the port range for the
given number of ports.
Repository: mesos
Updated Branches:
refs/heads/master 474963306 -> 18344e03e
Added Resources support to return the port range for the given number of ports.
Review: https://reviews.apache.org/r/24810
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/18344e03
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/18344e03
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/18344e03
Branch: refs/heads/master
Commit: 18344e03e4bcfde6157997e28265084e2e10d971
Parents: 4749633
Author: Zuyu Zhang <hi...@gmail.com>
Authored: Tue Sep 2 21:38:06 2014 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Tue Sep 2 21:38:07 2014 -0700
----------------------------------------------------------------------
include/mesos/resources.hpp | 4 ++++
src/Makefile.am | 3 ++-
src/common/resources.cpp | 30 ++++++++++++++++++++++++++++++
src/tests/resources_tests.cpp | 28 ++++++++++++++++++++++++++++
4 files changed, 64 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/18344e03/include/mesos/resources.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/resources.hpp b/include/mesos/resources.hpp
index 12adedc..d7a9e8a 100644
--- a/include/mesos/resources.hpp
+++ b/include/mesos/resources.hpp
@@ -192,6 +192,10 @@ public:
// TODO(vinod): Provide a Ranges abstraction.
Option<Value::Ranges> ports() const;
+ // Helper function to extract the given number of ports
+ // from the "ports" resource.
+ Option<Value::Ranges> ports(size_t numPorts) const;
+
// TODO(jieyu): Consider returning an EphemeralPorts abstraction
// which holds the ephemeral ports allocation logic.
Option<Value::Ranges> ephemeral_ports() const;
http://git-wip-us.apache.org/repos/asf/mesos/blob/18344e03/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index 40b9f6b..5526189 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -562,6 +562,8 @@ libmesos_la_LIBTOOLFLAGS = --tag=CXX
# Add the convenience library.
libmesos_la_LIBADD = libmesos_no_3rdparty.la
+libmesos_la_LIBADD += ../$(LIBPROCESS)/libprocess.la
+
# For non-convenience libraries we need to link them in to make the shared
# library each time. (Currently, we don't support platforms where this is not
# possible.)
@@ -593,7 +595,6 @@ else
libmesos_la_LIBADD += -lprotobuf
endif
-libmesos_la_LIBADD += ../$(LIBPROCESS)/libprocess.la
# Binaries.
sbin_PROGRAMS += mesos-master
http://git-wip-us.apache.org/repos/asf/mesos/blob/18344e03/src/common/resources.cpp
----------------------------------------------------------------------
diff --git a/src/common/resources.cpp b/src/common/resources.cpp
index edf36b1..29fc765 100644
--- a/src/common/resources.cpp
+++ b/src/common/resources.cpp
@@ -516,6 +516,36 @@ Option<Value::Ranges> Resources::ports() const
return None();
}
+Option<Value::Ranges> Resources::ports(size_t numPorts) const
+{
+ Value::Ranges total;
+
+ foreach (const Resource& resource, resources) {
+ if (resource.name() == "ports" &&
+ resource.type() == Value::RANGES &&
+ isAllocatable(resource)) {
+ foreach (const Value::Range& range, resource.ranges().range()) {
+ size_t interval = range.end() - range.begin() + 1;
+ if (numPorts < interval) {
+ Value::Range* lastRange = total.add_range();
+ lastRange->set_begin(range.begin());
+ lastRange->set_end(range.begin() + numPorts - 1);
+
+ return total;
+ } else {
+ total.add_range()->CopyFrom(range);
+ numPorts -= interval;
+
+ if (numPorts == 0) {
+ return total;
+ }
+ }
+ }
+ }
+ }
+
+ return None();
+}
Option<Value::Ranges> Resources::ephemeral_ports() const
{
http://git-wip-us.apache.org/repos/asf/mesos/blob/18344e03/src/tests/resources_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/resources_tests.cpp b/src/tests/resources_tests.cpp
index b5f2e8b..3e50889 100644
--- a/src/tests/resources_tests.cpp
+++ b/src/tests/resources_tests.cpp
@@ -159,6 +159,34 @@ TEST(ResourcesTest, Resources)
}
+TEST(ResourcesTest, Ports)
+{
+ // Extract one Value::Range.
+ Resources r = Resources::parse("ports:[10000-20000, 30000-50000]").get();
+ Option<Value::Ranges> ports = r.ports(5);
+ EXPECT_SOME(ports);
+ EXPECT_EQ("[10000-10004]", stringify(ports.get()));
+
+ // Extract two Value::Ranges.
+ r = Resources::parse("ports:[10000-10000, 20000-50000]").get();
+ ports = r.ports(5);
+ EXPECT_SOME(ports);
+ EXPECT_EQ("[10000-10000, 20000-20003]", stringify(ports.get()));
+
+ // Extract mutiple Value::Ranges.
+ r = Resources::parse("ports:[10000-10001, 10003-10004, 10007-10009,"
+ "10020-20000]").get();
+ ports = r.ports(10);
+ EXPECT_SOME(ports);
+ EXPECT_EQ("[10000-10001, 10003-10004, 10007-10009, 10020-10022]",
+ stringify(ports.get()));
+
+ // Not enough ports.
+ r = Resources::parse("ports:[10000-10004]").get();
+ EXPECT_TRUE(r.ports(10).isNone());
+}
+
+
TEST(ResourcesTest, Printing)
{
Resources r = Resources::parse("cpus:45.55;"