浏览代码

AMBARI-2685. Add oracle default properties to setup. (ncole)

Nate Cole 12 年之前
父节点
当前提交
c17a992854
共有 2 个文件被更改,包括 82 次插入0 次删除
  1. 17 0
      ambari-server/src/main/python/ambari-server.py
  2. 65 0
      ambari-server/src/test/python/TestAmbaryServer.py

+ 17 - 0
ambari-server/src/main/python/ambari-server.py

@@ -283,6 +283,17 @@ DATABASE_DROP_SCRIPTS = ['/var/lib/ambari-server/resources/Ambari-DDL-Postgres-R
                          '/var/lib/ambari-server/resources/Ambari-DDL-Oracle-DROP.sql',
                          '/var/lib/ambari-server/resources/Ambari-DDL-MySQL-DROP.sql']
 
+JDBC_PROPERTIES_PREFIX = "server.jdbc.properties."
+DATABASE_JDBC_PROPERTIES = [
+                         [ ],
+                         [
+                           ["oracle.net.CONNECT_TIMEOUT", "2000"], # socket level timeout
+                           ["oracle.net.READ_TIMEOUT", "2000"], # socket level timeout
+                           ["oracle.jdbc.ReadTimeout", "8000"] # query fetch timeout
+                         ],
+                         [ ]
+                        ]
+
 REGEX_IP_ADDRESS = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
 REGEX_HOSTNAME = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"
 REGEX_HOSTNAME_PORT = "^(.*:[0-9]{1,5}$)"
@@ -1152,6 +1163,12 @@ def store_remote_properties(args):
   properties.process_pair(JDBC_USER_NAME_PROPERTY, args.database_username)
   properties.process_pair(JDBC_PASSWORD_PROPERTY,
       store_password_file(args.database_password, JDBC_PASSWORD_FILENAME))
+  
+  # save any other defined properties to pass to JDBC
+  if DATABASE_INDEX < len(DATABASE_JDBC_PROPERTIES):
+    for pair in DATABASE_JDBC_PROPERTIES[DATABASE_INDEX]:
+      properties.process_pair(JDBC_PROPERTIES_PREFIX + pair[0], pair[1])
+
   if isSecure:
     encrypted_password = encrypt_password(JDBC_RCA_PASSWORD_ALIAS, args.database_password)
     if encrypted_password != args.database_password:

+ 65 - 0
ambari-server/src/test/python/TestAmbaryServer.py

@@ -2735,6 +2735,71 @@ MIIFHjCCAwYCCQDpHKOBI+Lt0zANBgkqhkiG9w0BAQUFADBRMQswCQYDVQQGEwJV
       # Expected
       self.assertTrue("The cli was not found" in fe.reason)
 
+  @patch.object(ambari_server, 'verify_setup_allowed')
+  @patch("sys.exit")
+  @patch.object(ambari_server, "get_YN_input")
+  @patch.object(ambari_server, "get_db_cli_tool")
+  @patch.object(ambari_server, "is_local_database")
+  @patch.object(ambari_server, "check_iptables")
+  @patch.object(ambari_server, "check_jdbc_drivers")
+  @patch.object(ambari_server, "is_root")
+  @patch.object(ambari_server, "check_ambari_user")
+  @patch.object(ambari_server, "download_jdk")
+  @patch.object(ambari_server, "configure_os_settings")
+  @patch('__builtin__.raw_input')
+  def test_store_remote_properties(self,raw_input, configure_os_settings_mock,
+        download_jdk_mock, check_ambari_user_mock, is_root_mock,
+        check_jdbc_drivers_mock, check_iptables_mock, is_local_db_mock,
+        get_db_cli_tool_mock, get_YN_input, exit_mock, verify_setup_allowed_method):
+
+    raw_input.return_value =""
+    is_root_mock.return_value = True
+    is_local_db_mock.return_value = False
+    get_YN_input.return_value = False
+    check_iptables_mock.return_value = (0, "other")
+    get_db_cli_tool_mock.return_value = None
+    check_jdbc_drivers_mock.return_value=0
+    check_ambari_user_mock.return_value = 0
+    download_jdk_mock.return_value = 0
+    configure_os_settings_mock.return_value = 0
+    verify_setup_allowed_method.return_value = 0
+
+    import optparse
+
+    args = optparse.Values()
+    args.database = "oracle"
+    args.database_host = "localhost"
+    args.database_port = "1234"
+    args.database_name = "ambari"
+    args.sid_or_sname = "foo"
+    args.database_username = "foo"
+    args.database_password = "foo"
+
+    tempdir = tempfile.gettempdir()
+
+    prop_file = os.path.join(tempdir, "ambari.properties")
+
+    with open(prop_file, "w") as f:
+      f.write("dummy=dummy")
+    f.close()
+
+    os.environ[ambari_server.AMBARI_CONF_VAR] = tempdir
+    ambari_server.DATABASE_INDEX = 1
+
+    ambari_server.store_remote_properties(args)
+
+    properties = ambari_server.get_ambari_properties()
+
+    found = False
+    for n in properties.propertyNames():
+      if not found and n.startswith("server.jdbc.properties"):
+        found = True
+
+    ambari_server.DATABASE_INDEX = 0
+    del os.environ[ambari_server.AMBARI_CONF_VAR]
+    os.remove(prop_file)
+
+    self.assertTrue(found)
 
   @patch.object(ambari_server, "parse_properties_file")
   @patch.object(ambari_server, "get_db_cli_tool")