فهرست منبع

AMBARI-6044. Issues with jdbc properties.(vbrodetskyi)

Vitaly Brodetskyi 11 سال پیش
والد
کامیت
35ffb98b80
2فایلهای تغییر یافته به همراه40 افزوده شده و 13 حذف شده
  1. 19 11
      ambari-server/src/main/python/ambari-server.py
  2. 21 2
      ambari-server/src/test/python/TestAmbariServer.py

+ 19 - 11
ambari-server/src/main/python/ambari-server.py

@@ -2215,6 +2215,13 @@ def setup(args):
                      'root-level privileges'
     raise FatalException(4, err)
 
+  # proceed jdbc properties if they were set
+  if args.jdbc_driver is not None and args.jdbc_db is not None:
+    proceedJDBCProperties(args)
+    status, pid = is_server_runing()
+    if status:
+      return
+
   print 'Checking SELinux...'
   retcode = check_selinux()
   if not retcode == 0:
@@ -2324,20 +2331,21 @@ def proceedJDBCProperties(args):
 
   symlink_name = args.jdbc_db + "-jdbc-driver.jar"
   jdbc_symlink = os.path.join(resources_dir, symlink_name)
+  path, jdbc_name = os.path.split(args.jdbc_driver)
 
   if os.path.lexists(jdbc_symlink):
     os.remove(jdbc_symlink)
 
-  try:
-    shutil.copy(args.jdbc_driver, resources_dir)
-  except Exception, e:
-    err = "Can not copy file {0} to {1} due to: {2} . Please check file " \
-          "permissions and free disk space.".format(args.jdbc_driver, resources_dir, e.message)
-    raise FatalException(1, err)
-
-  path, jdbc_name = os.path.split(args.jdbc_driver)
+  if not os.path.isfile(os.path.join(resources_dir, jdbc_name)):
+    try:
+      shutil.copy(args.jdbc_driver, resources_dir)
+    except Exception, e:
+      err = "Can not copy file {0} to {1} due to: {2} . Please check file " \
+            "permissions and free disk space.".format(args.jdbc_driver, resources_dir, e.message)
+      raise FatalException(1, err)
 
   os.symlink(os.path.join(resources_dir,jdbc_name), jdbc_symlink)
+  print "JDBC driver was successfully initialized ."
 
 
 #
@@ -4154,7 +4162,7 @@ def main():
   parser.add_option('--databasepassword', default=None, help="Database user password", dest="database_password")
   parser.add_option('--sidorsname', default="sname", help="Oracle database identifier type, Service ID/Service "
                                                          "Name sid|sname", dest="sid_or_sname")
-  parser.add_option('--jdbc-driver', default=None, help="Path to jdbc driver. Used only in pair with --jdbc-db. ",
+  parser.add_option('--jdbc-driver', default=None, help="Path to jdbc driver. Used only in pair with --jdbc-db ",
                     dest="jdbc_driver")
   parser.add_option('--jdbc-db', default=None, help="Database name [postgresql/mysql/oracle]. Used only in pair with " \
                     "--jdbc-driver", dest="jdbc_db")
@@ -4227,9 +4235,9 @@ def main():
 
   # jdbc driver and db options validation
   if options.jdbc_driver is None and options.jdbc_db is not None:
-    parser.error("Option --jdbc-db is used only in pair with --jdbc-driver.")
+    parser.error("Option --jdbc-db is used only in pair with --jdbc-driver")
   elif options.jdbc_driver is not None and options.jdbc_db is None:
-    parser.error("Option --jdbc-driver is used only in pair with --jdbc-db.")
+    parser.error("Option --jdbc-driver is used only in pair with --jdbc-db")
 
   if options.sid_or_sname.lower() not in ["sid", "sname"]:
     print "WARNING: Valid values for sid_or_sname are 'sid' or 'sname'. Use 'sid' if the db identifier type is " \

+ 21 - 2
ambari-server/src/test/python/TestAmbariServer.py

@@ -2263,13 +2263,17 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
   @patch.object(ambari_server, "is_local_database")
   @patch.object(ambari_server, "store_local_properties")
   @patch.object(ambari_server, "is_root")
-  def test_setup(self, is_root_mock, store_local_properties_mock, is_local_database_mock, store_remote_properties_mock,
+  @patch.object(ambari_server, 'is_server_runing')
+  @patch.object(ambari_server, 'proceedJDBCProperties')
+  def test_setup(self, proceedJDBCProperties_mock, is_server_runing_mock, is_root_mock, store_local_properties_mock,
+                 is_local_database_mock, store_remote_properties_mock,
                  setup_remote_db_mock, check_selinux_mock, check_jdbc_drivers_mock, check_ambari_user_mock,
                  check_iptables_mock, check_postgre_up_mock, setup_db_mock, configure_postgres_mock,
                  download_jdk_mock, configure_os_settings_mock, get_YN_input,
                  verify_setup_allowed_method, is_jdbc_user_changed_mock, remove_file_mock, isfile_mock, exists_mock):
     args = MagicMock()
     failed = False
+    is_server_runing_mock.return_value = (False, 0)
     get_YN_input.return_value = False
     isfile_mock.return_value = False
     verify_setup_allowed_method.return_value = 0
@@ -2372,6 +2376,17 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
     except NonFatalException as fe:
       self.assertTrue("Remote database setup aborted." in fe.reason)
 
+    reset_mocks()
+    is_server_runing_mock.return_value = (True, 0)
+    args.jdbc_driver= "path/to/driver"
+    args.jdbc_db = "test_db_name"
+
+
+    ambari_server.setup(args)
+    self.assertTrue(proceedJDBCProperties_mock.called)
+    self.assertFalse(check_selinux_mock.called)
+    self.assertFalse(check_ambari_user_mock.called)
+
   @patch.object(ambari_server, 'is_server_runing')
   @patch.object(ambari_server, "get_YN_input")
   @patch.object(ambari_server, "setup_db")
@@ -2970,7 +2985,8 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
   @patch("os.remove")
   @patch("os.symlink")
   @patch("shutil.copy")
-  def test_proceedJDBCProperties(self, copy_mock, os_symlink_mock, os_remove_mock, lexists_mock, get_ambari_properties_mock, isfile_mock):
+  def test_proceedJDBCProperties(self, copy_mock, os_symlink_mock, os_remove_mock, lexists_mock,
+                                 get_ambari_properties_mock, isfile_mock):
     args = MagicMock()
 
     # test incorrect path to jdbc-driver
@@ -3026,6 +3042,7 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
     lexists_mock.return_value = True
     args.jdbc_db = "postgresql"
     get_ambari_properties_mock.return_value = MagicMock()
+    isfile_mock.side_effect = [True, False]
     fail = False
 
     def side_effect():
@@ -3049,10 +3066,12 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
     p.__getitem__.return_value = "somewhere"
     copy_mock.reset_mock()
     copy_mock.side_effect = None
+    isfile_mock.side_effect = [True, False]
 
     ambari_server.proceedJDBCProperties(args)
     self.assertTrue(os_remove_mock.called)
     self.assertTrue(os_symlink_mock.called)
+    self.assertTrue(copy_mock.called)
     self.assertEquals(os_symlink_mock.call_args_list[0][0][0], os.path.join("somewhere","test jdbc"))
     self.assertEquals(os_symlink_mock.call_args_list[0][0][1], os.path.join("somewhere","postgresql-jdbc-driver.jar"))