AMBARI-2336. Datanode start failed (with Oracle DB) due to RCA setup. (swagle)
git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/branch-1.2.3@1491308 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index d6343dc..2260b6a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -630,6 +630,9 @@
BUG FIXES
+ AMBARI-2336. Datanode start failed (with Oracle DB) due to RCA setup.
+ (swagle)
+
AMBARI-2124. Hive client is not getting reconfigured when it is co-hosted
with hive server/metastore. (swagle)
diff --git a/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/init.pp b/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/init.pp
index 4665099..32d9602 100644
--- a/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/init.pp
+++ b/ambari-agent/src/main/puppet/modules/hdp-hadoop/manifests/init.pp
@@ -38,10 +38,8 @@
hdp-hadoop::common { 'common':}
anchor{'hdp-hadoop::initialize::begin':} -> Hdp-hadoop::Common['common'] -> anchor{'hdp-hadoop::initialize::end':}
-# Configs generation
-
-debug('##Configs generation for hdp-hadoop')
-
+ # Configs generation
+ debug('##Configs generation for hdp-hadoop')
if has_key($configuration, 'mapred-queue-acls') {
configgenerator::configfile{'mapred-queue-acls':
@@ -276,6 +274,29 @@
owner => $hdfs_user,
}
+ # Copy database drivers for rca enablement
+ $server_db_name = $hdp::params::server_db_name
+ $hadoop_lib_home = $hdp::params::hadoop_lib_home
+ $db_driver_filename = $hdp::params::db_driver_file
+ $oracle_driver_url = $hdp::params::oracle_jdbc_url
+ $mysql_driver_url = $hdp::params::mysql_jdbc_url
+
+ if ($server_db_name == 'oracle' and $oracle_driver_url != "") {
+ $db_driver_dload_cmd = "curl -f --retry 5 $oracle_driver_url -o ${hadoop_lib_home}/${db_driver_filename}"
+ } elsif ($server_db_name == 'mysql' and $mysql_driver_url != "") {
+ $db_driver_dload_cmd = "curl -f --retry 5 $mysql_driver_url -o ${hadoop_lib_home}/${db_driver_filename}"
+ }
+ if ($db_driver_dload_cmd != undef) {
+ exec { '${db_driver_dload_cmd}':
+ command => $db_driver_dload_cmd,
+ unless => "test -e ${hadoop_lib_home}/${db_driver_filename}",
+ creates => "${hadoop_lib_home}/${db_driver_filename}",
+ path => ["/bin","/usr/bin/"],
+ require => Hdp-hadoop::Package['hadoop'],
+ before => Anchor['hdp-hadoop::end']
+ }
+ }
+
Anchor['hdp-hadoop::begin'] -> Hdp-hadoop::Package<||> -> Hdp::User<|title == $hdfs_user or title == $mapred_user|> -> Hdp::Directory_recursive_create[$hadoop_config_dir]
-> Hdp-hadoop::Configfile<|tag == 'common'|> -> Anchor['hdp-hadoop::end']
Anchor['hdp-hadoop::begin'] -> Hdp::Directory_recursive_create[$logdirprefix] -> Anchor['hdp-hadoop::end']
diff --git a/ambari-agent/src/main/puppet/modules/hdp/manifests/params.pp b/ambari-agent/src/main/puppet/modules/hdp/manifests/params.pp
index a65cab1..2bc67ee 100644
--- a/ambari-agent/src/main/puppet/modules/hdp/manifests/params.pp
+++ b/ambari-agent/src/main/puppet/modules/hdp/manifests/params.pp
@@ -213,6 +213,10 @@
$jce_policy_zip = "jce_policy-6.zip"
$jce_location = hdp_default("jce_location","http://download.oracle.com/otn-pub/java/jce_policy/6")
+ $server_db_name = hdp_default("db_name", "postgres")
+ $oracle_jdbc_url = hdp_default("oracle_jdbc_url", "")
+ $mysql_jdbc_url = hdp_default("mysql_jdbc_url", "")
+ $db_driver_file = hdp_default("db_driver_filename", "")
#####
$hadoop_home = hdp_default("hadoop_home","/usr")
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index 7456c17..8bdaaad 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -74,6 +74,15 @@
public static final String CLIENT_SECURITY_KEY = "client.security";
public static final String CLIENT_API_PORT_KEY = "client.api.port";
+ public static final String SERVER_DB_NAME_KEY = "server.jdbc.database";
+ public static final String SERVER_DB_NAME_DEFAULT = "postgres";
+ public static final String ORACLE_DB_NAME = "oracle";
+ public static final String MYSQL_DB_NAME = "mysql";
+
+ public static final String OJDBC_JAR_NAME_KEY = "db.oracle.jdbc.name";
+ public static final String OJDBC_JAR_NAME_DEFAULT = "ojdbc6.jar";
+ public static final String MYSQL_JAR_NAME_KEY = "db.mysql.jdbc.name";
+ public static final String MYSQL_JAR_NAME_DEFAULT = "mysql-connector-java.jar";
public static final String LDAP_USE_SSL_KEY = "authentication.ldap.useSSL";
public static final String LDAP_PRIMARY_URL_KEY =
"authentication.ldap.primaryUrl";
@@ -522,6 +531,18 @@
return Integer.parseInt(properties.getProperty(CLIENT_API_PORT_KEY, String.valueOf(CLIENT_API_PORT_DEFAULT)));
}
+ public String getOjdbcJarName() {
+ return properties.getProperty(OJDBC_JAR_NAME_KEY, OJDBC_JAR_NAME_DEFAULT);
+ }
+
+ public String getServerDBName() {
+ return properties.getProperty(SERVER_DB_NAME_KEY, SERVER_DB_NAME_DEFAULT);
+ }
+
+ public String getMySQLJarName() {
+ return properties.getProperty(MYSQL_JAR_NAME_KEY, MYSQL_JAR_NAME_DEFAULT);
+ }
+
public JPATableGenerationStrategy getJPATableGenerationStrategy() {
return JPATableGenerationStrategy.fromString(System.getProperty(SERVER_JDBC_GENERATE_TABLES_KEY));
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 1ecdc28..cfdcb05 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -154,7 +154,10 @@
"/resources/";
final private String jdkResourceUrl;
-
+ final private String ojdbcUrl;
+ final private String serverDB;
+ final private String mysqljdbcUrl;
+
@Inject
public AmbariManagementControllerImpl(ActionManager actionManager,
Clusters clusters, Injector injector) throws Exception {
@@ -173,6 +176,13 @@
} else {
this.jdkResourceUrl = null;
}
+
+ this.ojdbcUrl = "http://" + masterHostname + ":" +
+ + configs.getClientApiPort() + JDK_RESOURCE_LOCATION + "/" + configs.getOjdbcJarName();
+
+ this.mysqljdbcUrl = "http://" + masterHostname + ":" +
+ + configs.getClientApiPort() + JDK_RESOURCE_LOCATION + "/" + configs.getMySQLJarName();
+ this.serverDB = configs.getServerDBName();
}
@Override
@@ -968,6 +978,16 @@
params.put("repo_info", repoInfo);
params.put("jdk_location", this.jdkResourceUrl);
params.put("stack_version", stackId.getStackVersion());
+ params.put("db_name", this.serverDB);
+ params.put("mysql_jdbc_url" , this.mysqljdbcUrl);
+ params.put("oracle_jdbc_url", this.ojdbcUrl);
+ if (configs.getServerDBName().equalsIgnoreCase(Configuration
+ .ORACLE_DB_NAME)) {
+ params.put("db_driver_filename", configs.getOjdbcJarName());
+ } else if (configs.getServerDBName().equalsIgnoreCase(Configuration
+ .MYSQL_DB_NAME)) {
+ params.put("db_driver_filename", configs.getMySQLJarName());
+ }
execCmd.setHostLevelParams(params);
Map<String, String> roleParams = new TreeMap<String, String>();