Updated Branches: refs/heads/trunk 4dd856eaa -> f1d232fb8
AMBARI-3499. Refactor RoleCommandOrder.initialize().(odiachenko) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/f1d232fb Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/f1d232fb Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/f1d232fb Branch: refs/heads/trunk Commit: f1d232fb88af5577160805dacd12d503ab41d514 Parents: 4dd856e Author: Oleksandr Diachenko <[email protected]> Authored: Fri Oct 11 20:37:31 2013 +0300 Committer: Oleksandr Diachenko <[email protected]> Committed: Fri Oct 11 20:37:40 2013 +0300 ---------------------------------------------------------------------- .../src/main/resources/role_command_order.json | 100 --------------- ambari-server/pom.xml | 2 +- .../server/api/services/AmbariMetaInfo.java | 1 + .../server/api/util/StackExtensionHelper.java | 8 +- .../server/configuration/Configuration.java | 19 --- .../server/metadata/RoleCommandOrder.java | 45 +++++-- .../apache/ambari/server/state/StackInfo.java | 9 ++ .../src/main/resources/role_command_order.json | 100 +++++++++++++++ .../stacks/HDP/2.0.6/role_command_order.json | 100 +++++++++++++++ .../AmbariManagementControllerTest.java | 1 + .../server/metadata/RoleCommandOrderTest.java | 27 ++++ .../ambari/server/metadata/RoleGraphTest.java | 126 +++---------------- .../server/orm/InMemoryDefaultTestModule.java | 2 - .../server/stageplanner/TestStagePlanner.java | 106 ++-------------- .../stacks/HDP/2.0.6/role_command_order.json | 100 +++++++++++++++ 15 files changed, 407 insertions(+), 339 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-common/src/main/resources/role_command_order.json ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/resources/role_command_order.json b/ambari-common/src/main/resources/role_command_order.json deleted file mode 100644 index 307f211..0000000 --- a/ambari-common/src/main/resources/role_command_order.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_comment" : "Record format:", - "_comment" : "blockedRole-blockedCommand: [blockerRole1-blockerCommand1, blockerRole2-blockerCommand2, ...]", - "general_deps" : { - "_comment" : "dependencies for all cases", - "NAGIOS_SERVER-INSTALL" : ["HIVE_CLIENT-INSTALL", "HCAT-INSTALL", - "MAPREDUCE_CLIENT-INSTALL", "OOZIE_CLIENT-INSTALL"], - "HBASE_MASTER-START": ["ZOOKEEPER_SERVER-START"], - "HBASE_REGIONSERVER-START": ["HBASE_MASTER-START"], - "OOZIE_SERVER-START": ["JOBTRACKER-START", "TASKTRACKER-START"], - "WEBHCAT_SERVER-START": ["TASKTRACKER-START", "HIVE_SERVER-START"], - "HIVE_METASTORE-START": ["MYSQL_SERVER-START"], - "HIVE_SERVER-START": ["TASKTRACKER-START", "MYSQL_SERVER-START"], - "HUE_SERVER-START": ["HIVE_SERVER-START", "HCAT-START", "OOZIE_SERVER-START"], - "FLUME_SERVER-START": ["OOZIE_SERVER-START"], - "NAGIOS_SERVER-START": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START", - "GANGLIA_SERVER-START", "GANGLIA_MONITOR-START", "HCAT-START", - "HIVE_SERVER-START", "HIVE_METASTORE-START", "HUE_SERVER-START", - "JOBTRACKER-START", "TASKTRACKER-START", "ZOOKEEPER_SERVER-START", - "MYSQL_SERVER-START", "OOZIE_SERVER-START", "PIG-START", "SQOOP-START", - "WEBHCAT_SERVER-START", "FLUME_SERVER-START"], - "MAPREDUCE_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], - "OOZIE_SERVICE_CHECK-EXECUTE": ["OOZIE_SERVER-START"], - "WEBHCAT_SERVICE_CHECK-EXECUTE": ["WEBHCAT_SERVER-START"], - "HBASE_SERVICE_CHECK-EXECUTE": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START"], - "HIVE_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START", "HIVE_METASTORE-START"], - "HCAT_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START"], - "PIG_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], - "SQOOP_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], - "ZOOKEEPER_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], - "ZOOKEEPER_QUORUM_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], - "ZOOKEEPER_SERVER-STOP" : ["HBASE_MASTER-STOP", "HBASE_REGIONSERVER-STOP"], - "HBASE_MASTER-STOP": ["HBASE_REGIONSERVER-STOP"], - "TASKTRACKER-UPGRADE": ["JOBTRACKER-UPGRADE"], - "MAPREDUCE_CLIENT-UPGRADE": ["TASKTRACKER-UPGRADE", "JOBTRACKER-UPGRADE"], - "ZOOKEEPER_SERVER-UPGRADE": ["MAPREDUCE_CLIENT-UPGRADE"], - "ZOOKEEPER_CLIENT-UPGRADE": ["ZOOKEEPER_SERVER-UPGRADE"], - "HBASE_MASTER-UPGRADE": ["ZOOKEEPER_CLIENT-UPGRADE"], - "HBASE_REGIONSERVER-UPGRADE": ["HBASE_MASTER-UPGRADE"], - "HBASE_CLIENT-UPGRADE": ["HBASE_REGIONSERVER-UPGRADE"], - "HIVE_SERVER-UPGRADE" : ["HBASE_CLIENT-UPGRADE"], - "HIVE_METASTORE-UPGRADE" : ["HIVE_SERVER-UPGRADE"], - "MYSQL_SERVER-UPGRADE": ["HIVE_METASTORE-UPGRADE"], - "HIVE_CLIENT-UPGRADE": ["MYSQL_SERVER-UPGRADE"], - "HCAT-UPGRADE": ["HIVE_CLIENT-UPGRADE"], - "OOZIE_SERVER-UPGRADE" : ["HCAT-UPGRADE"], - "OOZIE_CLIENT-UPGRADE" : ["OOZIE_SERVER-UPGRADE"], - "WEBHCAT_SERVER-UPGRADE" : ["OOZIE_CLIENT-UPGRADE"], - "PIG-UPGRADE" : ["WEBHCAT_SERVER-UPGRADE"], - "SQOOP-UPGRADE" : ["PIG-UPGRADE"], - "NAGIOS_SERVER-UPGRADE" : ["SQOOP-UPGRADE"], - "GANGLIA_SERVER-UPGRADE" : ["NAGIOS_SERVER-UPGRADE"], - "GANGLIA_MONITOR-UPGRADE" : ["GANGLIA_SERVER-UPGRADE"] - }, - "_comment" : "HCFS-specific dependencies", - "optional_hcfs": { - "HBASE_MASTER-START": ["PEERSTATUS-START"], - "JOBTRACKER-START": ["PEERSTATUS-START"], - "TASKTRACKER-START": ["PEERSTATUS-START"], - "HCFS_SERVICE_CHECK-EXECUTE": ["PEERSTATUS-START"], - "JOBTRACKER-UPGRADE": ["HCFS_CLIENT-UPGRADE"] - }, - "_comment" : "Dependencies that are used when HCFS is not present in cluster", - "optional_no_hcfs": { - "SECONDARY_NAMENODE-START": ["NAMENODE-START"], - "RESOURCEMANAGER-START": ["NAMENODE-START", "DATANODE-START"], - "NODEMANAGER-START": ["NAMENODE-START", "DATANODE-START", "RESOURCEMANAGER-START"], - "HISTORYSERVER-START": ["NAMENODE-START", "DATANODE-START"], - "HBASE_MASTER-START": ["NAMENODE-START", "DATANODE-START"], - "JOBTRACKER-START": ["NAMENODE-START", "DATANODE-START"], - "TASKTRACKER-START": ["NAMENODE-START", "DATANODE-START"], - "HIVE_SERVER-START": ["DATANODE-START"], - "WEBHCAT_SERVER-START": ["DATANODE-START"], - "NAGIOS_SERVER-START": ["NAMENODE-START", "SECONDARY_NAMENODE-START", - "DATANODE-START", "RESOURCEMANAGER-START", "NODEMANAGER-START", "HISTORYSERVER-START"], - "HDFS_SERVICE_CHECK-EXECUTE": ["NAMENODE-START", "DATANODE-START", - "SECONDARY_NAMENODE-START"], - "MAPREDUCE2_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", - "RESOURCEMANAGER-START", "HISTORYSERVER-START", "YARN_SERVICE_CHECK-EXECUTE"], - "YARN_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", "RESOURCEMANAGER-START"], - "RESOURCEMANAGER_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START"], - "PIG_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START", "NODEMANAGER-START"], - "NAMENODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", - "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], - "DATANODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", - "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], - "SECONDARY_NAMENODE-UPGRADE": ["NAMENODE-UPGRADE"], - "DATANODE-UPGRADE": ["SECONDARY_NAMENODE-UPGRADE"], - "HDFS_CLIENT-UPGRADE": ["DATANODE-UPGRADE"], - "JOBTRACKER-UPGRADE": ["HDFS_CLIENT-UPGRADE"] - }, - "_comment" : "Dependencies that are used in HA NameNode cluster", - "optional_ha": { - "NAMENODE-START": ["JOURNALNODE-START", "ZOOKEEPER_SERVER-START"], - "ZKFC-START": ["NAMENODE-START"], - "NAGIOS_SERVER-START": ["ZKFC-START", "JOURNALNODE-START"], - "HDFS_SERVICE_CHECK-EXECUTE": ["ZKFC-START"] - } -} - http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml index a409324..ad3f53d 100644 --- a/ambari-server/pom.xml +++ b/ambari-server/pom.xml @@ -316,7 +316,7 @@ </source> <source> <!-- This file is also included into agent rpm--> - <location>../ambari-common/src/main/resources/role_command_order.json</location> + <location>src/main/resources/role_command_order.json</location> </source> </sources> </mapping> http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java index 6e2b731..86266d3 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java @@ -68,6 +68,7 @@ public class AmbariMetaInfo { public static final String SERVICE_METAINFO_FILE_NAME = "metainfo.xml"; public static final String SERVICE_CONFIG_FOLDER_NAME = "configuration"; public static final String SERVICE_CONFIG_FILE_NAME_POSTFIX = ".xml"; + public static final String RCO_FILE_NAME = "role_command_order.json"; private static final String REPOSITORY_FILE_NAME = "repoinfo.xml"; private static final String REPOSITORY_FOLDER_NAME = "repos"; private static final String REPOSITORY_XML_PROPERTY_BASEURL = "baseurl"; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java index cb18373..8feca20 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java @@ -31,19 +31,14 @@ import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import org.apache.ambari.server.api.services.AmbariMetaInfo; -import org.apache.ambari.server.orm.dao.MetainfoDAO; -import org.apache.ambari.server.orm.entities.MetainfoEntity; import org.apache.ambari.server.state.ComponentInfo; import org.apache.ambari.server.state.PropertyInfo; -import org.apache.ambari.server.state.RepositoryInfo; import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.StackInfo; import org.apache.ambari.server.state.stack.ConfigurationXml; import org.apache.ambari.server.state.stack.RepositoryXml; import org.apache.ambari.server.state.stack.ServiceMetainfoXml; import org.apache.ambari.server.state.stack.StackMetainfoXml; -import org.apache.ambari.server.state.stack.RepositoryXml.Os; -import org.apache.ambari.server.state.stack.RepositoryXml.Repo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -272,6 +267,9 @@ public class StackExtensionHelper { stackInfo.setMinUpgradeVersion(smx.getVersion().getUpgrade()); stackInfo.setActive(smx.getVersion().isActive()); stackInfo.setParentStackVersion(smx.getExtends()); + String rcoFileLocation = stackVersionFolder.getAbsolutePath() + File.separator + AmbariMetaInfo.RCO_FILE_NAME; + if (new File(rcoFileLocation).exists()) + stackInfo.setRcoFileLocation(rcoFileLocation); } try { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- 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 1684427..59404fe 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 @@ -248,22 +248,6 @@ public class Configuration { public static final String MASTER_KEY_ENV_PROP = "AMBARI_SECURITY_MASTER_KEY"; public static final String MASTER_KEY_FILENAME_DEFAULT = "master"; - - /** - * File role_command_order.json - */ - public static final String RCO_FILE_LOCATION_KEY = "server.rco.file"; - - /** - * Location of role_command_order.json in production system - */ - public static final String RCO_FILE_LOCATION_DEFAULT = "/var/lib/ambari-server/" + - "resources/role_command_order.json".replace("/", File.separator); - /** - * Location of role_command_order.json when tests are running - */ - public static final String RCO_FILE_LOCATION_TEST = "../ambari-common/src/" + - "main/resources/role_command_order.json".replace("/", File.separator); /** * Key for repo validation suffixes. @@ -341,9 +325,6 @@ public class Configuration { configsMap.put(JAVA_HOME_KEY, properties.getProperty( JAVA_HOME_KEY, JAVA_HOME_DEFAULT)); - configsMap.put(RCO_FILE_LOCATION_KEY, properties.getProperty( - RCO_FILE_LOCATION_KEY, RCO_FILE_LOCATION_DEFAULT)); - File passFile = new File(configsMap.get(SRVR_KSTR_DIR_KEY) + File.separator + configsMap.get(SRVR_CRT_PASS_FILE_KEY)); String password = null; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java b/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java index e3b06a8..26ba410 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/metadata/RoleCommandOrder.java @@ -23,10 +23,14 @@ import java.util.*; import com.google.inject.Inject; import org.apache.ambari.server.Role; import org.apache.ambari.server.RoleCommand; +import org.apache.ambari.server.api.services.AmbariMetaInfo; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.stageplanner.RoleGraphNode; import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.StackId; +import org.apache.ambari.server.state.StackInfo; import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.type.TypeReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.ambari.server.AmbariException; @@ -38,6 +42,7 @@ import org.apache.ambari.server.AmbariException; public class RoleCommandOrder { @Inject Configuration configs; + @Inject AmbariMetaInfo ambariMetaInfo; private final static Logger LOG = LoggerFactory.getLogger(RoleCommandOrder.class); @@ -47,6 +52,7 @@ public class RoleCommandOrder { private final static String NO_HCFS_DEPS_KEY = "optional_no_hcfs"; private final static String HA_DEPS_KEY = "optional_ha"; private final static String COMMENT_STR = "_comment"; + private static final String ROLE_COMMAND_ORDER_FILE = "role_command_order.json"; static class RoleCommandPair { Role role; @@ -118,11 +124,17 @@ public class RoleCommandOrder { this.dependencies.get(rcp1).add(rcp2); } - private File getRCOFile() { - Map<String, String> configsMap = configs.getConfigsMap(); - String rcoLocation = configsMap.get(Configuration.RCO_FILE_LOCATION_KEY); - File rcoFile = new File(rcoLocation); - return rcoFile; + private File getRCOFile(String stackName, String stackVersion) { + StackInfo stackInfo; + String rcoFileLocation = null; + try { + stackInfo = ambariMetaInfo.getStackInfo(stackName, stackVersion); + rcoFileLocation = stackInfo.getRcoFileLocation(); + } catch (AmbariException e) { + LOG.warn("Error getting stack info for :" + stackName + "-" + stackVersion); + } + + return rcoFileLocation == null ? null : new File(rcoFileLocation); } void addDependencies(Map<String, Object> jsonSection) { @@ -170,13 +182,28 @@ public class RoleCommandOrder { // Read data from JSON ObjectMapper mapper = new ObjectMapper(); - File rcoFile = getRCOFile(); + StackId currentStackVersion = cluster.getCurrentStackVersion(); + String stackName = currentStackVersion.getStackName(); + String stackVersion = currentStackVersion.getStackVersion(); + File rcoFile = getRCOFile(stackName, stackVersion); Map<String,Object> userData = null; + try { - userData = mapper.readValue(rcoFile, Map.class); + + TypeReference<Map<String,Object>> rcoElementTypeReference = new TypeReference<Map<String,Object>>() {}; + + if (rcoFile != null) { + userData = mapper.readValue(rcoFile, rcoElementTypeReference); + LOG.info("Role command order info was loaded from file: " + rcoFile.getAbsolutePath()); + } else { + InputStream rcoInputStream = ClassLoader.getSystemResourceAsStream(ROLE_COMMAND_ORDER_FILE); + userData = mapper.readValue(rcoInputStream, rcoElementTypeReference); + LOG.info("Role command order info was loaded from classpath: " + + ClassLoader.getSystemResource(ROLE_COMMAND_ORDER_FILE)); + } + } catch (IOException e) { - String errorMsg = String.format("Can not read file %s", rcoFile.getAbsolutePath()); - LOG.error(errorMsg, e); + LOG.error("Can not read role command order info", e); return; } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java index 896a969..6affad9 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/StackInfo.java @@ -28,6 +28,7 @@ public class StackInfo { private String version; private String minUpgradeVersion; private boolean active; + private String rcoFileLocation; private List<RepositoryInfo> repositories; private List<ServiceInfo> services; private String parentStackVersion; @@ -136,4 +137,12 @@ public class StackInfo { public void setParentStackVersion(String parentStackVersion) { this.parentStackVersion = parentStackVersion; } + + public String getRcoFileLocation() { + return rcoFileLocation; + } + + public void setRcoFileLocation(String rcoFileLocation) { + this.rcoFileLocation = rcoFileLocation; + } } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/resources/role_command_order.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/role_command_order.json b/ambari-server/src/main/resources/role_command_order.json new file mode 100644 index 0000000..307f211 --- /dev/null +++ b/ambari-server/src/main/resources/role_command_order.json @@ -0,0 +1,100 @@ +{ + "_comment" : "Record format:", + "_comment" : "blockedRole-blockedCommand: [blockerRole1-blockerCommand1, blockerRole2-blockerCommand2, ...]", + "general_deps" : { + "_comment" : "dependencies for all cases", + "NAGIOS_SERVER-INSTALL" : ["HIVE_CLIENT-INSTALL", "HCAT-INSTALL", + "MAPREDUCE_CLIENT-INSTALL", "OOZIE_CLIENT-INSTALL"], + "HBASE_MASTER-START": ["ZOOKEEPER_SERVER-START"], + "HBASE_REGIONSERVER-START": ["HBASE_MASTER-START"], + "OOZIE_SERVER-START": ["JOBTRACKER-START", "TASKTRACKER-START"], + "WEBHCAT_SERVER-START": ["TASKTRACKER-START", "HIVE_SERVER-START"], + "HIVE_METASTORE-START": ["MYSQL_SERVER-START"], + "HIVE_SERVER-START": ["TASKTRACKER-START", "MYSQL_SERVER-START"], + "HUE_SERVER-START": ["HIVE_SERVER-START", "HCAT-START", "OOZIE_SERVER-START"], + "FLUME_SERVER-START": ["OOZIE_SERVER-START"], + "NAGIOS_SERVER-START": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START", + "GANGLIA_SERVER-START", "GANGLIA_MONITOR-START", "HCAT-START", + "HIVE_SERVER-START", "HIVE_METASTORE-START", "HUE_SERVER-START", + "JOBTRACKER-START", "TASKTRACKER-START", "ZOOKEEPER_SERVER-START", + "MYSQL_SERVER-START", "OOZIE_SERVER-START", "PIG-START", "SQOOP-START", + "WEBHCAT_SERVER-START", "FLUME_SERVER-START"], + "MAPREDUCE_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "OOZIE_SERVICE_CHECK-EXECUTE": ["OOZIE_SERVER-START"], + "WEBHCAT_SERVICE_CHECK-EXECUTE": ["WEBHCAT_SERVER-START"], + "HBASE_SERVICE_CHECK-EXECUTE": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START"], + "HIVE_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START", "HIVE_METASTORE-START"], + "HCAT_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START"], + "PIG_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "SQOOP_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "ZOOKEEPER_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], + "ZOOKEEPER_QUORUM_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], + "ZOOKEEPER_SERVER-STOP" : ["HBASE_MASTER-STOP", "HBASE_REGIONSERVER-STOP"], + "HBASE_MASTER-STOP": ["HBASE_REGIONSERVER-STOP"], + "TASKTRACKER-UPGRADE": ["JOBTRACKER-UPGRADE"], + "MAPREDUCE_CLIENT-UPGRADE": ["TASKTRACKER-UPGRADE", "JOBTRACKER-UPGRADE"], + "ZOOKEEPER_SERVER-UPGRADE": ["MAPREDUCE_CLIENT-UPGRADE"], + "ZOOKEEPER_CLIENT-UPGRADE": ["ZOOKEEPER_SERVER-UPGRADE"], + "HBASE_MASTER-UPGRADE": ["ZOOKEEPER_CLIENT-UPGRADE"], + "HBASE_REGIONSERVER-UPGRADE": ["HBASE_MASTER-UPGRADE"], + "HBASE_CLIENT-UPGRADE": ["HBASE_REGIONSERVER-UPGRADE"], + "HIVE_SERVER-UPGRADE" : ["HBASE_CLIENT-UPGRADE"], + "HIVE_METASTORE-UPGRADE" : ["HIVE_SERVER-UPGRADE"], + "MYSQL_SERVER-UPGRADE": ["HIVE_METASTORE-UPGRADE"], + "HIVE_CLIENT-UPGRADE": ["MYSQL_SERVER-UPGRADE"], + "HCAT-UPGRADE": ["HIVE_CLIENT-UPGRADE"], + "OOZIE_SERVER-UPGRADE" : ["HCAT-UPGRADE"], + "OOZIE_CLIENT-UPGRADE" : ["OOZIE_SERVER-UPGRADE"], + "WEBHCAT_SERVER-UPGRADE" : ["OOZIE_CLIENT-UPGRADE"], + "PIG-UPGRADE" : ["WEBHCAT_SERVER-UPGRADE"], + "SQOOP-UPGRADE" : ["PIG-UPGRADE"], + "NAGIOS_SERVER-UPGRADE" : ["SQOOP-UPGRADE"], + "GANGLIA_SERVER-UPGRADE" : ["NAGIOS_SERVER-UPGRADE"], + "GANGLIA_MONITOR-UPGRADE" : ["GANGLIA_SERVER-UPGRADE"] + }, + "_comment" : "HCFS-specific dependencies", + "optional_hcfs": { + "HBASE_MASTER-START": ["PEERSTATUS-START"], + "JOBTRACKER-START": ["PEERSTATUS-START"], + "TASKTRACKER-START": ["PEERSTATUS-START"], + "HCFS_SERVICE_CHECK-EXECUTE": ["PEERSTATUS-START"], + "JOBTRACKER-UPGRADE": ["HCFS_CLIENT-UPGRADE"] + }, + "_comment" : "Dependencies that are used when HCFS is not present in cluster", + "optional_no_hcfs": { + "SECONDARY_NAMENODE-START": ["NAMENODE-START"], + "RESOURCEMANAGER-START": ["NAMENODE-START", "DATANODE-START"], + "NODEMANAGER-START": ["NAMENODE-START", "DATANODE-START", "RESOURCEMANAGER-START"], + "HISTORYSERVER-START": ["NAMENODE-START", "DATANODE-START"], + "HBASE_MASTER-START": ["NAMENODE-START", "DATANODE-START"], + "JOBTRACKER-START": ["NAMENODE-START", "DATANODE-START"], + "TASKTRACKER-START": ["NAMENODE-START", "DATANODE-START"], + "HIVE_SERVER-START": ["DATANODE-START"], + "WEBHCAT_SERVER-START": ["DATANODE-START"], + "NAGIOS_SERVER-START": ["NAMENODE-START", "SECONDARY_NAMENODE-START", + "DATANODE-START", "RESOURCEMANAGER-START", "NODEMANAGER-START", "HISTORYSERVER-START"], + "HDFS_SERVICE_CHECK-EXECUTE": ["NAMENODE-START", "DATANODE-START", + "SECONDARY_NAMENODE-START"], + "MAPREDUCE2_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", + "RESOURCEMANAGER-START", "HISTORYSERVER-START", "YARN_SERVICE_CHECK-EXECUTE"], + "YARN_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", "RESOURCEMANAGER-START"], + "RESOURCEMANAGER_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START"], + "PIG_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START", "NODEMANAGER-START"], + "NAMENODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", + "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], + "DATANODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", + "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], + "SECONDARY_NAMENODE-UPGRADE": ["NAMENODE-UPGRADE"], + "DATANODE-UPGRADE": ["SECONDARY_NAMENODE-UPGRADE"], + "HDFS_CLIENT-UPGRADE": ["DATANODE-UPGRADE"], + "JOBTRACKER-UPGRADE": ["HDFS_CLIENT-UPGRADE"] + }, + "_comment" : "Dependencies that are used in HA NameNode cluster", + "optional_ha": { + "NAMENODE-START": ["JOURNALNODE-START", "ZOOKEEPER_SERVER-START"], + "ZKFC-START": ["NAMENODE-START"], + "NAGIOS_SERVER-START": ["ZKFC-START", "JOURNALNODE-START"], + "HDFS_SERVICE_CHECK-EXECUTE": ["ZKFC-START"] + } +} + http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/main/resources/stacks/HDP/2.0.6/role_command_order.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/role_command_order.json b/ambari-server/src/main/resources/stacks/HDP/2.0.6/role_command_order.json new file mode 100644 index 0000000..307f211 --- /dev/null +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/role_command_order.json @@ -0,0 +1,100 @@ +{ + "_comment" : "Record format:", + "_comment" : "blockedRole-blockedCommand: [blockerRole1-blockerCommand1, blockerRole2-blockerCommand2, ...]", + "general_deps" : { + "_comment" : "dependencies for all cases", + "NAGIOS_SERVER-INSTALL" : ["HIVE_CLIENT-INSTALL", "HCAT-INSTALL", + "MAPREDUCE_CLIENT-INSTALL", "OOZIE_CLIENT-INSTALL"], + "HBASE_MASTER-START": ["ZOOKEEPER_SERVER-START"], + "HBASE_REGIONSERVER-START": ["HBASE_MASTER-START"], + "OOZIE_SERVER-START": ["JOBTRACKER-START", "TASKTRACKER-START"], + "WEBHCAT_SERVER-START": ["TASKTRACKER-START", "HIVE_SERVER-START"], + "HIVE_METASTORE-START": ["MYSQL_SERVER-START"], + "HIVE_SERVER-START": ["TASKTRACKER-START", "MYSQL_SERVER-START"], + "HUE_SERVER-START": ["HIVE_SERVER-START", "HCAT-START", "OOZIE_SERVER-START"], + "FLUME_SERVER-START": ["OOZIE_SERVER-START"], + "NAGIOS_SERVER-START": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START", + "GANGLIA_SERVER-START", "GANGLIA_MONITOR-START", "HCAT-START", + "HIVE_SERVER-START", "HIVE_METASTORE-START", "HUE_SERVER-START", + "JOBTRACKER-START", "TASKTRACKER-START", "ZOOKEEPER_SERVER-START", + "MYSQL_SERVER-START", "OOZIE_SERVER-START", "PIG-START", "SQOOP-START", + "WEBHCAT_SERVER-START", "FLUME_SERVER-START"], + "MAPREDUCE_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "OOZIE_SERVICE_CHECK-EXECUTE": ["OOZIE_SERVER-START"], + "WEBHCAT_SERVICE_CHECK-EXECUTE": ["WEBHCAT_SERVER-START"], + "HBASE_SERVICE_CHECK-EXECUTE": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START"], + "HIVE_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START", "HIVE_METASTORE-START"], + "HCAT_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START"], + "PIG_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "SQOOP_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "ZOOKEEPER_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], + "ZOOKEEPER_QUORUM_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], + "ZOOKEEPER_SERVER-STOP" : ["HBASE_MASTER-STOP", "HBASE_REGIONSERVER-STOP"], + "HBASE_MASTER-STOP": ["HBASE_REGIONSERVER-STOP"], + "TASKTRACKER-UPGRADE": ["JOBTRACKER-UPGRADE"], + "MAPREDUCE_CLIENT-UPGRADE": ["TASKTRACKER-UPGRADE", "JOBTRACKER-UPGRADE"], + "ZOOKEEPER_SERVER-UPGRADE": ["MAPREDUCE_CLIENT-UPGRADE"], + "ZOOKEEPER_CLIENT-UPGRADE": ["ZOOKEEPER_SERVER-UPGRADE"], + "HBASE_MASTER-UPGRADE": ["ZOOKEEPER_CLIENT-UPGRADE"], + "HBASE_REGIONSERVER-UPGRADE": ["HBASE_MASTER-UPGRADE"], + "HBASE_CLIENT-UPGRADE": ["HBASE_REGIONSERVER-UPGRADE"], + "HIVE_SERVER-UPGRADE" : ["HBASE_CLIENT-UPGRADE"], + "HIVE_METASTORE-UPGRADE" : ["HIVE_SERVER-UPGRADE"], + "MYSQL_SERVER-UPGRADE": ["HIVE_METASTORE-UPGRADE"], + "HIVE_CLIENT-UPGRADE": ["MYSQL_SERVER-UPGRADE"], + "HCAT-UPGRADE": ["HIVE_CLIENT-UPGRADE"], + "OOZIE_SERVER-UPGRADE" : ["HCAT-UPGRADE"], + "OOZIE_CLIENT-UPGRADE" : ["OOZIE_SERVER-UPGRADE"], + "WEBHCAT_SERVER-UPGRADE" : ["OOZIE_CLIENT-UPGRADE"], + "PIG-UPGRADE" : ["WEBHCAT_SERVER-UPGRADE"], + "SQOOP-UPGRADE" : ["PIG-UPGRADE"], + "NAGIOS_SERVER-UPGRADE" : ["SQOOP-UPGRADE"], + "GANGLIA_SERVER-UPGRADE" : ["NAGIOS_SERVER-UPGRADE"], + "GANGLIA_MONITOR-UPGRADE" : ["GANGLIA_SERVER-UPGRADE"] + }, + "_comment" : "HCFS-specific dependencies", + "optional_hcfs": { + "HBASE_MASTER-START": ["PEERSTATUS-START"], + "JOBTRACKER-START": ["PEERSTATUS-START"], + "TASKTRACKER-START": ["PEERSTATUS-START"], + "HCFS_SERVICE_CHECK-EXECUTE": ["PEERSTATUS-START"], + "JOBTRACKER-UPGRADE": ["HCFS_CLIENT-UPGRADE"] + }, + "_comment" : "Dependencies that are used when HCFS is not present in cluster", + "optional_no_hcfs": { + "SECONDARY_NAMENODE-START": ["NAMENODE-START"], + "RESOURCEMANAGER-START": ["NAMENODE-START", "DATANODE-START"], + "NODEMANAGER-START": ["NAMENODE-START", "DATANODE-START", "RESOURCEMANAGER-START"], + "HISTORYSERVER-START": ["NAMENODE-START", "DATANODE-START"], + "HBASE_MASTER-START": ["NAMENODE-START", "DATANODE-START"], + "JOBTRACKER-START": ["NAMENODE-START", "DATANODE-START"], + "TASKTRACKER-START": ["NAMENODE-START", "DATANODE-START"], + "HIVE_SERVER-START": ["DATANODE-START"], + "WEBHCAT_SERVER-START": ["DATANODE-START"], + "NAGIOS_SERVER-START": ["NAMENODE-START", "SECONDARY_NAMENODE-START", + "DATANODE-START", "RESOURCEMANAGER-START", "NODEMANAGER-START", "HISTORYSERVER-START"], + "HDFS_SERVICE_CHECK-EXECUTE": ["NAMENODE-START", "DATANODE-START", + "SECONDARY_NAMENODE-START"], + "MAPREDUCE2_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", + "RESOURCEMANAGER-START", "HISTORYSERVER-START", "YARN_SERVICE_CHECK-EXECUTE"], + "YARN_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", "RESOURCEMANAGER-START"], + "RESOURCEMANAGER_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START"], + "PIG_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START", "NODEMANAGER-START"], + "NAMENODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", + "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], + "DATANODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", + "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], + "SECONDARY_NAMENODE-UPGRADE": ["NAMENODE-UPGRADE"], + "DATANODE-UPGRADE": ["SECONDARY_NAMENODE-UPGRADE"], + "HDFS_CLIENT-UPGRADE": ["DATANODE-UPGRADE"], + "JOBTRACKER-UPGRADE": ["HDFS_CLIENT-UPGRADE"] + }, + "_comment" : "Dependencies that are used in HA NameNode cluster", + "optional_ha": { + "NAMENODE-START": ["JOURNALNODE-START", "ZOOKEEPER_SERVER-START"], + "ZKFC-START": ["NAMENODE-START"], + "NAGIOS_SERVER-START": ["ZKFC-START", "JOURNALNODE-START"], + "HDFS_SERVICE_CHECK-EXECUTE": ["ZKFC-START"] + } +} + http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java index a18bcc6..96adc3c 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java @@ -3527,6 +3527,7 @@ public class AmbariManagementControllerTest { Cluster cluster = clusters.getCluster("c1"); cluster.setDesiredStackVersion(new StackId("HDP-0.1")); + cluster.setCurrentStackVersion(new StackId("HDP-0.1")); ConfigFactory cf = injector.getInstance(ConfigFactory.class); Config config1 = cf.createNew(cluster, "global", http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java index 8056317..5b36299 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleCommandOrderTest.java @@ -38,6 +38,7 @@ import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; +import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.cluster.ClusterImpl; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonMethod; @@ -79,6 +80,7 @@ public class RoleCommandOrderTest { RoleCommandOrder rco = injector.getInstance(RoleCommandOrder.class); ClusterImpl cluster = createMock(ClusterImpl.class); Service service = createMock(Service.class); + expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6")); expect(cluster.getService("HCFS")).andReturn(service); expect(cluster.getService("HDFS")).andReturn(null); replay(cluster); @@ -127,6 +129,7 @@ public class RoleCommandOrderTest { expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce(); expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(null); + expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6")); replay(cluster); replay(hdfsService); @@ -170,6 +173,7 @@ public class RoleCommandOrderTest { expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce(); expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(journalnodeSC); + expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.6")); replay(cluster); replay(hdfsService); @@ -225,7 +229,30 @@ public class RoleCommandOrderTest { assertEquals(expected, dump); } + + + @Test + public void testInitializeDefault() throws IOException { + RoleCommandOrder rco = injector.getInstance(RoleCommandOrder.class); + ClusterImpl cluster = createMock(ClusterImpl.class); + expect(cluster.getService("HCFS")).andReturn(null); + + Service hdfsService = createMock(Service.class); + + expect(cluster.getService("HDFS")).andReturn(hdfsService).atLeastOnce(); + expect(hdfsService.getServiceComponent("JOURNALNODE")).andReturn(null); + //There is no rco file in this stack, should use default + expect(cluster.getCurrentStackVersion()).andReturn(new StackId("HDP", "2.0.5")); + replay(cluster); + replay(hdfsService); + + rco.initialize(cluster); + + verify(cluster); + verify(hdfsService); + } + private boolean dependenciesContainBlockedRole(Map<RoleCommandPair, Set<RoleCommandPair>> deps, Role blocked) { for (RoleCommandPair blockedPair : deps.keySet()) { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java index 924f181..9b3b586 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/metadata/RoleGraphTest.java @@ -18,10 +18,6 @@ package org.apache.ambari.server.metadata; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -32,111 +28,30 @@ import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.Role; import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.stageplanner.RoleGraphNode; +import org.junit.After; import org.junit.Test; -import org.apache.ambari.server.orm.entities.ClusterEntity; -import org.apache.ambari.server.orm.entities.ClusterServiceEntity; -import org.apache.ambari.server.orm.entities.HostEntity; -import org.apache.ambari.server.state.HostState; -import org.apache.ambari.server.orm.entities.HostStateEntity; -import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity; +import org.apache.ambari.server.state.Service; +import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.StackId; -import com.google.gson.Gson; + import com.google.inject.Guice; import com.google.inject.Injector; -import org.apache.ambari.server.orm.GuiceJpaInitializer; -import org.apache.ambari.server.state.cluster.ClusterImpl; import com.google.inject.persist.PersistService; + +import org.apache.ambari.server.state.cluster.ClusterImpl; +import org.apache.ambari.server.orm.GuiceJpaInitializer; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; -import org.junit.After; import org.junit.Before; public class RoleGraphTest { + private Injector injector; - - public ClusterEntity createDummyData() { - ClusterEntity clusterEntity = new ClusterEntity(); - clusterEntity.setClusterName("test_cluster1"); - clusterEntity.setClusterInfo("test_cluster_info1"); - clusterEntity.setClusterId(1l); - - HostEntity host1 = new HostEntity(); - HostEntity host2 = new HostEntity(); - HostEntity host3 = new HostEntity(); - - host1.setHostName("test_host1"); - host2.setHostName("test_host2"); - host3.setHostName("test_host3"); - host1.setIpv4("192.168.0.1"); - host2.setIpv4("192.168.0.2"); - host3.setIpv4("192.168.0.3"); - - List<HostEntity> hostEntities = new ArrayList<HostEntity>(); - hostEntities.add(host1); - hostEntities.add(host2); - - clusterEntity.setHostEntities(hostEntities); - clusterEntity.setClusterConfigEntities(Collections.EMPTY_LIST); - //both sides of relation should be set when modifying in runtime - host1.setClusterEntities(Arrays.asList(clusterEntity)); - host2.setClusterEntities(Arrays.asList(clusterEntity)); - - HostStateEntity hostStateEntity1 = new HostStateEntity(); - hostStateEntity1.setCurrentState(HostState.HEARTBEAT_LOST); - hostStateEntity1.setHostEntity(host1); - HostStateEntity hostStateEntity2 = new HostStateEntity(); - hostStateEntity2.setCurrentState(HostState.HEALTHY); - hostStateEntity2.setHostEntity(host2); - host1.setHostStateEntity(hostStateEntity1); - host2.setHostStateEntity(hostStateEntity2); - - ClusterServiceEntity clusterServiceEntity = new ClusterServiceEntity(); - - clusterServiceEntity.setServiceName("HDFS"); - clusterServiceEntity.setClusterEntity(clusterEntity); - clusterServiceEntity.setServiceComponentDesiredStateEntities( - Collections.EMPTY_LIST); - clusterServiceEntity.setServiceConfigMappings(Collections.EMPTY_LIST); - ServiceDesiredStateEntity stateEntity = mock(ServiceDesiredStateEntity.class); - Gson gson = new Gson(); - when(stateEntity.getDesiredStackVersion()).thenReturn(gson.toJson(new StackId("HDP-2.0.5"), - StackId.class)); - clusterServiceEntity.setServiceDesiredStateEntity(stateEntity); - List<ClusterServiceEntity> clusterServiceEntities = new ArrayList<ClusterServiceEntity>(); - clusterServiceEntities.add(clusterServiceEntity); - clusterEntity.setClusterServiceEntities(clusterServiceEntities); - - - return clusterEntity; - } - + @Before public void setup() throws Exception { injector = Guice.createInjector(new InMemoryDefaultTestModule()); - injector.getInstance(GuiceJpaInitializer.class); - /* - clusters = injector.getInstance(Clusters.class); - serviceFactory = injector.getInstance(ServiceFactory.class); - serviceComponentFactory = injector.getInstance( - ServiceComponentFactory.class); - serviceComponentHostFactory = injector.getInstance( - ServiceComponentHostFactory.class); - configFactory = injector.getInstance(ConfigFactory.class); - metaInfo = injector.getInstance(AmbariMetaInfo.class); - metaInfo.init(); - clusters.addCluster("c1"); - c1 = clusters.getCluster("c1"); - Assert.assertEquals("c1", c1.getClusterName()); - Assert.assertEquals(1, c1.getClusterId()); - clusters.addHost("h1"); - Host host = clusters.getHost("h1"); - host.setIPv4("ipv4"); - host.setIPv6("ipv6"); - host.setOsType("centos5"); - host.persist(); - c1.setDesiredStackVersion(new StackId("HDP-0.1")); - clusters.mapHostToCluster("h1", "c1"); - */ + injector.getInstance(GuiceJpaInitializer.class); } @After @@ -145,10 +60,12 @@ public class RoleGraphTest { } @Test - public void testValidateOrder() { + public void testValidateOrder() throws AmbariException { RoleCommandOrder rco = injector.getInstance(RoleCommandOrder.class); - ClusterEntity entity = createDummyData(); - ClusterImpl cluster = new ClusterImpl(entity, injector); + ClusterImpl cluster = mock(ClusterImpl.class); + + when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6")); + rco.initialize(cluster); RoleGraphNode datanode_upgrade = new RoleGraphNode(Role.DATANODE, RoleCommand.UPGRADE); @@ -254,19 +171,16 @@ public class RoleGraphTest { //Enable HA for cluster - try { - cluster.getService("HDFS").addServiceComponent("JOURNALNODE"); - } catch (AmbariException e) { - Assert.fail("Failed to add journal node for cluster."); - } + Service hdfsServiceMock = mock(Service.class); + ServiceComponent jnComponentMock = mock(ServiceComponent.class); + when(cluster.getService("HDFS")).thenReturn(hdfsServiceMock); + when(hdfsServiceMock.getServiceComponent("JOURNALNODE")).thenReturn(jnComponentMock); + rco.initialize(cluster); Assert.assertEquals(1, rco.order(nn_start, jn_start)); Assert.assertEquals(1, rco.order(nn_start, zk_server_start)); Assert.assertEquals(1, rco.order(zkfc_start, nn_start)); Assert.assertEquals(1, rco.order(nagios_start, zkfc_start)); Assert.assertEquals(1, rco.order(nagios_start, jn_start)); - - - } } http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java index 459929f..eed56a4 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java @@ -37,8 +37,6 @@ public class InMemoryDefaultTestModule extends AbstractModule { "target/version"); properties.setProperty(Configuration.OS_VERSION_KEY, "centos5"); - properties.setProperty(Configuration.RCO_FILE_LOCATION_KEY, - Configuration.RCO_FILE_LOCATION_TEST); try { install(new ControllerModule(properties)); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java index ecd1ea5..8206fff 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/stageplanner/TestStagePlanner.java @@ -21,16 +21,11 @@ import static org.junit.Assert.*; import java.util.HashMap; import java.util.List; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; +import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.Role; import org.apache.ambari.server.RoleCommand; import org.apache.ambari.server.actionmanager.Stage; -import org.apache.ambari.server.controller.HostsMap; import org.apache.ambari.server.metadata.RoleCommandOrder; import org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent; import org.apache.ambari.server.utils.StageUtils; @@ -39,16 +34,7 @@ import org.junit.Test; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.orm.entities.ClusterEntity; -import org.apache.ambari.server.orm.entities.ClusterServiceEntity; -import org.apache.ambari.server.state.Cluster; -import org.apache.ambari.server.orm.entities.HostEntity; -import org.apache.ambari.server.state.HostState; -import org.apache.ambari.server.orm.entities.HostStateEntity; -import org.apache.ambari.server.orm.entities.ServiceDesiredStateEntity; import org.apache.ambari.server.state.StackId; -import com.google.gson.Gson; import com.google.inject.Guice; import com.google.inject.Injector; import org.apache.ambari.server.orm.GuiceJpaInitializer; @@ -62,85 +48,10 @@ public class TestStagePlanner { private Injector injector; - public ClusterEntity createDummyData() { - ClusterEntity clusterEntity = new ClusterEntity(); - clusterEntity.setClusterName("test_cluster1"); - clusterEntity.setClusterInfo("test_cluster_info1"); - - HostEntity host1 = new HostEntity(); - HostEntity host2 = new HostEntity(); - HostEntity host3 = new HostEntity(); - - host1.setHostName("test_host1"); - host2.setHostName("test_host2"); - host3.setHostName("test_host3"); - host1.setIpv4("192.168.0.1"); - host2.setIpv4("192.168.0.2"); - host3.setIpv4("192.168.0.3"); - - List<HostEntity> hostEntities = new ArrayList<HostEntity>(); - hostEntities.add(host1); - hostEntities.add(host2); - - clusterEntity.setHostEntities(hostEntities); - clusterEntity.setClusterConfigEntities(Collections.EMPTY_LIST); - //both sides of relation should be set when modifying in runtime - host1.setClusterEntities(Arrays.asList(clusterEntity)); - host2.setClusterEntities(Arrays.asList(clusterEntity)); - - HostStateEntity hostStateEntity1 = new HostStateEntity(); - hostStateEntity1.setCurrentState(HostState.HEARTBEAT_LOST); - hostStateEntity1.setHostEntity(host1); - HostStateEntity hostStateEntity2 = new HostStateEntity(); - hostStateEntity2.setCurrentState(HostState.HEALTHY); - hostStateEntity2.setHostEntity(host2); - host1.setHostStateEntity(hostStateEntity1); - host2.setHostStateEntity(hostStateEntity2); - - ClusterServiceEntity clusterServiceEntity = new ClusterServiceEntity(); - clusterServiceEntity.setServiceName("HDFS"); - clusterServiceEntity.setClusterEntity(clusterEntity); - clusterServiceEntity.setServiceComponentDesiredStateEntities( - Collections.EMPTY_LIST); - clusterServiceEntity.setServiceConfigMappings(Collections.EMPTY_LIST); - ServiceDesiredStateEntity stateEntity = mock(ServiceDesiredStateEntity.class); - Gson gson = new Gson(); - when(stateEntity.getDesiredStackVersion()).thenReturn(gson.toJson(new StackId("HDP-0.1"), - StackId.class)); - clusterServiceEntity.setServiceDesiredStateEntity(stateEntity); - List<ClusterServiceEntity> clusterServiceEntities = new ArrayList<ClusterServiceEntity>(); - clusterServiceEntities.add(clusterServiceEntity); - clusterEntity.setClusterServiceEntities(clusterServiceEntities); - return clusterEntity; - } - @Before public void setup() throws Exception { injector = Guice.createInjector(new InMemoryDefaultTestModule()); injector.getInstance(GuiceJpaInitializer.class); - /* - clusters = injector.getInstance(Clusters.class); - serviceFactory = injector.getInstance(ServiceFactory.class); - serviceComponentFactory = injector.getInstance( - ServiceComponentFactory.class); - serviceComponentHostFactory = injector.getInstance( - ServiceComponentHostFactory.class); - configFactory = injector.getInstance(ConfigFactory.class); - metaInfo = injector.getInstance(AmbariMetaInfo.class); - metaInfo.init(); - clusters.addCluster("c1"); - c1 = clusters.getCluster("c1"); - Assert.assertEquals("c1", c1.getClusterName()); - Assert.assertEquals(1, c1.getClusterId()); - clusters.addHost("h1"); - Host host = clusters.getHost("h1"); - host.setIPv4("ipv4"); - host.setIPv6("ipv6"); - host.setOsType("centos5"); - host.persist(); - c1.setDesiredStackVersion(new StackId("HDP-0.1")); - clusters.mapHostToCluster("h1", "c1"); - */ } @After @@ -149,10 +60,11 @@ public class TestStagePlanner { } @Test - public void testSingleStagePlan() { + public void testSingleStagePlan() throws AmbariException { RoleCommandOrder rco = injector.getInstance(RoleCommandOrder.class); - ClusterEntity entity = createDummyData(); - ClusterImpl cluster = new ClusterImpl(entity, injector); + ClusterImpl cluster = mock(ClusterImpl.class); + when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6")); + rco.initialize(cluster); RoleGraph rg = new RoleGraph(rco); @@ -171,8 +83,8 @@ public class TestStagePlanner { @Test public void testMultiStagePlan() { RoleCommandOrder rco = injector.getInstance(RoleCommandOrder.class); - ClusterEntity entity = createDummyData(); - ClusterImpl cluster = new ClusterImpl(entity, injector); + ClusterImpl cluster = mock(ClusterImpl.class); + when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6")); rco.initialize(cluster); RoleGraph rg = new RoleGraph(rco); long now = System.currentTimeMillis(); @@ -197,8 +109,8 @@ public class TestStagePlanner { @Test public void testManyStages() { RoleCommandOrder rco = injector.getInstance(RoleCommandOrder.class); - ClusterEntity entity = createDummyData(); - ClusterImpl cluster = new ClusterImpl(entity, injector); + ClusterImpl cluster = mock(ClusterImpl.class); + when(cluster.getCurrentStackVersion()).thenReturn(new StackId("HDP-2.0.6")); rco.initialize(cluster); RoleGraph rg = new RoleGraph(rco); long now = System.currentTimeMillis(); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/f1d232fb/ambari-server/src/test/resources/stacks/HDP/2.0.6/role_command_order.json ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/resources/stacks/HDP/2.0.6/role_command_order.json b/ambari-server/src/test/resources/stacks/HDP/2.0.6/role_command_order.json new file mode 100644 index 0000000..307f211 --- /dev/null +++ b/ambari-server/src/test/resources/stacks/HDP/2.0.6/role_command_order.json @@ -0,0 +1,100 @@ +{ + "_comment" : "Record format:", + "_comment" : "blockedRole-blockedCommand: [blockerRole1-blockerCommand1, blockerRole2-blockerCommand2, ...]", + "general_deps" : { + "_comment" : "dependencies for all cases", + "NAGIOS_SERVER-INSTALL" : ["HIVE_CLIENT-INSTALL", "HCAT-INSTALL", + "MAPREDUCE_CLIENT-INSTALL", "OOZIE_CLIENT-INSTALL"], + "HBASE_MASTER-START": ["ZOOKEEPER_SERVER-START"], + "HBASE_REGIONSERVER-START": ["HBASE_MASTER-START"], + "OOZIE_SERVER-START": ["JOBTRACKER-START", "TASKTRACKER-START"], + "WEBHCAT_SERVER-START": ["TASKTRACKER-START", "HIVE_SERVER-START"], + "HIVE_METASTORE-START": ["MYSQL_SERVER-START"], + "HIVE_SERVER-START": ["TASKTRACKER-START", "MYSQL_SERVER-START"], + "HUE_SERVER-START": ["HIVE_SERVER-START", "HCAT-START", "OOZIE_SERVER-START"], + "FLUME_SERVER-START": ["OOZIE_SERVER-START"], + "NAGIOS_SERVER-START": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START", + "GANGLIA_SERVER-START", "GANGLIA_MONITOR-START", "HCAT-START", + "HIVE_SERVER-START", "HIVE_METASTORE-START", "HUE_SERVER-START", + "JOBTRACKER-START", "TASKTRACKER-START", "ZOOKEEPER_SERVER-START", + "MYSQL_SERVER-START", "OOZIE_SERVER-START", "PIG-START", "SQOOP-START", + "WEBHCAT_SERVER-START", "FLUME_SERVER-START"], + "MAPREDUCE_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "OOZIE_SERVICE_CHECK-EXECUTE": ["OOZIE_SERVER-START"], + "WEBHCAT_SERVICE_CHECK-EXECUTE": ["WEBHCAT_SERVER-START"], + "HBASE_SERVICE_CHECK-EXECUTE": ["HBASE_MASTER-START", "HBASE_REGIONSERVER-START"], + "HIVE_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START", "HIVE_METASTORE-START"], + "HCAT_SERVICE_CHECK-EXECUTE": ["HIVE_SERVER-START"], + "PIG_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "SQOOP_SERVICE_CHECK-EXECUTE": ["JOBTRACKER-START", "TASKTRACKER-START"], + "ZOOKEEPER_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], + "ZOOKEEPER_QUORUM_SERVICE_CHECK-EXECUTE": ["ZOOKEEPER_SERVER-START"], + "ZOOKEEPER_SERVER-STOP" : ["HBASE_MASTER-STOP", "HBASE_REGIONSERVER-STOP"], + "HBASE_MASTER-STOP": ["HBASE_REGIONSERVER-STOP"], + "TASKTRACKER-UPGRADE": ["JOBTRACKER-UPGRADE"], + "MAPREDUCE_CLIENT-UPGRADE": ["TASKTRACKER-UPGRADE", "JOBTRACKER-UPGRADE"], + "ZOOKEEPER_SERVER-UPGRADE": ["MAPREDUCE_CLIENT-UPGRADE"], + "ZOOKEEPER_CLIENT-UPGRADE": ["ZOOKEEPER_SERVER-UPGRADE"], + "HBASE_MASTER-UPGRADE": ["ZOOKEEPER_CLIENT-UPGRADE"], + "HBASE_REGIONSERVER-UPGRADE": ["HBASE_MASTER-UPGRADE"], + "HBASE_CLIENT-UPGRADE": ["HBASE_REGIONSERVER-UPGRADE"], + "HIVE_SERVER-UPGRADE" : ["HBASE_CLIENT-UPGRADE"], + "HIVE_METASTORE-UPGRADE" : ["HIVE_SERVER-UPGRADE"], + "MYSQL_SERVER-UPGRADE": ["HIVE_METASTORE-UPGRADE"], + "HIVE_CLIENT-UPGRADE": ["MYSQL_SERVER-UPGRADE"], + "HCAT-UPGRADE": ["HIVE_CLIENT-UPGRADE"], + "OOZIE_SERVER-UPGRADE" : ["HCAT-UPGRADE"], + "OOZIE_CLIENT-UPGRADE" : ["OOZIE_SERVER-UPGRADE"], + "WEBHCAT_SERVER-UPGRADE" : ["OOZIE_CLIENT-UPGRADE"], + "PIG-UPGRADE" : ["WEBHCAT_SERVER-UPGRADE"], + "SQOOP-UPGRADE" : ["PIG-UPGRADE"], + "NAGIOS_SERVER-UPGRADE" : ["SQOOP-UPGRADE"], + "GANGLIA_SERVER-UPGRADE" : ["NAGIOS_SERVER-UPGRADE"], + "GANGLIA_MONITOR-UPGRADE" : ["GANGLIA_SERVER-UPGRADE"] + }, + "_comment" : "HCFS-specific dependencies", + "optional_hcfs": { + "HBASE_MASTER-START": ["PEERSTATUS-START"], + "JOBTRACKER-START": ["PEERSTATUS-START"], + "TASKTRACKER-START": ["PEERSTATUS-START"], + "HCFS_SERVICE_CHECK-EXECUTE": ["PEERSTATUS-START"], + "JOBTRACKER-UPGRADE": ["HCFS_CLIENT-UPGRADE"] + }, + "_comment" : "Dependencies that are used when HCFS is not present in cluster", + "optional_no_hcfs": { + "SECONDARY_NAMENODE-START": ["NAMENODE-START"], + "RESOURCEMANAGER-START": ["NAMENODE-START", "DATANODE-START"], + "NODEMANAGER-START": ["NAMENODE-START", "DATANODE-START", "RESOURCEMANAGER-START"], + "HISTORYSERVER-START": ["NAMENODE-START", "DATANODE-START"], + "HBASE_MASTER-START": ["NAMENODE-START", "DATANODE-START"], + "JOBTRACKER-START": ["NAMENODE-START", "DATANODE-START"], + "TASKTRACKER-START": ["NAMENODE-START", "DATANODE-START"], + "HIVE_SERVER-START": ["DATANODE-START"], + "WEBHCAT_SERVER-START": ["DATANODE-START"], + "NAGIOS_SERVER-START": ["NAMENODE-START", "SECONDARY_NAMENODE-START", + "DATANODE-START", "RESOURCEMANAGER-START", "NODEMANAGER-START", "HISTORYSERVER-START"], + "HDFS_SERVICE_CHECK-EXECUTE": ["NAMENODE-START", "DATANODE-START", + "SECONDARY_NAMENODE-START"], + "MAPREDUCE2_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", + "RESOURCEMANAGER-START", "HISTORYSERVER-START", "YARN_SERVICE_CHECK-EXECUTE"], + "YARN_SERVICE_CHECK-EXECUTE": ["NODEMANAGER-START", "RESOURCEMANAGER-START"], + "RESOURCEMANAGER_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START"], + "PIG_SERVICE_CHECK-EXECUTE": ["RESOURCEMANAGER-START", "NODEMANAGER-START"], + "NAMENODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", + "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], + "DATANODE-STOP": ["JOBTRACKER-STOP", "TASKTRACKER-STOP", "RESOURCEMANAGER-STOP", + "NODEMANAGER-STOP", "HISTORYSERVER-STOP", "HBASE_MASTER-STOP"], + "SECONDARY_NAMENODE-UPGRADE": ["NAMENODE-UPGRADE"], + "DATANODE-UPGRADE": ["SECONDARY_NAMENODE-UPGRADE"], + "HDFS_CLIENT-UPGRADE": ["DATANODE-UPGRADE"], + "JOBTRACKER-UPGRADE": ["HDFS_CLIENT-UPGRADE"] + }, + "_comment" : "Dependencies that are used in HA NameNode cluster", + "optional_ha": { + "NAMENODE-START": ["JOURNALNODE-START", "ZOOKEEPER_SERVER-START"], + "ZKFC-START": ["NAMENODE-START"], + "NAGIOS_SERVER-START": ["ZKFC-START", "JOURNALNODE-START"], + "HDFS_SERVICE_CHECK-EXECUTE": ["ZKFC-START"] + } +} +
