Forráskód Böngészése

AMBARI-5497. Ambari-server states it has started but it actually errored. (dlysnichenko)

Lisnichenko Dmitro 11 éve
szülő
commit
f83d95df73

+ 24 - 7
ambari-server/src/main/python/ambari-server.py

@@ -2007,22 +2007,39 @@ def get_JAVA_HOME():
   return None
 
 
+#
+# Checks jdk path for correctness
+#
+def validate_jdk(jdk_path):
+  if jdk_path:
+    return os.path.exists(jdk_path) and os.path.exists(
+      jdk_path + os.sep + 'bin' + os.sep + 'java')
+  else:
+    return False
+
+
 #
 # Finds the available JDKs.
 #
 def find_jdk():
-  if get_JAVA_HOME():
-    return get_JAVA_HOME()
+  jdkPath = get_JAVA_HOME()
+  if jdkPath:
+    if validate_jdk(jdkPath):
+      return jdkPath
   print "Looking for available JDKs at " + JDK_INSTALL_DIR
   jdks = glob.glob(JDK_INSTALL_DIR + os.sep + "jdk*")
   jdks.sort()
   print "Found: " + str(jdks)
-  count = len(jdks)
-  if count == 0:
+  if len(jdks) == 0:
     return
-  jdkPath = jdks[count - 1]
-  print "Selected JDK {0}".format(jdkPath)
-  return jdkPath
+  for jdkPath in jdks:
+    print "Trying to use JDK {0}".format(jdkPath)
+    if validate_jdk(jdkPath):
+      print "Selected JDK {0}".format(jdkPath)
+      return jdkPath
+    else:
+      print "JDK {0} is invalid".format(jdkPath)
+  return
 
 
 #

+ 22 - 1
ambari-server/src/test/python/TestAmbariServer.py

@@ -2173,10 +2173,26 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
     self.assertEqual(args.database_username, "ambari-server")
     self.assertEqual(args.sid_or_sname, "sname")
 
+  @patch.object(os.path, "exists")
+  def test_validate_jdk(self, exists_mock):
+    exists_mock.side_effect = [False]
+    result = ambari_server.validate_jdk("path")
+    self.assertFalse(result)
+
+    exists_mock.side_effect = [True, False]
+    result = ambari_server.validate_jdk("path")
+    self.assertFalse(result)
+
+    exists_mock.side_effect = [True, True]
+    result = ambari_server.validate_jdk("path")
+    self.assertTrue(result)
+
   @patch("glob.glob")
   @patch.object(ambari_server, "get_JAVA_HOME")
-  def test_find_jdk(self, get_JAVA_HOME_mock, globMock):
+  @patch.object(ambari_server, "validate_jdk")
+  def test_find_jdk(self, validate_jdk_mock, get_JAVA_HOME_mock, globMock):
     get_JAVA_HOME_mock.return_value = "somewhere"
+    validate_jdk_mock.return_value = True
     result = ambari_server.find_jdk()
     self.assertEqual("somewhere", result)
 
@@ -2189,6 +2205,11 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
     result = ambari_server.find_jdk()
     self.assertNotEqual(None, result)
 
+    globMock.return_value = ["one", "two"]
+    validate_jdk_mock.side_effect = [False, True]
+    result = ambari_server.find_jdk()
+    self.assertEqual(result, "two")
+
   @patch("os.path.exists")
   @patch.object(ambari_server, "remove_file")
   @patch.object(ambari_server, "is_jdbc_user_changed")