AMBARI-701. Ambari does not handle a pre-setup user-supplied Hive Metastore. (Contributed by hitesh)
svn merge -c r1382097 --ignore-ancestry ../../trunk/
git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/branch-0.9@1382111 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 1498d48..a8b0c18 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,12 @@
should be listed by their full name. Please keep the file to a max of 80
characters wide.
+Release 0.9.1 - unreleased
+
+ BUGS
+
+ AMBARI-701. Ambari does not handle a pre-setup user-supplied Hive Metastore. (hitesh)
+
Release 0.9.0 - unreleased
AMBARI-690. Monitoring Dashboard - update the RPM version and documentation (yusaku)
diff --git a/hmc/php/db/HMCDBAccessor.php b/hmc/php/db/HMCDBAccessor.php
index cac93a8..d81803d 100644
--- a/hmc/php/db/HMCDBAccessor.php
+++ b/hmc/php/db/HMCDBAccessor.php
@@ -3429,5 +3429,54 @@
LockRelease(); return $response;
}
+ /**
+ * Remove host-role mappings for given hostnames from the specified component
+ * @param string $clusterName
+ * @param string $componentName
+ * @param array $hosts Array of hostnames
+ * @return mixed
+ * array (
+ * "result" => 0,
+ * "error" => ""
+ * )
+ */
+ public function removeAllHostsFromComponent($clusterName, $componentName) {
+ LockAcquire();
+ $response = array ( "result" => 0, "error" => "");
+
+ $error = "";
+ $ret = $this->dbHandle->beginTransaction();
+ if (!$ret) {
+ $error = $this->getLastDBErrorAsString();
+ $response["result"] = 1;
+ $response["error"] = "Failed to start DB transaction, error=".$error;
+ LockRelease(); return $response;
+ }
+ $query = "DELETE FROM HostRoles WHERE "
+ . " cluster_name = " . $this->dbHandle->quote($clusterName)
+ . " AND component_name = " . $this->dbHandle->quote($componentName);
+ $this->logger->log_trace("Running query: $query");
+ $ret = $this->dbHandle->exec($query);
+ if (FALSE === $ret) {
+ $error = $this->getLastDBErrorAsString();
+ $ret = $this->dbHandle->rollBack();
+ $this->logger->log_error("Error when executing query"
+ . ", query=".$query
+ . ", error=".$error);
+ $response["result"] = 1;
+ $response["error"] = $error;
+ LockRelease(); return $response;
+ }
+ $ret = $this->dbHandle->commit();
+ if (!$ret) {
+ $error = $this->getLastDBErrorAsString();
+ $this->logger->log_error("Failed to commit DB transaction, error=".$error);
+ $response["result"] = 1;
+ $response["error"] = "Failed to commit DB transaction, error=". $error;
+ LockRelease(); return $response;
+ }
+ LockRelease(); return $response;
+ }
+
}
?>
diff --git a/hmc/php/frontend/configUtils.php b/hmc/php/frontend/configUtils.php
index b0633ab..23ad7f2 100644
--- a/hmc/php/frontend/configUtils.php
+++ b/hmc/php/frontend/configUtils.php
@@ -453,18 +453,28 @@
}
////////////Helper function definitions
-function handleHiveMysql($clusterName, &$finalProperties,
- $dbAccessor, $logHandle) {
+function handleHiveMysql($clusterName, $dbAccessor, $logHandle) {
$services = $dbAccessor->getAllServicesInfo($clusterName);
+ $configs = $dbAccessor->getServiceConfig($clusterName);
$hostForMysql = $dbAccessor->getHostsForComponent($clusterName, "HIVE_MYSQL");
if ( ($services["services"]["HIVE"]["isEnabled"] == 1) &&
- (empty($finalProperties["hive_mysql_host"])) && (empty($hostForMysql["hosts"])) ) {
+ ( isset($configs["properties"])
+ && ( !isset($configs["properties"]["hive_mysql_host"])
+ || empty($configs["properties"]["hive_mysql_host"])) ) &&
+ (empty($hostForMysql["hosts"])) ) {
$logHandle->log_debug("Hive is enabled but mysql server is not set, set it up on hive server itself");
$hostComponents = $dbAccessor->getHostsForComponent($clusterName, "HIVE_SERVER");
$hiveServerHosts = array_keys($hostComponents["hosts"]);
- $finalProperties["hive_mysql_host"] = "localhost";
+ $newConfig = array ( "hive_mysql_host" => "localhost" );
+ $dbAccessor->updateServiceConfigs($clusterName, $newConfig);
$dbAccessor->addHostsToComponent($clusterName, "HIVE_MYSQL",
$hiveServerHosts, "ASSIGNED", "");
+ } else {
+ if (isset($configs["properties"])
+ && isset($configs["properties"]["hive_mysql_host"])
+ && $configs["properties"]["hive_mysql_host"] != "localhost") {
+ $dbAccessor->removeAllHostsFromComponent($clusterName, "HIVE_MYSQL");
+ }
}
}
@@ -522,10 +532,6 @@
*/
function validateConfigsFromUser($dbAccessor, $logger, $clusterName, $finalProperties) {
- //Additional services that need to be enabled based on configuration.
- //Hack to handle mysql for hive
- handleHiveMysql($clusterName, $finalProperties, $dbAccessor, $logger);
-
// Validate/verify configs
$cfgResult = validateConfigs($finalProperties);
$suggestProperties = new SuggestProperties();
@@ -559,6 +565,7 @@
* @return array|mixed
*/
function validateAndPersistConfigsFromUser($dbAccessor, $logger, $clusterName, $finalProperties) {
+
// sanitize and persist the user entered configs *******
$result = validateConfigsFromUser($dbAccessor, $logger, $clusterName, $finalProperties);
@@ -571,6 +578,11 @@
$logger->log_error("Got error while persisting configs: ".$dbResponse["error"]);
return $dbResponse;
}
+
+ //Additional services that need to be enabled based on configuration.
+ //Hack to handle mysql for hive
+ handleHiveMysql($clusterName, $dbAccessor, $logger);
+
// finished persisting the configs *******
return array("result" => 0, "error" => 0);
}