You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by od...@apache.org on 2013/10/11 19:37:51 UTC

git commit: AMBARI-3499. Refactor RoleCommandOrder.initialize().(odiachenko)

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 <od...@hortonworks.com>
Authored: Fri Oct 11 20:37:31 2013 +0300
Committer: Oleksandr Diachenko <od...@hortonworks.com>
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"]
+  }
+}
+