You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2018/11/08 12:11:18 UTC

[ambari] 02/03: AMBARI-24730. Support Java 9+ in Ambari Server setup (#2427)

This is an automated email from the ASF dual-hosted git repository.

adoroszlai pushed a commit to branch branch-feature-jdk11
in repository https://gitbox.apache.org/repos/asf/ambari.git

commit 62cdb4a7a591872053aa6702325c7b0c0b4c55d1
Author: Gabor Boros <63...@users.noreply.github.com>
AuthorDate: Sat Oct 6 07:36:54 2018 +0200

    AMBARI-24730. Support Java 9+ in Ambari Server setup (#2427)
---
 .../src/main/python/ambari_server/serverSetup.py       | 18 +++++++++++++++---
 ambari-server/src/test/python/TestAmbariServer.py      |  4 ++--
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/ambari-server/src/main/python/ambari_server/serverSetup.py b/ambari-server/src/main/python/ambari_server/serverSetup.py
index a32ac38..b91d8eb 100644
--- a/ambari-server/src/main/python/ambari_server/serverSetup.py
+++ b/ambari-server/src/main/python/ambari_server/serverSetup.py
@@ -80,7 +80,7 @@ UNTAR_JDK_ARCHIVE = "tar --no-same-owner -xvf {0}"
 JDK_PROMPT = "[{0}] {1}\n"
 JDK_VALID_CHOICES = "^[{0}{1:d}]$"
 
-JDK_VERSION_CHECK_CMD = """{0} -version 2>&1 | grep -i version | sed 's/.*version ".*\.\(.*\)\..*"/\\1/; 1q' 2>&1"""
+JDK_VERSION_CHECK_CMD = """{0} -version 2>&1 | grep -i version 2>&1"""
 
 def get_supported_jdbc_drivers():
   factory = DBMSConfigFactory()
@@ -1272,6 +1272,17 @@ def setup_jce_policy(args):
   print 'NOTE: Restart Ambari Server to apply changes' + \
         ' ("ambari-server restart|stop|start")'
 
+def get_java_major_version(cmd_out):
+  version_short = re.split("[java|openjdk|.*] version", cmd_out)[1].split(" ")[1][1:-1]
+  if re.match("^1\.[0-9].*", version_short): # 1.8.0_112
+    return version_short.split(".")[1]
+  elif re.match("^[1-9][0-9]*\.[0-9].*", version_short): # 10.0.2
+    return version_short.split(".")[0]
+  elif re.match("^[1-9][0-9]*$", version_short): # 11
+    return version_short
+  elif re.match("^[1-9][0-9]*-.*$", version_short): # 12-ea
+    return version_short.split("-")[0]
+
 def check_ambari_java_version_is_valid(java_home, java_bin, min_version, properties):
   """
   Check that ambari uses the proper (minimum) JDK with a shell command.
@@ -1292,11 +1303,12 @@ def check_ambari_java_version_is_valid(java_home, java_bin, min_version, propert
       err = "Checking JDK version command returned with exit code %s" % process.returncode
       raise FatalException(process.returncode, err)
     else:
-      actual_jdk_version = int(out)
+      java_major_version = get_java_major_version(out)
+      actual_jdk_version = int(java_major_version)
       print 'JDK version found: {0}'.format(actual_jdk_version)
       if actual_jdk_version < min_version:
         print 'Minimum JDK version is {0} for Ambari. Setup JDK again only for Ambari Server.'.format(min_version)
-        properties.process_pair(STACK_JAVA_VERSION, out)
+        properties.process_pair(STACK_JAVA_VERSION, java_major_version)
         result = False
       else:
         print 'Minimum JDK version is {0} for Ambari. Skipping to setup different JDK for Ambari Server.'.format(min_version)
diff --git a/ambari-server/src/test/python/TestAmbariServer.py b/ambari-server/src/test/python/TestAmbariServer.py
index 14f3387..0402494 100644
--- a/ambari-server/src/test/python/TestAmbariServer.py
+++ b/ambari-server/src/test/python/TestAmbariServer.py
@@ -3150,7 +3150,7 @@ class TestAmbariServer(TestCase):
     # case 1:  jdk7 is picked for stacks
     properties = Properties()
     p = MagicMock()
-    p.communicate.return_value = ('7', None)
+    p.communicate.return_value = ('java version "1.7.0_80"', None)
     p.returncode = 0
     popenMock.return_value = p
     result = check_ambari_java_version_is_valid('/usr/jdk64/jdk_1.7.0/', 'java', 8, properties)
@@ -3159,7 +3159,7 @@ class TestAmbariServer(TestCase):
 
     # case 2: jdk8 is picked for stacks
     properties = Properties()
-    p.communicate.return_value = ('8', None)
+    p.communicate.return_value = ('java version "1.8.0_112"', None)
     p.returncode = 0
     result = check_ambari_java_version_is_valid('/usr/jdk64/jdk_1.8.0/', 'java', 8, properties)
     self.assertFalse(properties.get_property(STACK_JAVA_VERSION))