You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2015/09/04 12:03:09 UTC

mesos git commit: Made docker version parsing resilient to trailing version components.

Repository: mesos
Updated Branches:
  refs/heads/master ff9c9769a -> 1830a28bf


Made docker version parsing resilient to trailing version components.

Review: https://reviews.apache.org/r/37669


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/1830a28b
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/1830a28b
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/1830a28b

Branch: refs/heads/master
Commit: 1830a28bfbe2c53136896b467b749c34910ef5b4
Parents: ff9c976
Author: haosdent huang <ha...@gmail.com>
Authored: Fri Sep 4 11:24:45 2015 +0200
Committer: Bernd Mathiske <be...@mesosphere.io>
Committed: Fri Sep 4 11:57:15 2015 +0200

----------------------------------------------------------------------
 src/docker/docker.cpp                    | 13 ++++++++++++-
 src/tests/containerizer/docker_tests.cpp | 26 ++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/1830a28b/src/docker/docker.cpp
----------------------------------------------------------------------
diff --git a/src/docker/docker.cpp b/src/docker/docker.cpp
index 2e17ced..ec2de54 100755
--- a/src/docker/docker.cpp
+++ b/src/docker/docker.cpp
@@ -198,7 +198,18 @@ Future<Version> Docker::__version(const Future<string>& output)
     vector<string> subParts = strings::split(parts.front(), " ");
 
     if (!subParts.empty()) {
-      Try<Version> version = Version::parse(subParts.back());
+      // Docker version output in Fedora 22 is "x.x.x.fc22" which does not match
+      // the Semantic Versioning specification(<major>[.<minor>[.<patch>]]). We
+      // remove the overflow components here before parsing the docker version
+      // output to a Version struct.
+      string versionString = subParts.back();
+      vector<string> components = strings::split(versionString, ".");
+      if (components.size() > 3) {
+        components.erase(components.begin() + 3, components.end());
+      }
+      versionString = strings::join(".", components);
+
+      Try<Version> version = Version::parse(versionString);
 
       if (version.isError()) {
         return Failure("Failed to parse docker version: " +

http://git-wip-us.apache.org/repos/asf/mesos/blob/1830a28b/src/tests/containerizer/docker_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/containerizer/docker_tests.cpp b/src/tests/containerizer/docker_tests.cpp
index cfad368..babc7d8 100644
--- a/src/tests/containerizer/docker_tests.cpp
+++ b/src/tests/containerizer/docker_tests.cpp
@@ -225,6 +225,32 @@ TEST_F(DockerTest, ROOT_DOCKER_interface)
 }
 
 
+// This test tests parsing docker version output.
+TEST_F(DockerTest, ROOT_DOCKER_parsing_version)
+{
+  Owned<Docker> docker1(Docker::create("echo Docker version 1.7.1, build",
+                                       tests::flags.docker_socket,
+                                       false).get());
+  Future<Version> version1 = docker1->version();
+  AWAIT_READY(version1);
+  EXPECT_EQ(version1.get(), Version::parse("1.7.1").get());
+
+  Owned<Docker> docker2(Docker::create("echo Docker version 1.7.1.fc22, build",
+                                       tests::flags.docker_socket,
+                                       false).get());
+  Future<Version> version2 = docker2->version();
+  AWAIT_READY(version2);
+  EXPECT_EQ(version2.get(), Version::parse("1.7.1").get());
+
+  Owned<Docker> docker3(Docker::create("echo Docker version 1.7.1-fc22, build",
+                                       tests::flags.docker_socket,
+                                       false).get());
+  Future<Version> version3 = docker3->version();
+  AWAIT_READY(version3);
+  EXPECT_EQ(version3.get(), Version::parse("1.7.1").get());
+}
+
+
 TEST_F(DockerTest, ROOT_DOCKER_CheckCommandWithShell)
 {
   Owned<Docker> docker(Docker::create(tests::flags.docker,