You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2014/07/30 12:14:15 UTC
git commit: AMBARI-6654. Add dependency inheritance for components.
(aonishuk)
Repository: ambari
Updated Branches:
refs/heads/trunk 01c7d97ef -> a5576c90e
AMBARI-6654. Add dependency inheritance for components. (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a5576c90
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a5576c90
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a5576c90
Branch: refs/heads/trunk
Commit: a5576c90ea1933c5e82c8abb66706140f35cdabf
Parents: 01c7d97
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Wed Jul 30 13:14:08 2014 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Wed Jul 30 13:14:08 2014 +0300
----------------------------------------------------------------------
.../server/api/util/StackExtensionHelper.java | 57 +++++++++++++++-----
.../ambari/server/state/ComponentInfo.java | 8 +++
.../api/util/StackExtensionHelperTest.java | 34 ++++++++++++
3 files changed, 86 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a5576c90/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 7a80938..add766f 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
@@ -43,13 +43,7 @@ import javax.xml.xpath.XPathFactory;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.metadata.ActionMetadata;
-import org.apache.ambari.server.state.CommandScriptDefinition;
-import org.apache.ambari.server.state.ComponentInfo;
-import org.apache.ambari.server.state.CustomCommandDefinition;
-import org.apache.ambari.server.state.PropertyInfo;
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.ServiceOsSpecific;
-import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.*;
import org.apache.ambari.server.state.stack.ConfigurationXml;
import org.apache.ambari.server.state.stack.RepositoryXml;
import org.apache.ambari.server.state.stack.ServiceMetainfoXml;
@@ -279,9 +273,12 @@ public class StackExtensionHelper {
}
- private ComponentInfo mergeComponents(ComponentInfo parent, ComponentInfo child) {
+ ComponentInfo mergeComponents(ComponentInfo parent, ComponentInfo child) {
ComponentInfo result = new ComponentInfo(child); // cloning child
CommandScriptDefinition commandScript = child.getCommandScript();
+ String category = child.getCategory();
+ String cardinality = child.getCardinality();
+
if (commandScript != null) {
result.setCommandScript(child.getCommandScript());
} else {
@@ -292,15 +289,49 @@ public class StackExtensionHelper {
child.getConfigDependencies() != null ?
child.getConfigDependencies() : parent.getConfigDependencies());
- // Merge custom command definitions for service
- List<CustomCommandDefinition> mergedCustomCommands =
- mergeCustomCommandLists(parent.getCustomCommands(),
- child.getCustomCommands());
- result.setCustomCommands(mergedCustomCommands);
+ if (category != null) {
+ result.setCategory(child.getCategory());
+ } else {
+ result.setCategory(parent.getCategory());
+ }
+
+ if (cardinality != null) {
+ result.setCardinality(child.getCardinality());
+ } else {
+ result.setCardinality(parent.getCardinality());
+ }
+
+ result.setDependencies(
+ child.getDependencies() == null ?
+ parent.getDependencies() :
+ parent.getDependencies() == null ?
+ child.getDependencies() :
+ mergeComponentDependencies(parent.getDependencies(),
+ child.getDependencies()));
return result;
}
+ List<DependencyInfo> mergeComponentDependencies(
+ List<DependencyInfo> parentList,
+ List<DependencyInfo> childList) {
+
+ List<DependencyInfo> mergedList =
+ new ArrayList<DependencyInfo>(childList);
+ List<String> existingNames = new ArrayList<String>();
+
+ for (DependencyInfo childDI : childList) {
+ existingNames.add(childDI.getName());
+ }
+ for (DependencyInfo parentsDI : parentList) {
+ if (! existingNames.contains(parentsDI.getName())) {
+ mergedList.add(parentsDI);
+ existingNames.add(parentsDI.getName());
+ }
+ }
+ return mergedList;
+ }
+
private List<CustomCommandDefinition> mergeCustomCommandLists(
List<CustomCommandDefinition> parentList,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a5576c90/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
index 24d7aa9..feec350 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ComponentInfo.java
@@ -172,10 +172,18 @@ public class ComponentInfo {
return configDependencies != null && configDependencies.contains(type);
}
+ public void setDependencies(List<DependencyInfo> dependencies) {
+ this.dependencies = dependencies;
+ }
+
public AutoDeployInfo getAutoDeploy() {
return autoDeploy;
}
+ public void setCardinality(String cardinality) {
+ this.cardinality = cardinality;
+ }
+
public String getCardinality() {
return this.cardinality;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/a5576c90/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
index 81f1115..7d07fe1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
@@ -646,5 +646,39 @@ public class StackExtensionHelperTest {
assertNotNull(merged.getConfigTypes());
assertEquals(0, merged.getConfigTypes().size());
}
+
+ @Test
+ public void testMergeComponentInfo() throws Exception {
+ File stackRoot = new File(stackRootStr);
+ StackExtensionHelper helper = new StackExtensionHelper(injector, stackRoot);
+ ComponentInfo child = new ComponentInfo();
+ ComponentInfo parent = new ComponentInfo();
+ DependencyInfo a = new DependencyInfo();
+ a.setName("serviceName/A");
+ DependencyInfo b = new DependencyInfo();
+ b.setName("serviceName/B");
+ List<DependencyInfo> parentDependencies = new ArrayList<DependencyInfo>();
+ parentDependencies.add(a);
+ parentDependencies.add(b);
+ parent.setDependencies(parentDependencies);
+
+ DependencyInfo c = new DependencyInfo();
+ c.setName("serviceName/C");
+ List<DependencyInfo> childDependencies = new ArrayList<DependencyInfo>();
+ childDependencies.add(c);
+ child.setDependencies(childDependencies);
+
+ child.setCardinality("1");
+ parent.setCardinality("1+");
+
+ child.setCategory("CLIENT");
+ parent.setCategory("MASTER");
+
+ ComponentInfo result = helper.mergeComponents(parent, child);
+
+ assertEquals(result.getCardinality(),"1");
+ assertEquals(result.getCategory(), "CLIENT");
+ assertEquals(result.getDependencies().size(), 3);
+ }
}