Repository: ambari Updated Branches: refs/heads/trunk 3be3c2e13 -> 02f31bc2e
AMBARI-18231. Error around ATLAS_SERVER version advertisement - doesn't advertise version (dlysnichenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/02f31bc2 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/02f31bc2 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/02f31bc2 Branch: refs/heads/trunk Commit: 02f31bc2e4273c95ab85a9e61c948dd2674ff100 Parents: 3be3c2e Author: Lisnichenko Dmitro <[email protected]> Authored: Tue Aug 23 13:32:51 2016 +0300 Committer: Lisnichenko Dmitro <[email protected]> Committed: Tue Aug 23 13:32:51 2016 +0300 ---------------------------------------------------------------------- .../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, 47 insertions(+), 69 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/02f31bc2/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 87247eb..7272813 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 {0} doesn't advertise version, " + + LOG.error("ServiceComponent {} 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/02f31bc2/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 537ae32..a42db8b 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,6 +18,12 @@ 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; @@ -25,12 +31,6 @@ 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,11 +90,8 @@ 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.getVersionAdvertisedField()) { + if (null == componentInfo.getVersionAdvertised()) { 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/02f31bc2/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 2dae526..21ab5e1 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,6 +18,9 @@ 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; @@ -27,9 +30,6 @@ 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,10 +37,7 @@ 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. @@ -53,7 +50,8 @@ 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. */ - private boolean versionAdvertisedInternal = false; + @XmlElements(@XmlElement(name = "versionAdvertised")) + private Boolean versionAdvertised; /** * Used to determine if decommission is allowed @@ -144,8 +142,7 @@ public class ComponentInfo { category = prototype.category; deleted = prototype.deleted; cardinality = prototype.cardinality; - versionAdvertisedField = prototype.versionAdvertisedField; - versionAdvertisedInternal = prototype.versionAdvertisedInternal; + versionAdvertised = prototype.versionAdvertised; decommissionAllowed = prototype.decommissionAllowed; clientsToUpdateConfigs = prototype.clientsToUpdateConfigs; commandScript = prototype.commandScript; @@ -318,10 +315,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 versionAdvertisedField + * @param versionAdvertised */ - public void setVersionAdvertisedField(Boolean versionAdvertisedField) { - this.versionAdvertisedField = versionAdvertisedField; + public void setVersionAdvertised(Boolean versionAdvertised) { + this.versionAdvertised = versionAdvertised; } /** @@ -329,16 +326,8 @@ 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 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; + public Boolean getVersionAdvertised() { + return versionAdvertised; } /** @@ -347,12 +336,12 @@ public class ComponentInfo { * @return boolean of whether this component advertises a version. */ public boolean isVersionAdvertised() { - if (null != versionAdvertisedField) { - return versionAdvertisedField.booleanValue(); + if (null != versionAdvertised) { + return versionAdvertised; } // 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 this.versionAdvertisedInternal; + return false; } @@ -406,8 +395,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 (versionAdvertisedField != null ? !versionAdvertisedField.equals(that.versionAdvertisedField) : that.versionAdvertisedField != null) return false; - if (versionAdvertisedInternal != that.versionAdvertisedInternal) return false; + if (versionAdvertised != null ? !versionAdvertised.equals(that.versionAdvertised) : that.versionAdvertised != null) + 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; @@ -449,7 +438,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 + (versionAdvertisedField != null ? (versionAdvertisedField.booleanValue() ? 2 : 1) : 0); + result = 31 * result + (versionAdvertised != null ? (versionAdvertised ? 2 : 1) : 0); return result; } http://git-wip-us.apache.org/repos/asf/ambari/blob/02f31bc2/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 905707c..db1e072 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,6 +18,11 @@ 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; @@ -27,11 +32,6 @@ 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,53 +490,45 @@ 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.setVersionAdvertisedField(new Boolean(true)); - parentInfo.setVersionAdvertised(true); - info.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(new Boolean(true)); + info.setVersionAdvertised(new Boolean(true)); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 2. Chain of versionAdvertised is: true (parent) -> false (current) => false - parentInfo.setVersionAdvertisedField(new Boolean(true)); - parentInfo.setVersionAdvertised(true); - info.setVersionAdvertisedField(new Boolean(false)); + parentInfo.setVersionAdvertised(new Boolean(true)); + info.setVersionAdvertised(new Boolean(false)); assertEquals(false, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 3. Chain of versionAdvertised is: false (parent) -> true (current) => true - parentInfo.setVersionAdvertisedField(new Boolean(false)); - parentInfo.setVersionAdvertised(false); - info.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(new Boolean(false)); + info.setVersionAdvertised(new Boolean(true)); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 4. Chain of versionAdvertised is: null (parent) -> true (current) => true - parentInfo.setVersionAdvertisedField(null); - parentInfo.setVersionAdvertised(false); - info.setVersionAdvertisedField(new Boolean(true)); + parentInfo.setVersionAdvertised(null); + info.setVersionAdvertised(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.setVersionAdvertisedField(new Boolean(true)); - parentInfo.setVersionAdvertised(true); - info.setVersionAdvertisedField(null); + parentInfo.setVersionAdvertised(new Boolean(true)); + info.setVersionAdvertised(null); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 6. Chain of versionAdvertised is: true (parent) -> inherit (current) => true - parentInfo.setVersionAdvertisedField(new Boolean(true)); - parentInfo.setVersionAdvertised(true); - info.setVersionAdvertisedField(null); + parentInfo.setVersionAdvertised(new Boolean(true)); + info.setVersionAdvertised(null); assertEquals(true, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 7. Chain of versionAdvertised is: false (parent) -> null (current) => false - parentInfo.setVersionAdvertisedField(new Boolean(false)); - parentInfo.setVersionAdvertised(false); - info.setVersionAdvertisedField(null); + parentInfo.setVersionAdvertised(new Boolean(false)); + info.setVersionAdvertised(null); assertEquals(false, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); // 8. Chain of versionAdvertised is: false (parent) -> inherit (current) => false - parentInfo.setVersionAdvertisedField(new Boolean(false)); - parentInfo.setVersionAdvertised(false); - info.setVersionAdvertisedField(null); + parentInfo.setVersionAdvertised(new Boolean(false)); + info.setVersionAdvertised(null); assertEquals(false, resolveComponent(info, parentInfo).getModuleInfo().isVersionAdvertised()); }
