AMBARI-20822 Ambari Agent needs to handle custom version number like 
1.2.3.4_Company in its Controller code (dili)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/04a53927
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/04a53927
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/04a53927

Branch: refs/heads/branch-feature-AMBARI-12556
Commit: 04a5392791548a5341b705f869094adc0b5f58fa
Parents: 26484a8
Author: Di Li <d...@apache.org>
Authored: Tue Apr 25 12:01:01 2017 -0400
Committer: Di Li <d...@apache.org>
Committed: Tue Apr 25 12:01:01 2017 -0400

----------------------------------------------------------------------
 .../src/main/python/ambari_agent/Controller.py    | 18 ++++++++++++++----
 .../test/python/ambari_agent/TestController.py    | 14 ++++++++++++++
 2 files changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/04a53927/ambari-agent/src/main/python/ambari_agent/Controller.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/Controller.py 
b/ambari-agent/src/main/python/ambari_agent/Controller.py
index 78b5c0c..0297f74 100644
--- a/ambari-agent/src/main/python/ambari_agent/Controller.py
+++ b/ambari-agent/src/main/python/ambari_agent/Controller.py
@@ -29,6 +29,7 @@ import threading
 import urllib2
 import pprint
 from random import randint
+import re
 import subprocess
 import functools
 
@@ -587,7 +588,9 @@ class Controller(threading.Thread):
     Stack Upgrade.
     """
     try:
-      if compare_versions(self.version, "2.1.2") >= 0:
+      version = self.get_version()
+      logger.debug("Ambari Agent version {0}".format(version))
+      if compare_versions(version, "2.1.2") >= 0:
         source_file = "/etc/hadoop/conf/dfs_data_dir_mount.hist"
         destination_file = 
"/var/lib/ambari-agent/data/datanode/dfs_data_dir_mount.hist"
         if os.path.exists(source_file) and not 
os.path.exists(destination_file):
@@ -601,9 +604,16 @@ class Controller(threading.Thread):
           return_code = subprocess.call(command, shell=True)
           logger.info("Return code: %d" % return_code)
     except Exception, e:
-      logger.info("Exception in move_data_dir_mount_file(). Error: 
{0}".format(str(e)))
-
-
+      logger.error("Exception in move_data_dir_mount_file(). Error: 
{0}".format(str(e)))
+
+  def get_version(self):
+    version = self.version
+    matches = re.findall(r"[\d+.]+",version)
+    if not matches:
+      logger.warning("No version match result, use original version 
{0}".format(version))
+      return version
+    else:
+      return matches[0]
 
 def main(argv=None):
   # Allow Ctrl-C

http://git-wip-us.apache.org/repos/asf/ambari/blob/04a53927/ambari-agent/src/test/python/ambari_agent/TestController.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestController.py 
b/ambari-agent/src/test/python/ambari_agent/TestController.py
index 7f5d451..20da81f 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestController.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestController.py
@@ -416,6 +416,20 @@ class TestController(unittest.TestCase):
                         exceptionMessage, str(e))
 
 
+  def test_getVersion(self):
+    self.controller.version = "1.2.3.4_MyAgent"
+    version = self.controller.get_version()
+    self.assertEquals('1.2.3.4', version)
+    self.controller.version = "1.2.3-MyAgent"
+    version = self.controller.get_version()
+    self.assertEquals('1.2.3', version)
+    self.controller.version = "11.2.3-MyAgent"
+    version = self.controller.get_version()
+    self.assertEquals('11.2.3', version)
+    self.controller.version = "11.2.13.10_MyAgent"
+    version = self.controller.get_version()
+    self.assertEquals('11.2.13.10', version)
+
   @patch.object(ExitHelper, "exit")
   @patch.object(threading._Event, "wait")
   @patch("time.sleep")

Reply via email to