Repository: ambari Updated Branches: refs/heads/trunk d90fd2b8b -> e0e708f66
Revert "AMBARI-18231. Error around ATLAS_SERVER version advertisement - doesn't advertise version (dlysnichenko)" This reverts commit 02f31bc2e4273c95ab85a9e61c948dd2674ff100. Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e0e708f6 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e0e708f6 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e0e708f6 Branch: refs/heads/trunk Commit: e0e708f66fc46b514455d84552cb21670849491c Parents: d90fd2b Author: Alejandro Fernandez <[email protected]> Authored: Wed Aug 24 11:24:26 2016 -0700 Committer: Alejandro Fernandez <[email protected]> Committed: Wed Aug 24 11:24:26 2016 -0700 ---------------------------------------------------------------------- .../listeners/upgrade/StackVersionListener.java | 2 +- .../ambari/server/stack/ComponentModule.java | 17 ++++--- .../ambari/server/state/ComponentInfo.java | 47 +++++++++++------- .../server/stack/ComponentModuleTest.java | 50 ++++++++++++-------- 4 files changed, 69 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e0e708f6/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java index 7272813..87247eb 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/events/listeners/upgrade/StackVersionListener.java @@ -113,7 +113,7 @@ public class StackVersionListener { ServiceComponent sc = cluster.getService(sch.getServiceName()).getServiceComponent(sch.getServiceComponentName()); if(!sc.isVersionAdvertised() && StringUtils.isNotBlank(newVersion) && !UNKNOWN_VERSION.equalsIgnoreCase(newVersion)) { - LOG.error("ServiceComponent {} doesn't advertise version, " + + LOG.error("ServiceComponent {0} doesn't advertise version, " + "however ServiceHostComponent {} on host {} advertised version as {}. Skipping version update", sc.getName(), sch.getServiceComponentName(), sch.getHostName(), newVersion); } else { http://git-wip-us.apache.org/repos/asf/ambari/blob/e0e708f6/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java index a42db8b..537ae32 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ComponentModule.java @@ -18,12 +18,6 @@ package org.apache.ambari.server.stack; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.ambari.server.state.ComponentInfo; import org.apache.ambari.server.state.CustomCommandDefinition; import org.apache.ambari.server.state.DependencyInfo; @@ -31,6 +25,12 @@ import org.apache.ambari.server.state.LogDefinition; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * Component module which provides all functionality related to parsing and fully * resolving service components from the stack definition. @@ -90,8 +90,11 @@ public class ComponentModule extends BaseModule<ComponentModule, ComponentInfo> } // Inherit versionAdvertised from the parent if the current Component Info has it as null or "inherit". - if (null == componentInfo.getVersionAdvertised()) { + if (null == componentInfo.getVersionAdvertisedField()) { componentInfo.setVersionAdvertised(parentInfo.isVersionAdvertised()); + } else { + // Set to explicit boolean + componentInfo.setVersionAdvertised(componentInfo.getVersionAdvertisedField().booleanValue()); } if (componentInfo.getDecommissionAllowed() == null) { http://git-wip-us.apache.org/repos/asf/ambari/blob/e0e708f6/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 21ab5e1..2dae526 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 @@ -18,9 +18,6 @@ package org.apache.ambari.server.state; -import java.util.ArrayList; -import java.util.List; - import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; @@ -30,6 +27,9 @@ import javax.xml.bind.annotation.XmlElements; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; +import java.util.ArrayList; +import java.util.List; + @XmlAccessorType(XmlAccessType.FIELD) public class ComponentInfo { private String name; @@ -37,7 +37,10 @@ public class ComponentInfo { private String category; private boolean deleted; private String cardinality = "0+"; - + + @XmlElement(name="versionAdvertised") + private Boolean versionAdvertisedField; + /** * Technically, no component is required to advertise a version. In practice, * Components should advertise a version through a mechanism like hdp-select. @@ -50,8 +53,7 @@ public class ComponentInfo { * This is the translation of the xml element ["true", "false", null] (note that if a value is not specified, * it will inherit from the parent) into a boolean after actually resolving it. */ - @XmlElements(@XmlElement(name = "versionAdvertised")) - private Boolean versionAdvertised; + private boolean versionAdvertisedInternal = false; /** * Used to determine if decommission is allowed @@ -142,7 +144,8 @@ public class ComponentInfo { category = prototype.category; deleted = prototype.deleted; cardinality = prototype.cardinality; - versionAdvertised = prototype.versionAdvertised; + versionAdvertisedField = prototype.versionAdvertisedField; + versionAdvertisedInternal = prototype.versionAdvertisedInternal; decommissionAllowed = prototype.decommissionAllowed; clientsToUpdateConfigs = prototype.clientsToUpdateConfigs; commandScript = prototype.commandScript; @@ -315,10 +318,10 @@ public class ComponentInfo { /** * WARNING: only call this method from unit tests to set the Boolean that would have been read from the xml file. * If you call this function, you must still call {@see org.apache.ambari.server.stack.ComponentModule#resolve()}. - * @param versionAdvertised + * @param versionAdvertisedField */ - public void setVersionAdvertised(Boolean versionAdvertised) { - this.versionAdvertised = versionAdvertised; + public void setVersionAdvertisedField(Boolean versionAdvertisedField) { + this.versionAdvertisedField = versionAdvertisedField; } /** @@ -326,8 +329,16 @@ public class ComponentInfo { * In all other classes, use {@seealso isVersionAdvertised} * @return The Boolean for versionAdvertised from the xml file in order to resolve it into a boolean. */ - public Boolean getVersionAdvertised() { - return versionAdvertised; + public Boolean getVersionAdvertisedField() { + return this.versionAdvertisedField; + } + + /** + * WARNING: only call this from ComponentModule to resolve the boolean (true|false). + * @param versionAdvertised Final resolution of whether version is advertised or not. + */ + public void setVersionAdvertised(boolean versionAdvertised) { + this.versionAdvertisedInternal = versionAdvertised; } /** @@ -336,12 +347,12 @@ public class ComponentInfo { * @return boolean of whether this component advertises a version. */ public boolean isVersionAdvertised() { - if (null != versionAdvertised) { - return versionAdvertised; + if (null != versionAdvertisedField) { + return versionAdvertisedField.booleanValue(); } // If set to null and has a parent, then the value would have already been resolved and set. // Otherwise, return the default value (false). - return false; + return this.versionAdvertisedInternal; } @@ -395,8 +406,8 @@ public class ComponentInfo { if (deleted != that.deleted) return false; if (autoDeploy != null ? !autoDeploy.equals(that.autoDeploy) : that.autoDeploy != null) return false; if (cardinality != null ? !cardinality.equals(that.cardinality) : that.cardinality != null) return false; - if (versionAdvertised != null ? !versionAdvertised.equals(that.versionAdvertised) : that.versionAdvertised != null) - return false; + if (versionAdvertisedField != null ? !versionAdvertisedField.equals(that.versionAdvertisedField) : that.versionAdvertisedField != null) return false; + if (versionAdvertisedInternal != that.versionAdvertisedInternal) return false; if (decommissionAllowed != null ? !decommissionAllowed.equals(that.decommissionAllowed) : that.decommissionAllowed != null) return false; if (reassignAllowed != null ? !reassignAllowed.equals(that.reassignAllowed) : that.reassignAllowed != null) return false; if (category != null ? !category.equals(that.category) : that.category != null) return false; @@ -438,7 +449,7 @@ public class ComponentInfo { result = 31 * result + (configDependencies != null ? configDependencies.hashCode() : 0); result = 31 * result + (clientConfigFiles != null ? clientConfigFiles.hashCode() : 0); // NULL = 0, TRUE = 2, FALSE = 1 - result = 31 * result + (versionAdvertised != null ? (versionAdvertised ? 2 : 1) : 0); + result = 31 * result + (versionAdvertisedField != null ? (versionAdvertisedField.booleanValue() ? 2 : 1) : 0); return result; } http://git-wip-us.apache.org/repos/asf/ambari/blob/e0e708f6/ambari-server/src/test/java/org/apache/ambari/server/stack/ComponentModuleTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/ComponentModuleTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/ComponentModuleTest.java index db1e072..905707c 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/stack/ComponentModuleTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/ComponentModuleTest.java @@ -18,11 +18,6 @@ package org.apache.ambari.server.stack; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - import org.apache.ambari.server.state.AutoDeployInfo; import org.apache.ambari.server.state.BulkCommandDefinition; import org.apache.ambari.server.state.ClientConfigFileDefinition; @@ -32,6 +27,11 @@ import org.apache.ambari.server.state.CustomCommandDefinition; import org.apache.ambari.server.state.DependencyInfo; import org.junit.Test; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import static org.easymock.EasyMock.createNiceMock; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -490,45 +490,53 @@ public class ComponentModuleTest { // Test cases where the current Component Info explicitly sets the value. // 1. Chain of versionAdvertised is: true (parent) -> true (current) => true - parentInfo.setVersionAdvertised(new Boolean(true)); - info.setVersionAdvertised(new Boolean(true)); + parentInfo.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(true); + info.setVersionAdvertisedField(new Boolean(true)); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 2. Chain of versionAdvertised is: true (parent) -> false (current) => false - parentInfo.setVersionAdvertised(new Boolean(true)); - info.setVersionAdvertised(new Boolean(false)); + parentInfo.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(true); + info.setVersionAdvertisedField(new Boolean(false)); assertEquals(false, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 3. Chain of versionAdvertised is: false (parent) -> true (current) => true - parentInfo.setVersionAdvertised(new Boolean(false)); - info.setVersionAdvertised(new Boolean(true)); + parentInfo.setVersionAdvertisedField(new Boolean(false)); + parentInfo.setVersionAdvertised(false); + info.setVersionAdvertisedField(new Boolean(true)); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 4. Chain of versionAdvertised is: null (parent) -> true (current) => true - parentInfo.setVersionAdvertised(null); - info.setVersionAdvertised(new Boolean(true)); + parentInfo.setVersionAdvertisedField(null); + parentInfo.setVersionAdvertised(false); + info.setVersionAdvertisedField(new Boolean(true)); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // Test cases where current Component Info is null so it should inherit from parent. // 5. Chain of versionAdvertised is: true (parent) -> null (current) => true - parentInfo.setVersionAdvertised(new Boolean(true)); - info.setVersionAdvertised(null); + parentInfo.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(true); + info.setVersionAdvertisedField(null); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 6. Chain of versionAdvertised is: true (parent) -> inherit (current) => true - parentInfo.setVersionAdvertised(new Boolean(true)); - info.setVersionAdvertised(null); + parentInfo.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(true); + info.setVersionAdvertisedField(null); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 7. Chain of versionAdvertised is: false (parent) -> null (current) => false - parentInfo.setVersionAdvertised(new Boolean(false)); - info.setVersionAdvertised(null); + parentInfo.setVersionAdvertisedField(new Boolean(false)); + parentInfo.setVersionAdvertised(false); + info.setVersionAdvertisedField(null); assertEquals(false, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 8. Chain of versionAdvertised is: false (parent) -> inherit (current) => false - parentInfo.setVersionAdvertised(new Boolean(false)); - info.setVersionAdvertised(null); + parentInfo.setVersionAdvertisedField(new Boolean(false)); + parentInfo.setVersionAdvertised(false); + info.setVersionAdvertisedField(null); assertEquals(false, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); }
