You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2015/11/14 00:01:56 UTC
ambari git commit: AMBARI-9363: role_command_order.json should not be
at stack level (Tim Thorpe via jluniya)
Repository: ambari
Updated Branches:
refs/heads/trunk 46d715418 -> aeac887af
AMBARI-9363: role_command_order.json should not be at stack level (Tim Thorpe via jluniya)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/aeac887a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/aeac887a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/aeac887a
Branch: refs/heads/trunk
Commit: aeac887af133834553355ef803a8ac59827795d1
Parents: 46d7154
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Fri Nov 13 15:01:50 2015 -0800
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Fri Nov 13 15:01:50 2015 -0800
----------------------------------------------------------------------
.../ambari/server/stack/StackDirectory.java | 42 +++++++++++++-
.../state/stack/StackRoleCommandOrder.java | 59 +++++++++++++++++++-
.../ambari/server/stack/StackManagerTest.java | 9 +++
.../2.1.1/services/PIG/role_command_order.json | 12 ++++
4 files changed, 117 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/aeac887a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
index 90b8f10..9cfeffe 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackDirectory.java
@@ -32,6 +32,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.bind.JAXBException;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -39,7 +40,9 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.Map;
+import java.util.Set;
/**
* Encapsulates IO operations on a stack definition stack directory.
@@ -474,13 +477,11 @@ public class StackDirectory extends StackDefinitionDirectory {
/**
* Parse role command order file
*/
-
private void parseRoleCommandOrder() {
HashMap<String, Object> result = null;
ObjectMapper mapper = new ObjectMapper();
try {
- TypeReference<Map<String, Object>> rcoElementTypeReference = new TypeReference<Map<String, Object>>() {
- };
+ TypeReference<Map<String, Object>> rcoElementTypeReference = new TypeReference<Map<String, Object>>() {};
if (rcoFilePath != null) {
File file = new File(rcoFilePath);
result = mapper.readValue(file, rcoElementTypeReference);
@@ -492,8 +493,43 @@ public class StackDirectory extends StackDefinitionDirectory {
ClassLoader.getSystemResource(ROLE_COMMAND_ORDER_FILE));
}
roleCommandOrder = new StackRoleCommandOrder(result);
+ parseRoleCommandOrdersForServices();
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Role Command Order for " + rcoFilePath);
+ roleCommandOrder.printRoleCommandOrder(LOG);
+ }
} catch (IOException e) {
LOG.error(String.format("Can not read role command order info %s", rcoFilePath), e);
}
}
+
+ private void parseRoleCommandOrdersForServices() {
+ if (rcoFilePath != null) {
+ File stack = new File(rcoFilePath).getParentFile();
+ File servicesDir = new File(stack, "services");
+ File[] services = servicesDir.listFiles();
+ for (File service : services) {
+ if (service.isDirectory()) {
+ File rcoFile = new File(service, ROLE_COMMAND_ORDER_FILE);
+ if (rcoFile.exists())
+ parseRoleCommandOrdersForService(rcoFile);
+ }
+ }
+ }
+ }
+
+ private void parseRoleCommandOrdersForService(File rcoFile) {
+ HashMap<String, Object> result = null;
+ ObjectMapper mapper = new ObjectMapper();
+ TypeReference<Map<String, Object>> rcoElementTypeReference = new TypeReference<Map<String, Object>>() {};
+ try {
+ result = mapper.readValue(rcoFile, rcoElementTypeReference);
+ LOG.info("Role command order info was loaded from file: {}", rcoFile.getAbsolutePath());
+ StackRoleCommandOrder serviceRoleCommandOrder = new StackRoleCommandOrder(result);
+ roleCommandOrder.merge(serviceRoleCommandOrder, true);
+ } catch (IOException e) {
+ LOG.error(String.format("Can not read role command order info %s", rcoFile), e);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aeac887a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackRoleCommandOrder.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackRoleCommandOrder.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackRoleCommandOrder.java
index e791859..75587c4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackRoleCommandOrder.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackRoleCommandOrder.java
@@ -19,8 +19,11 @@
package org.apache.ambari.server.state.stack;
import org.apache.commons.collections.map.MultiValueMap;
+import org.slf4j.Logger;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -81,7 +84,16 @@ public class StackRoleCommandOrder {
*/
public void merge(StackRoleCommandOrder parent) {
+ merge(parent, false);
+ }
+ /**
+ * merge StackRoleCommandOrder content with parent
+ *
+ * @param parent parent StackRoleCommandOrder instance
+ */
+
+ public void merge(StackRoleCommandOrder parent, boolean mergeProperties) {
HashMap<String, Object> mergedRoleCommandOrders = new HashMap<String, Object>();
HashMap<String, Object> parentData = parent.getContent();
@@ -93,12 +105,27 @@ public class StackRoleCommandOrder {
Map<String, Object> result = new HashMap<String, Object>();
Map<String, Object> parentProperties = (Map<String, Object>) parentData.get(key);
Map<String, Object> childProperties = (Map<String, Object>) content.get(key);
- MultiValueMap childAndParentProperties = new MultiValueMap();
+ MultiValueMap childAndParentProperties = null;
+
+ childAndParentProperties = new MultiValueMap();
childAndParentProperties.putAll(childProperties);
childAndParentProperties.putAll(parentProperties);
+
for (Object property : childAndParentProperties.keySet()) {
List propertyValues = (List) childAndParentProperties.get(property);
- result.put((String) property, propertyValues.get(0));
+ Object values = propertyValues.get(0);
+ if (mergeProperties) {
+ List<String> valueList = new ArrayList<String>();
+ for (Object value : propertyValues) {
+ if (value instanceof List)
+ valueList.addAll((List<String>) value);
+ else
+ valueList.add(value.toString());
+ }
+ values = valueList;
+ }
+
+ result.put((String) property, values);
}
mergedRoleCommandOrders.put(key, result);
} else if (content.containsKey(key)) {
@@ -109,5 +136,33 @@ public class StackRoleCommandOrder {
}
this.content = mergedRoleCommandOrders;
}
+
+ public void printRoleCommandOrder(Logger LOG) {
+ Map<String, Object> map = getContent();
+ List<String> keys = Arrays.asList(GENERAL_DEPS_KEY, GLUSTERFS_DEPS_KEY,
+ NO_GLUSTERFS_DEPS_KEY, NAMENODE_HA_DEPS_KEY, RESOURCEMANAGER_HA_DEPS_KEY);
+
+ for (String key : keys) {
+ LOG.debug(key);
+ Object value = map.get(key);
+ if (value instanceof Map) {
+ Map<String, Object> deps = (Map<String, Object>) map.get(key);
+ for (String depKey : deps.keySet()) {
+ Object depValue = deps.get(depKey);
+ if (depValue instanceof Collection) {
+ StringBuffer buffer = new StringBuffer();
+ for (Object o : ((Collection) depValue)) {
+ if (buffer.length() > 0)
+ buffer.append(",");
+ buffer.append(o);
+ }
+ depValue = buffer.toString();
+ }
+ LOG.debug(depKey + " => " + depValue);
+ }
+ }
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/aeac887a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
index dd92bd5..7af4eb8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/StackManagerTest.java
@@ -620,6 +620,15 @@ public class StackManagerTest {
ArrayList<String> hbaseMasterStartValues = (ArrayList<String>) generalDeps.get("HBASE_MASTER-START");
assertTrue(hbaseMasterStartValues.get(0).equals("ZOOKEEPER_SERVER-START, ZOOKEEPER_SERVER-START"));
+ assertTrue(optionalNoGlusterfs.containsKey("NAMENODE-STOP"));
+ ArrayList<String> nameNodeStopValues = (ArrayList<String>) optionalNoGlusterfs.get("NAMENODE-STOP");
+ assertTrue(nameNodeStopValues.contains("JOBTRACKER-STOP"));
+ assertTrue(nameNodeStopValues.contains("CUSTOM_MASTER-STOP"));
+
+ assertTrue(generalDeps.containsKey("CUSTOM_MASTER-START"));
+ ArrayList<String> customMasterStartValues = (ArrayList<String>) generalDeps.get("CUSTOM_MASTER-START");
+ assertTrue(customMasterStartValues.contains("ZOOKEEPER_SERVER-START"));
+ assertTrue(customMasterStartValues.contains("NAMENODE-START"));
}
@Test
http://git-wip-us.apache.org/repos/asf/ambari/blob/aeac887a/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/PIG/role_command_order.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/PIG/role_command_order.json b/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/PIG/role_command_order.json
new file mode 100644
index 0000000..c0bc888
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/2.1.1/services/PIG/role_command_order.json
@@ -0,0 +1,12 @@
+{
+ "_comment" : "Record format:",
+ "_comment" : "blockedRole-blockedCommand: [blockerRole1-blockerCommand1, blockerRole2-blockerCommand2, ...]",
+ "general_deps" : {
+ "_comment" : "dependencies for all cases",
+ "CUSTOM_MASTER-START": ["ZOOKEEPER_SERVER-START", "NAMENODE-START"]
+ },
+ "_comment" : "Dependencies that are used when GLUSTERFS is not present in cluster",
+ "optional_no_glusterfs": {
+ "NAMENODE-STOP": ["CUSTOM_MASTER-STOP"]
+ }
+}