This is an automated email from the ASF dual-hosted git repository.
ncole pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git
The following commit(s) were added to refs/heads/trunk by this push:
new 26bb2eb [AMBARI-24780] Add Hotfix to VDF Release Element (#2469)
26bb2eb is described below
commit 26bb2ebc342c9f9b56088280e2f852eb1cfa1fa4
Author: ncole <[email protected]>
AuthorDate: Tue Oct 16 12:31:32 2018 -0400
[AMBARI-24780] Add Hotfix to VDF Release Element (#2469)
---
.../apache/ambari/spi/stack/StackReleaseInfo.java | 65 +++++++++++++++++++
.../ambari/spi/stack/StackReleaseVersion.java | 47 ++++++++++++++
.../checks/RequiredServicesInRepositoryCheck.java | 3 +-
.../server/controller/StackVersionResponse.java | 27 +++-----
.../ClusterStackVersionResourceProvider.java | 8 ++-
.../internal/StackVersionResourceProvider.java | 3 -
.../VersionDefinitionResourceProvider.java | 17 +++--
.../orm/entities/RepositoryVersionEntity.java | 13 ----
.../apache/ambari/server/stack/StackModule.java | 2 +-
.../stack/upgrade/RepositoryVersionHelper.java | 2 +-
.../stack/upgrade/orchestrate/UpgradeContext.java | 3 +-
.../stack/upgrade/orchestrate/UpgradeHelper.java | 2 +-
.../apache/ambari/server/state/CheckHelper.java | 7 +-
.../org/apache/ambari/server/state/StackInfo.java | 52 ++++++++++++---
.../ambari/server/state/cluster/ClusterImpl.java | 3 +-
.../state/repository/DefaultStackVersion.java | 74 ++++++++++++++++++++++
.../ambari/server/state/repository/Release.java | 25 +++++---
.../state/repository/VersionDefinitionXml.java | 31 ++++++---
.../server/state/stack/StackMetainfoXml.java | 34 +++++-----
.../src/main/resources/version_definition.xsd | 5 +-
.../server/api/services/AmbariMetaInfoTest.java | 1 -
.../AmbariMetricsHadoopSinkVersionCheckTest.java | 3 +-
.../ambari/server/checks/ClusterCheckTest.java | 27 ++++++--
.../checks/ComponentsInstallationCheckTest.java | 11 +++-
.../checks/HostsMasterMaintenanceCheckTest.java | 2 +-
.../checks/HostsRepositoryVersionCheckTest.java | 3 +-
.../ambari/server/checks/MockCheckHelper.java | 8 +++
.../RequiredServicesInRepositoryCheckTest.java | 13 +++-
.../checks/ServicesMaintenanceModeCheckTest.java | 4 +-
.../ambari/server/checks/ServicesUpCheckTest.java | 3 +-
.../upgrade/orchestrate/UpgradeContextTest.java | 2 +-
.../ambari/server/state/CheckHelperTest.java | 11 +++-
.../state/repository/VersionDefinitionTest.java | 29 +++++++--
33 files changed, 422 insertions(+), 118 deletions(-)
diff --git
a/ambari-server-spi/src/main/java/org/apache/ambari/spi/stack/StackReleaseInfo.java
b/ambari-server-spi/src/main/java/org/apache/ambari/spi/stack/StackReleaseInfo.java
new file mode 100644
index 0000000..63299fe
--- /dev/null
+++
b/ambari-server-spi/src/main/java/org/apache/ambari/spi/stack/StackReleaseInfo.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.spi.stack;
+
+/**
+ * Provides information about a version's release. Ambari provides instances
+ * for consumption.
+ */
+public class StackReleaseInfo {
+
+ private String m_version;
+ private String m_hotfix;
+ private String m_build;
+
+ /**
+ * @param version
+ * the version string
+ * @param hotfix
+ * the hotfix string
+ * @param build
+ * the build string
+ */
+ public StackReleaseInfo(String version, String hotfix, String build) {
+ m_version = version;
+ m_hotfix = hotfix;
+ m_build = build;
+ }
+
+ /**
+ * @return the version string
+ */
+ public String getVersion() {
+ return m_version;
+ }
+
+ /**
+ * @return the hotfix string
+ */
+ public String getHotfix() {
+ return m_hotfix;
+ }
+
+ /**
+ * @return the build string
+ */
+ public String getBuild() {
+ return m_build;
+ }
+
+}
diff --git
a/ambari-server-spi/src/main/java/org/apache/ambari/spi/stack/StackReleaseVersion.java
b/ambari-server-spi/src/main/java/org/apache/ambari/spi/stack/StackReleaseVersion.java
new file mode 100644
index 0000000..e61252e
--- /dev/null
+++
b/ambari-server-spi/src/main/java/org/apache/ambari/spi/stack/StackReleaseVersion.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.spi.stack;
+
+import java.util.Comparator;
+
+/**
+ * A stack supplies an implementation class to handle version representations.
+ */
+public interface StackReleaseVersion {
+
+ /**
+ * @param info
+ * the release info instance
+ * @return the full display string
+ */
+ String getFullVersion(StackReleaseInfo info);
+
+ /**
+ * @return a comparator of release info
+ */
+ Comparator<StackReleaseInfo> getComparator();
+
+ /**
+ * Parses a version string to a stack release info
+ * @param versionString
+ * the version string
+ * @return the corresponding stack release. Never {@code null}.
+ */
+ StackReleaseInfo parse(String versionString);
+}
+
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheck.java
b/ambari-server/src/main/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheck.java
index 97ae21f..6b53140 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheck.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheck.java
@@ -81,7 +81,8 @@ public class RequiredServicesInRepositoryCheck extends
ClusterCheck {
Cluster cluster = clustersProvider.get().getCluster(clusterName);
VersionDefinitionXml xml =
checkHelperProvider.get().getVersionDefinitionXml(request);
- Set<String> missingDependencies = xml.getMissingDependencies(cluster);
+
+ Set<String> missingDependencies = xml.getMissingDependencies(cluster,
ambariMetaInfo.get());
if (!missingDependencies.isEmpty()) {
String failReasonTemplate = getFailReason(result, request);
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackVersionResponse.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackVersionResponse.java
index 38b32d2..9772ae1 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/StackVersionResponse.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/StackVersionResponse.java
@@ -49,13 +49,12 @@ public class StackVersionResponse implements Validable{
private Collection<File> serviceKerberosDescriptorFiles;
private Set<String> upgradePacks = Collections.emptySet();
- public StackVersionResponse(String stackVersion, String minUpgradeVersion,
+ public StackVersionResponse(String stackVersion,
boolean active, String parentVersion,
Map<String, Map<String, Map<String, String>>>
configTypes,
Collection<File> serviceKerberosDescriptorFiles,
Set<String> upgradePacks, boolean valid,
Collection<String> errorSet, String minJdk, String maxJdk) {
setStackVersion(stackVersion);
- setMinUpgradeVersion(minUpgradeVersion);
setActive(active);
setParentVersion(parentVersion);
setConfigTypes(configTypes);
@@ -76,10 +75,10 @@ public class StackVersionResponse implements Validable{
@Override
public void setValid(boolean valid) {
this.valid = valid;
- }
+ }
private Set<String> errorSet = new HashSet<>();
-
+
@Override
public void addError(String error) {
errorSet.add(error);
@@ -89,7 +88,7 @@ public class StackVersionResponse implements Validable{
@ApiModelProperty(name = "stack-errors")
public Collection<String> getErrors() {
return errorSet;
- }
+ }
@Override
public void addErrors(Collection<String> errors) {
@@ -130,15 +129,6 @@ public class StackVersionResponse implements Validable{
this.stackVersion = stackVersion;
}
- @ApiModelProperty(name = "min_upgrade_version")
- public String getMinUpgradeVersion() {
- return minUpgradeVersion;
- }
-
- public void setMinUpgradeVersion(String minUpgradeVersion) {
- this.minUpgradeVersion = minUpgradeVersion;
- }
-
@ApiModelProperty(name = "active")
public boolean isActive() {
return active;
@@ -187,14 +177,14 @@ public class StackVersionResponse implements Validable{
public void setServiceKerberosDescriptorFiles(Collection<File>
serviceKerberosDescriptorFiles) {
this.serviceKerberosDescriptorFiles = serviceKerberosDescriptorFiles;
}
-
+
/**
- * @param upgradePacks the names of the upgrade packs for the stack version
+ * @param upgradePacks the names of the upgrade packs for the stack version
*/
public void setUpgradePacks(Set<String> upgradePacks) {
this.upgradePacks = upgradePacks;
}
-
+
/**
* @return the upgrade pack names for the stack version
*/
@@ -208,7 +198,6 @@ public class StackVersionResponse implements Validable{
* Interface to help correct Swagger documentation generation
*/
public interface StackVersionResponseSwagger extends ApiModel {
- @ApiModelProperty(name = "Versions")
- public StackVersionResponse getStackVersionResponse();
+ @ApiModelProperty(name = "Versions") StackVersionResponse
getStackVersionResponse();
}
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
index acfc090..7ea52fe 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
@@ -304,7 +304,7 @@ public class ClusterStackVersionResourceProvider extends
AbstractControllerResou
try {
VersionDefinitionXml vdf = repositoryVersion.getRepositoryXml();
if (null != vdf) {
- versionSummary = vdf.getClusterSummary(cluster);
+ versionSummary = vdf.getClusterSummary(cluster, metaInfo.get());
}
} catch (Exception e) {
throw new IllegalArgumentException(
@@ -446,7 +446,8 @@ public class ClusterStackVersionResourceProvider extends
AbstractControllerResou
// dependencies
try {
if (repoVersionEntity.getType().isPartial()) {
- Set<String> missingDependencies =
desiredVersionDefinition.getMissingDependencies(cluster);
+ Set<String> missingDependencies =
desiredVersionDefinition.getMissingDependencies(cluster,
+ metaInfo.get());
if (!missingDependencies.isEmpty()) {
String message = String.format(
@@ -609,7 +610,8 @@ public class ClusterStackVersionResourceProvider extends
AbstractControllerResou
// !!! limit the serviceNames to those that are detailed for the
repository.
// TODO packages don't have component granularity
if (RepositoryType.STANDARD != repoVersionEnt.getType()) {
- ClusterVersionSummary clusterSummary =
desiredVersionDefinition.getClusterSummary(cluster);
+ ClusterVersionSummary clusterSummary =
desiredVersionDefinition.getClusterSummary(
+ cluster, metaInfo.get());
serviceNames.addAll(clusterSummary.getAvailableServiceNames());
} else {
serviceNames.addAll(ami.getStack(stackId).getServiceNames());
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
index a4d4a88..f2a2034 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackVersionResourceProvider.java
@@ -154,9 +154,6 @@ public class StackVersionResourceProvider extends
ReadOnlyResourceProvider {
setResourceProperty(resource, STACK_VERSION_PROPERTY_ID,
response.getStackVersion(), requestedIds);
- setResourceProperty(resource, STACK_MIN_VERSION_PROPERTY_ID,
- response.getMinUpgradeVersion(), requestedIds);
-
setResourceProperty(resource, STACK_ACTIVE_PROPERTY_ID,
response.isActive(), requestedIds);
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
index b121c7d..9f1d7ad 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProvider.java
@@ -613,15 +613,22 @@ public class VersionDefinitionResourceProvider extends
AbstractAuthorizedResourc
List<RepositoryInfo> repos = holder.xml.repositoryInfo.getRepositories();
+ StackInfo stack = s_metaInfo.get().getStack(stackId);
+
// Add service repositories (these are not contained by the VDF but are
there in the stack model)
- ListMultimap<String, RepositoryInfo> stackReposByOs =
- s_metaInfo.get().getStack(stackId.getStackName(),
stackId.getStackVersion()).getRepositoriesByOs();
+ ListMultimap<String, RepositoryInfo> stackReposByOs =
stack.getRepositoriesByOs();
repos.addAll(RepoUtil.getServiceRepos(repos, stackReposByOs));
entity.addRepoOsEntities(s_repoVersionHelper.get().createRepoOsEntities(repos));
- entity.setVersion(holder.xml.release.getFullVersion());
- entity.setDisplayName(stackId, holder.xml.release);
+
entity.setVersion(holder.xml.release.getFullVersion(stack.getReleaseVersion()));
+
+ if (StringUtils.isNotEmpty(holder.xml.release.display)) {
+ entity.setDisplayName(holder.xml.release.display);
+ } else {
+ entity.setDisplayName(stackId.getStackName() + "-" +
entity.getVersion());
+ }
+
entity.setType(holder.xml.release.repositoryType);
entity.setVersionUrl(holder.url);
entity.setVersionXml(holder.xmlString);
@@ -658,7 +665,7 @@ public class VersionDefinitionResourceProvider extends
AbstractAuthorizedResourc
}
setResourceProperty(resource, VERSION_DEF_TYPE_PROPERTY_ID,
xml.release.repositoryType, requestedIds);
- setResourceProperty(resource, VERSION_DEF_FULL_VERSION,
xml.release.getFullVersion(), requestedIds);
+ setResourceProperty(resource, VERSION_DEF_FULL_VERSION,
xml.release.getFullVersion(stack.getReleaseVersion()), requestedIds);
setResourceProperty(resource, VERSION_DEF_RELEASE_BUILD,
xml.release.build, requestedIds);
setResourceProperty(resource, VERSION_DEF_RELEASE_COMPATIBLE_WITH,
xml.release.compatibleWith, requestedIds);
setResourceProperty(resource, VERSION_DEF_RELEASE_NOTES,
xml.release.releaseNotes, requestedIds);
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index 1767a82..358de55 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -49,7 +49,6 @@ import org.apache.ambari.annotations.ExperimentalFeature;
import org.apache.ambari.server.StaticallyInject;
import org.apache.ambari.server.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.repository.Release;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.spi.RepositoryType;
import org.apache.commons.lang.StringUtils;
@@ -254,18 +253,6 @@ public class RepositoryVersionEntity {
this.displayName = displayName;
}
- /**
- * @param stackId the stack id for the version
- * @param release the XML release instance
- */
- public void setDisplayName(StackId stackId, Release release) {
- if (StringUtils.isNotBlank(release.display)) {
- displayName = release.display;
- } else {
- displayName = stackId.getStackName() + "-" + release.getFullVersion();
- }
- }
-
public String getStackName() {
return getStackId().getStackName();
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
index 09624a9..280c48a 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
@@ -565,7 +565,6 @@ public class StackModule extends BaseModule<StackModule,
StackInfo> implements V
}
stackInfo.setMinJdk(smx.getMinJdk());
stackInfo.setMaxJdk(smx.getMaxJdk());
- stackInfo.setMinUpgradeVersion(smx.getVersion().getUpgrade());
stackInfo.setActive(smx.getVersion().isActive());
stackInfo.setParentStackVersion(smx.getExtends());
stackInfo.setRcoFileLocation(stackDirectory.getRcoFilePath());
@@ -574,6 +573,7 @@ public class StackModule extends BaseModule<StackModule,
StackInfo> implements V
stackInfo.setUpgradePacks(stackDirectory.getUpgradePacks());
stackInfo.setConfigUpgradePack(stackDirectory.getConfigUpgradePack());
stackInfo.setRoleCommandOrder(stackDirectory.getRoleCommandOrder());
+ stackInfo.setReleaseVersionClass(smx.getVersion().getReleaseVersion());
stackInfo.setLibraryClassLoader(stackDirectory.getLibraryClassLoader());
populateConfigurationModules();
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
index 63f814d..204f82f 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/RepositoryVersionHelper.java
@@ -607,7 +607,7 @@ public class RepositoryVersionHelper {
final Cluster cluster =
clusters.get().getCluster(context.getClusterName());
VersionDefinitionXml xml = repoVersion.getRepositoryXml();
- summary = xml.getClusterSummary(cluster);
+ summary = xml.getClusterSummary(cluster, ami.get());
} catch (Exception e) {
LOG.warn("Could not determine repository from %s/%s. Will not pass
cluster version.");
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
index ff49d28..d2e68bb 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContext.java
@@ -1085,7 +1085,8 @@ public class UpgradeContext {
// upgrade - this will take into account the type (such as patch/maint)
// and the version of services installed in the cluster
VersionDefinitionXml vdf = repositoryVersion.getRepositoryXml();
- ClusterVersionSummary clusterVersionSummary =
vdf.getClusterSummary(cluster);
+ ClusterVersionSummary clusterVersionSummary = vdf.getClusterSummary(
+ cluster, m_metaInfo);
servicesForUpgrade = clusterVersionSummary.getAvailableServiceNames();
// if this is every true, then just stop the upgrade attempt and
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelper.java
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelper.java
index fe79131..76eab07 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelper.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeHelper.java
@@ -260,7 +260,7 @@ public class UpgradeHelper {
StackId upgradeStack = compareToSource ?
new StackId(upgradePack.getSourceStack()) : new
StackId(upgradePack.getTargetStack());
- if (upgradeStack.equals(stackToFind) &&
upgradePack.getType().equals(upgradeType)) {
+ if (upgradeStack.equals(stackToFind) && upgradePack.getType() ==
upgradeType) {
if (null == result) {
result = upgradePack;
} else {
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
index c4550fd..b886ac2 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/CheckHelper.java
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ClusterNotFoundException;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.checks.OrchestrationQualification;
import org.apache.ambari.server.checks.UpgradeTypeQualification;
import org.apache.ambari.server.configuration.Configuration;
@@ -65,6 +66,9 @@ public class CheckHelper {
@Inject
protected Provider<Clusters> clustersProvider;
+ @Inject
+ protected Provider<AmbariMetaInfo> metaInfoProvider;
+
/**
* Gets any {@link UpgradeCheck}s which have passed all of their {@link
CheckQualification}s
@@ -193,7 +197,8 @@ public class CheckHelper {
// services are included in this upgrade
try {
VersionDefinitionXml vdf = getVersionDefinitionXml(request);
- ClusterVersionSummary clusterVersionSummary =
vdf.getClusterSummary(cluster);
+ ClusterVersionSummary clusterVersionSummary =
vdf.getClusterSummary(cluster,
+ metaInfoProvider.get());
return clusterVersionSummary.getAvailableServiceNames();
} catch (Exception exception) {
throw new AmbariException("Unable to run upgrade checks because of an
invalid VDF",
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 679163a..b4911cb 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
@@ -36,17 +36,24 @@ import
org.apache.ambari.server.controller.StackVersionResponse;
import org.apache.ambari.server.stack.Validable;
import org.apache.ambari.server.stack.upgrade.ConfigUpgradePack;
import org.apache.ambari.server.stack.upgrade.UpgradePack;
+import org.apache.ambari.server.state.repository.DefaultStackVersion;
import org.apache.ambari.server.state.repository.VersionDefinitionXml;
import org.apache.ambari.server.state.stack.LatestRepoCallable;
import org.apache.ambari.server.state.stack.RepositoryXml;
import org.apache.ambari.server.state.stack.StackRoleCommandOrder;
import org.apache.ambari.server.utils.VersionUtils;
+import org.apache.ambari.spi.stack.StackReleaseVersion;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimaps;
import com.google.common.io.Files;
public class StackInfo implements Comparable<StackInfo>, Validable {
+ private static final Logger LOG = LoggerFactory.getLogger(StackInfo.class);
+
private String minJdk;
private String maxJdk;
private String name;
@@ -77,6 +84,8 @@ public class StackInfo implements Comparable<StackInfo>,
Validable {
private VersionDefinitionXml latestVersion = null;
+ private String releaseVersionClass = null;
+
/**
* A {@link ClassLoader} for any JARs discovered in the stack's library
* folder.
@@ -111,6 +120,10 @@ public class StackInfo implements Comparable<StackInfo>,
Validable {
this.maxJdk = maxJdk;
}
+ public void setReleaseVersionClass(String className) {
+ releaseVersionClass = className;
+ }
+
/**
*
* @return valid xml flag
@@ -354,21 +367,13 @@ public class StackInfo implements Comparable<StackInfo>,
Validable {
}
}
- return new StackVersionResponse(getVersion(), getMinUpgradeVersion(),
+ return new StackVersionResponse(getVersion(),
isActive(), getParentStackVersion(), getConfigTypeAttributes(),
serviceDescriptorFiles,
null == upgradePacks ? Collections.emptySet() : upgradePacks.keySet(),
isValid(), getErrors(), getMinJdk(), getMaxJdk());
}
- public String getMinUpgradeVersion() {
- return minUpgradeVersion;
- }
-
- public void setMinUpgradeVersion(String minUpgradeVersion) {
- this.minUpgradeVersion = minUpgradeVersion;
- }
-
public boolean isActive() {
return active;
}
@@ -641,6 +646,35 @@ public class StackInfo implements Comparable<StackInfo>,
Validable {
}
/**
+ * Gets the instance of the {@code StackReleaseVersion}. If not specified
+ * or there is an error instantiating the class, return a default
implementation.
+ *
+ * @return the stack release information.
+ */
+ public StackReleaseVersion getReleaseVersion() {
+
+ if (StringUtils.isNotEmpty(releaseVersionClass)) {
+
+ try {
+ Class<?> clazz = null;
+
+ if (null != libraryClassLoader) {
+ clazz = libraryClassLoader.loadClass(releaseVersionClass);
+ } else {
+ clazz = Class.forName(releaseVersionClass);
+ }
+
+ return (StackReleaseVersion) clazz.newInstance();
+ } catch (Exception e) {
+ LOG.error("Could not create stack release instance. Using default.
{}", e.getMessage());
+ return new DefaultStackVersion();
+ }
+ } else {
+ return new DefaultStackVersion();
+ }
+ }
+
+ /**
* Gets the {@link ClassLoader} that can be used to load classes found in
JARs
* in the stack's library folder.
*
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index ead57a5..eb1176e 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -1054,7 +1054,8 @@ public class ClusterImpl implements Cluster {
// does the host gets a different repo state based on VDF and repo
// type
boolean hostRequiresRepository = false;
- ClusterVersionSummary clusterSummary =
versionDefinitionXml.getClusterSummary(this);
+ ClusterVersionSummary clusterSummary =
versionDefinitionXml.getClusterSummary(this,
+ ambariMetaInfo);
Set<String> servicesInUpgrade =
clusterSummary.getAvailableServiceNames();
List<ServiceComponentHost> schs =
getServiceComponentHosts(hostEntity.getHostName());
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/DefaultStackVersion.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/DefaultStackVersion.java
new file mode 100644
index 0000000..d98ac93
--- /dev/null
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/DefaultStackVersion.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.state.repository;
+
+import java.util.Comparator;
+
+import org.apache.ambari.server.utils.VersionUtils;
+import org.apache.ambari.spi.stack.StackReleaseInfo;
+import org.apache.ambari.spi.stack.StackReleaseVersion;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * This is the default implementation if no stack provides an implementation.
+ * Before this mechanism, Ambari assumed the version was in the format
X.X.X.X-YYYY
+ */
+public class DefaultStackVersion implements StackReleaseVersion {
+
+ @Override
+ public String getFullVersion(StackReleaseInfo info) {
+
+ StringBuilder sb = new StringBuilder(info.getVersion());
+
+ if (StringUtils.isNotBlank(info.getBuild())) {
+ sb.append('-').append(StringUtils.trim(info.getBuild()));
+ }
+
+ return sb.toString();
+ }
+
+ @Override
+ public Comparator<StackReleaseInfo> getComparator() {
+
+ return new Comparator<StackReleaseInfo>() {
+ @Override
+ public int compare(StackReleaseInfo o1, StackReleaseInfo o2) {
+ return VersionUtils.compareVersionsWithBuild(
+ getFullVersion(o1), getFullVersion(o2), 4);
+ }
+ };
+ }
+
+ @Override
+ public StackReleaseInfo parse(String versionString) {
+ String version = "0";
+ String build = "0";
+
+ String[] parts = StringUtils.split(versionString, '-');
+ if (1 == parts.length) {
+ version = parts[0];
+ } else if (parts.length > 1) {
+ version = parts[0];
+ build = parts[1];
+ }
+
+ return new StackReleaseInfo(version, "0", build);
+ }
+
+
+}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/Release.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/Release.java
index c998742..41ddc62 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/Release.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/Release.java
@@ -22,7 +22,8 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import org.apache.ambari.spi.RepositoryType;
-import org.apache.commons.lang.StringUtils;
+import org.apache.ambari.spi.stack.StackReleaseInfo;
+import org.apache.ambari.spi.stack.StackReleaseVersion;
/**
* Release information for a repository.
@@ -55,6 +56,12 @@ public class Release {
public String build;
/**
+ * The hotfix number.
+ */
+ @XmlElement(name="hotfix")
+ public String hotfix;
+
+ /**
* The compatability regex. This is used to relate the release to another
release.
*/
@XmlElement(name="compatible-with")
@@ -75,14 +82,16 @@ public class Release {
/**
* @return the full version
*/
- public String getFullVersion() {
- StringBuilder sb = new StringBuilder(version);
-
- if (StringUtils.isNotBlank(build)) {
- sb.append('-').append(StringUtils.trim(build));
- }
+ public String getFullVersion(StackReleaseVersion stackVersion) {
+ return stackVersion.getFullVersion(new StackReleaseInfo(
+ version, hotfix, build));
+ }
- return sb.toString();
+ /**
+ * @return the release info for the VDF
+ */
+ public StackReleaseInfo getReleaseInfo() {
+ return new StackReleaseInfo(version, hotfix, build);
}
}
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
index 8e6f4b2..abca273 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/repository/VersionDefinitionXml.java
@@ -25,6 +25,7 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -49,6 +50,7 @@ import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.ConfigHelper;
@@ -61,8 +63,9 @@ import
org.apache.ambari.server.state.repository.StackPackage.UpgradeDependencie
import
org.apache.ambari.server.state.repository.StackPackage.UpgradeDependencyDeserializer;
import org.apache.ambari.server.state.stack.RepositoryXml;
import org.apache.ambari.server.state.stack.RepositoryXml.Os;
-import org.apache.ambari.server.utils.VersionUtils;
import org.apache.ambari.spi.RepositoryType;
+import org.apache.ambari.spi.stack.StackReleaseInfo;
+import org.apache.ambari.spi.stack.StackReleaseVersion;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -286,7 +289,8 @@ public class VersionDefinitionXml {
* @return a summary instance
* @throws AmbariException
*/
- public ClusterVersionSummary getClusterSummary(Cluster cluster) throws
AmbariException {
+ public ClusterVersionSummary getClusterSummary(Cluster cluster,
AmbariMetaInfo metaInfo)
+ throws AmbariException {
Map<String, ManifestService> manifests = buildManifestByService();
Set<String> available = getAvailableServiceNames();
@@ -304,18 +308,24 @@ public class VersionDefinitionXml {
ServiceVersionSummary summary = new ServiceVersionSummary();
summaries.put(service.getName(), summary);
- String serviceVersion =
service.getDesiredRepositoryVersion().getVersion();
+ StackId stackId = service.getDesiredRepositoryVersion().getStackId();
+ StackInfo stack = metaInfo.getStack(stackId);
+ StackReleaseVersion stackReleaseVersion = stack.getReleaseVersion();
+
+ StackReleaseInfo serviceVersion = stackReleaseVersion.parse(
+ service.getDesiredRepositoryVersion().getVersion());
// !!! currently only one version is supported (unique service names)
ManifestService manifest = manifests.get(serviceName);
- final String versionToCompare;
+ final StackReleaseInfo versionToCompare;
final String summaryReleaseVersion;
+
if (StringUtils.isEmpty(manifest.releaseVersion)) {
- versionToCompare = release.getFullVersion();
+ versionToCompare = release.getReleaseInfo();
summaryReleaseVersion = release.version;
} else {
- versionToCompare = manifest.releaseVersion;
+ versionToCompare = stackReleaseVersion.parse(manifest.releaseVersion);
summaryReleaseVersion = manifest.releaseVersion;
}
@@ -326,7 +336,8 @@ public class VersionDefinitionXml {
} else {
// !!! installed service already meets the release version, then
nothing to upgrade
// !!! TODO should this be using the release compatible-with field?
- if (VersionUtils.compareVersionsWithBuild(versionToCompare,
serviceVersion, 4) > 0) {
+ Comparator<StackReleaseInfo> comparator =
stackReleaseVersion.getComparator();
+ if (comparator.compare(versionToCompare, serviceVersion) > 0) {
summary.setUpgrade(true);
}
}
@@ -343,11 +354,13 @@ public class VersionDefinitionXml {
*
* @param cluster
* the cluster (not {@code null}).
+ * @param metaInfo
+ * the metainfo instance
* @return a mapping of service name to its missing service dependencies, or
* an empty map if there are none (never {@code null}).
* @throws AmbariException
*/
- public Set<String> getMissingDependencies(Cluster cluster)
+ public Set<String> getMissingDependencies(Cluster cluster, AmbariMetaInfo
metaInfo)
throws AmbariException {
Set<String> missingDependencies = Sets.newTreeSet();
@@ -392,7 +405,7 @@ public class VersionDefinitionXml {
// the installed services in the cluster
Map<String,Service> installedServices = cluster.getServices();
- ClusterVersionSummary clusterVersionSummary = getClusterSummary(cluster);
+ ClusterVersionSummary clusterVersionSummary = getClusterSummary(cluster,
metaInfo);
Set<String> servicesInUpgrade =
clusterVersionSummary.getAvailableServiceNames();
Set<String> servicesInRepository = getAvailableServiceNames();
diff --git
a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackMetainfoXml.java
b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackMetainfoXml.java
index be2a45c..e03d40c 100644
---
a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackMetainfoXml.java
+++
b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/StackMetainfoXml.java
@@ -52,7 +52,7 @@ public class StackMetainfoXml implements Validable{
@XmlElement(name="extends")
private String extendsVersion = null;
-
+
@XmlElement(name="versions")
private Version version = new Version();
@@ -60,7 +60,7 @@ public class StackMetainfoXml implements Validable{
private boolean valid = true;
/**
- *
+ *
* @return valid xml flag
*/
@Override
@@ -69,17 +69,17 @@ public class StackMetainfoXml implements Validable{
}
/**
- *
+ *
* @param valid set validity flag
*/
@Override
public void setValid(boolean valid) {
this.valid = valid;
}
-
+
@XmlTransient
private Set<String> errorSet = new HashSet<>();
-
+
@Override
public void addError(String error) {
errorSet.add(error);
@@ -88,20 +88,20 @@ public class StackMetainfoXml implements Validable{
@Override
public Collection<String> getErrors() {
return errorSet;
- }
+ }
@Override
public void addErrors(Collection<String> errors) {
this.errorSet.addAll(errors);
}
-
+
/**
* @return the parent stack version number
*/
public String getExtends() {
return extendsVersion;
}
-
+
/**
* @return gets the version
*/
@@ -126,28 +126,24 @@ public class StackMetainfoXml implements Validable{
public Version() {
}
private boolean active = false;
- private String upgrade = null;
-
+ private String stackReleaseVersion;
+
/**
* @return <code>true</code> if the stack is active
*/
public boolean isActive() {
return active;
}
-
- /**
- * @return the upgrade version number, if set
- */
- public String getUpgrade() {
- return upgrade;
- }
+ public String getReleaseVersion() {
+ return stackReleaseVersion;
+ }
public void setActive(boolean active) {
this.active = active;
}
- }
-
+ }
+
}
diff --git a/ambari-server/src/main/resources/version_definition.xsd
b/ambari-server/src/main/resources/version_definition.xsd
index fb38370..c933280 100644
--- a/ambari-server/src/main/resources/version_definition.xsd
+++ b/ambari-server/src/main/resources/version_definition.xsd
@@ -30,8 +30,9 @@
<xs:element name="type" type="repo-type" />
<xs:element name="stack-id" type="xs:string" />
<xs:element name="version" type="xs:string" />
- <xs:element name="build" type="xs:string" minOccurs="0" maxOccurs="1"/>
- <xs:element name="compatible-with" type="xs:string" minOccurs="0"/>
+ <xs:element name="hotfix" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="build" type="xs:string" minOccurs="0" maxOccurs="1" />
+ <xs:element name="compatible-with" type="xs:string" minOccurs="0" />
<xs:element name="release-notes" type="xs:string" maxOccurs="1" />
<xs:element name="display" type="xs:string" minOccurs="0" />
<!-- deprecated and will be removed -->
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
index d06e4d0..11c1909 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
@@ -512,7 +512,6 @@ public class AmbariMetaInfoTest {
StackInfo stackInfo = metaInfo.getStack(STACK_NAME_HDP, STACK_VERSION_HDP);
Assert.assertEquals(stackInfo.getName(), STACK_NAME_HDP);
Assert.assertEquals(stackInfo.getVersion(), STACK_VERSION_HDP);
- Assert.assertEquals(stackInfo.getMinUpgradeVersion(),
STACK_MINIMAL_VERSION_HDP);
try {
metaInfo.getStack(STACK_NAME_HDP, NON_EXT_VALUE);
} catch (StackAccessException e) {
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/AmbariMetricsHadoopSinkVersionCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/AmbariMetricsHadoopSinkVersionCheckTest.java
index 1330962..2a963d4 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/AmbariMetricsHadoopSinkVersionCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/AmbariMetricsHadoopSinkVersionCheckTest.java
@@ -32,6 +32,7 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.AmbariServer;
@@ -132,7 +133,7 @@ public class AmbariMetricsHadoopSinkVersionCheckTest {
when(m_repositoryVersionEntity.getType()).thenReturn(RepositoryType.STANDARD);
when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services.keySet());
m_checkHelper.m_clusters = m_clusters;
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
index 786f03a..11ced03 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ClusterCheckTest.java
@@ -27,6 +27,7 @@ import java.util.Set;
import org.apache.ambari.annotations.UpgradeCheckInfo;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.CheckHelper;
import org.apache.ambari.server.state.Cluster;
@@ -140,13 +141,22 @@ public class ClusterCheckTest extends EasyMockSupport {
RepositoryVersionEntity repositoryVersionEntity =
createNiceMock(RepositoryVersionEntity.class);
expect(repositoryVersionEntity.getType()).andReturn(RepositoryType.STANDARD).anyTimes();
expect(repositoryVersionEntity.getRepositoryXml()).andReturn(m_vdfXml).atLeastOnce();
-
expect(m_vdfXml.getClusterSummary(EasyMock.anyObject(Cluster.class))).andReturn(
- m_clusterVersionSummary).atLeastOnce();
+ expect(m_vdfXml.getClusterSummary(EasyMock.anyObject(Cluster.class),
+
EasyMock.anyObject(AmbariMetaInfo.class))).andReturn(m_clusterVersionSummary).atLeastOnce();
expect(m_clusterVersionSummary.getAvailableServiceNames()).andReturn(
allServicesList).atLeastOnce();
- m_mockCheckHelper.m_clusters = clusters;
+ final AmbariMetaInfo ami = createNiceMock(AmbariMetaInfo.class);
+
+ m_mockCheckHelper.setMetaInfoProvider(new Provider<AmbariMetaInfo>() {
+ @Override
+ public AmbariMetaInfo get() {
+ return ami;
+ }
+ });
+
+
Mockito.when(m_mockCheckHelper.m_repositoryVersionDAO.findByPK(Mockito.anyLong())).thenReturn(
repositoryVersionEntity);
@@ -206,7 +216,7 @@ public class ClusterCheckTest extends EasyMockSupport {
RepositoryVersionEntity repositoryVersionEntity =
createNiceMock(RepositoryVersionEntity.class);
expect(repositoryVersionEntity.getType()).andReturn(RepositoryType.STANDARD).anyTimes();
expect(repositoryVersionEntity.getRepositoryXml()).andReturn(m_vdfXml).atLeastOnce();
-
expect(m_vdfXml.getClusterSummary(EasyMock.anyObject(Cluster.class))).andReturn(
+ expect(m_vdfXml.getClusterSummary(EasyMock.anyObject(Cluster.class),
EasyMock.anyObject(AmbariMetaInfo.class))).andReturn(
m_clusterVersionSummary).atLeastOnce();
// the cluster summary will only return 1 service for the upgrade, even
@@ -218,6 +228,15 @@ public class ClusterCheckTest extends EasyMockSupport {
Mockito.when(m_mockCheckHelper.m_repositoryVersionDAO.findByPK(Mockito.anyLong())).thenReturn(
repositoryVersionEntity);
+ final AmbariMetaInfo ami = createNiceMock(AmbariMetaInfo.class);
+
+ m_mockCheckHelper.setMetaInfoProvider(new Provider<AmbariMetaInfo>() {
+ @Override
+ public AmbariMetaInfo get() {
+ return ami;
+ }
+ });
+
replayAll();
TestCheckImpl check = new TestCheckImpl(UpgradeCheckType.SERVICE);
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
index a123298..d0d4f07 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentsInstallationCheckTest.java
@@ -108,9 +108,18 @@ public class ComponentsInstallationCheckTest {
Mockito.when(m_repositoryVersionEntity.getVersion()).thenReturn(version);
Mockito.when(m_repositoryVersionEntity.getStackId()).thenReturn(stackId);
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
Mockito.when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services.keySet());
+ final AmbariMetaInfo metaInfo = Mockito.mock(AmbariMetaInfo.class);
+
+ m_checkHelper.setMetaInfoProvider(new Provider<AmbariMetaInfo>() {
+ @Override
+ public AmbariMetaInfo get() {
+ return metaInfo;
+ }
+ });
+
m_checkHelper.m_clusters = clusters;
Mockito.when(m_checkHelper.m_repositoryVersionDAO.findByPK(Mockito.anyLong())).thenReturn(m_repositoryVersionEntity);
}
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
index 3af2d3f..088e75d 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheckTest.java
@@ -80,7 +80,7 @@ public class HostsMasterMaintenanceCheckTest {
Mockito.when(m_repositoryVersion.getRepositoryType()).thenReturn(RepositoryType.STANDARD);
Mockito.when(m_repositoryVersionEntity.getType()).thenReturn(RepositoryType.STANDARD);
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
Mockito.when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services.keySet());
}
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
index 7729bba..45b3e1d 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheckTest.java
@@ -20,6 +20,7 @@ package org.apache.ambari.server.checks;
import java.util.HashMap;
import java.util.Map;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.dao.HostVersionDAO;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.HostVersionEntity;
@@ -94,7 +95,7 @@ public class HostsRepositoryVersionCheckTest {
Mockito.when(m_repositoryVersionEntity.getVersion()).thenReturn(version);
Mockito.when(m_repositoryVersionEntity.getStackId()).thenReturn(stackId);
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
Mockito.when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services.keySet());
m_checkHelper.m_clusters = clusters;
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/MockCheckHelper.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/MockCheckHelper.java
index 898b0de..a640fc7 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/MockCheckHelper.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/MockCheckHelper.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.state.CheckHelper;
import org.apache.ambari.server.state.Clusters;
@@ -48,4 +49,11 @@ public class MockCheckHelper extends CheckHelper {
}
};
}
+
+ /**
+ * Helper to set the AmbariMetaInfo provider instance
+ */
+ public void setMetaInfoProvider(Provider<AmbariMetaInfo> provider) {
+ metaInfoProvider = provider;
+ }
}
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheckTest.java
index 5861a2e..83f626d 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/RequiredServicesInRepositoryCheckTest.java
@@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock;
import java.util.Set;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.CheckHelper;
import org.apache.ambari.server.state.Cluster;
@@ -89,11 +90,21 @@ public class RequiredServicesInRepositoryCheckTest {
Mockito.when(m_repositoryVersion.getRepositoryType()).thenReturn(RepositoryType.STANDARD);
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getMissingDependencies(Mockito.eq(cluster))).thenReturn(m_missingDependencies);
+ Mockito.when(m_vdfXml.getMissingDependencies(Mockito.eq(cluster),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_missingDependencies);
+
m_checkHelper.m_clusters = clusters;
Mockito.when(m_checkHelper.m_repositoryVersionDAO.findByPK(Mockito.anyLong())).thenReturn(m_repositoryVersionEntity);
+ final AmbariMetaInfo metaInfo = Mockito.mock(AmbariMetaInfo.class);
+ m_requiredServicesCheck.ambariMetaInfo = new Provider<AmbariMetaInfo>() {
+ @Override
+ public AmbariMetaInfo get() {
+ return metaInfo;
+ }
+ };
+
+
m_requiredServicesCheck.checkHelperProvider = new Provider<CheckHelper>() {
@Override
public CheckHelper get() {
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
index 07a683d..9d8e7da 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheckTest.java
@@ -91,7 +91,7 @@ public class ServicesMaintenanceModeCheckTest {
Mockito.when(m_repositoryVersionEntity.getVersion()).thenReturn("2.2.0.0-1234");
Mockito.when(m_repositoryVersionEntity.getStackId()).thenReturn(new
StackId("HDP", "2.2"));
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
Mockito.when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services.keySet());
m_checkHelper.m_clusters = clusters;
@@ -116,6 +116,8 @@ public class ServicesMaintenanceModeCheckTest {
}
};
+
m_checkHelper.setMetaInfoProvider(servicesMaintenanceModeCheck.ambariMetaInfo);
+
servicesMaintenanceModeCheck.checkHelperProvider = new
Provider<CheckHelper>() {
@Override
public CheckHelper get() {
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
index 000c7e2..dfe0c6c 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicesUpCheckTest.java
@@ -109,7 +109,7 @@ public class ServicesUpCheckTest {
Mockito.when(m_repositoryVersionEntity.getVersion()).thenReturn(version);
Mockito.when(m_repositoryVersionEntity.getStackId()).thenReturn(stackId);
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
Mockito.when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services.keySet());
Mockito.when(m_repositoryVersionDAO.findByPK(Mockito.anyLong())).thenReturn(m_repositoryVersionEntity);
@@ -141,6 +141,7 @@ public class ServicesUpCheckTest {
MockCheckHelper mockCheckHelper = new MockCheckHelper();
mockCheckHelper.m_clusters = clusters;
mockCheckHelper.m_repositoryVersionDAO = m_repositoryVersionDAO;
+ mockCheckHelper.setMetaInfoProvider(servicesUpCheck.ambariMetaInfo);
return mockCheckHelper;
}
};
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContextTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContextTest.java
index f8a934c..dde51a5 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContextTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/stack/upgrade/orchestrate/UpgradeContextTest.java
@@ -184,7 +184,7 @@ public class UpgradeContextTest extends EasyMockSupport {
expect(m_cluster.getUpgradeInProgress()).andReturn(null).atLeastOnce();
// VDF stuff
-
expect(m_vdfXml.getClusterSummary(EasyMock.anyObject(Cluster.class))).andReturn(
+ expect(m_vdfXml.getClusterSummary(EasyMock.anyObject(Cluster.class),
EasyMock.anyObject(AmbariMetaInfo.class))).andReturn(
m_clusterVersionSummary).anyTimes();
}
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
index 6413e77..ad77aa1 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/state/CheckHelperTest.java
@@ -26,6 +26,7 @@ import java.util.Set;
import org.apache.ambari.annotations.UpgradeCheckInfo;
import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.checks.ClusterCheck;
import org.apache.ambari.server.checks.MockCheckHelper;
import org.apache.ambari.server.configuration.Configuration;
@@ -99,7 +100,7 @@ public class CheckHelperTest {
Mockito.when(m_repositoryVersion.getRepositoryType()).thenReturn(RepositoryType.STANDARD);
Mockito.when(repositoryVersionDao.findByPK(Mockito.anyLong())).thenReturn(m_repositoryVersionEntity);
Mockito.when(m_repositoryVersionEntity.getRepositoryXml()).thenReturn(m_vdfXml);
-
Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class))).thenReturn(m_clusterVersionSummary);
+ Mockito.when(m_vdfXml.getClusterSummary(Mockito.any(Cluster.class),
Mockito.any(AmbariMetaInfo.class))).thenReturn(m_clusterVersionSummary);
Mockito.when(m_clusterVersionSummary.getAvailableServiceNames()).thenReturn(m_services);
}
@@ -233,6 +234,14 @@ public class CheckHelperTest {
helper.m_repositoryVersionDAO = repositoryVersionDao;
helper.clustersProvider = () -> clusters;
+ final AmbariMetaInfo metaInfo = Mockito.mock(AmbariMetaInfo.class);
+ helper.metaInfoProvider = new Provider<AmbariMetaInfo>() {
+ @Override
+ public AmbariMetaInfo get() {
+ return metaInfo;
+ }
+ };
+
Configuration configuration = EasyMock.createNiceMock(Configuration.class);
List<UpgradeCheck> updateChecksRegistry = new ArrayList<>();
diff --git
a/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
b/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
index fc4c97d..885cb82 100644
---
a/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
+++
b/ambari-server/src/test/java/org/apache/ambari/server/state/repository/VersionDefinitionTest.java
@@ -34,11 +34,13 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.stack.RepoTag;
import org.apache.ambari.server.state.stack.RepositoryXml;
@@ -46,6 +48,7 @@ import org.apache.ambari.server.state.stack.RepositoryXml.Os;
import org.apache.ambari.server.state.stack.RepositoryXml.Repo;
import org.apache.ambari.spi.RepositoryType;
import org.apache.commons.io.FileUtils;
+import org.easymock.EasyMock;
import org.junit.Test;
import com.google.common.collect.ImmutableMap;
@@ -437,6 +440,12 @@ public class VersionDefinitionTest {
expect(serviceHBase.getDisplayName()).andReturn("HBase").atLeastOnce();
expect(serviceHBase.getDesiredRepositoryVersion()).andReturn(repositoryVersion).atLeastOnce();
+ StackInfo stackInfo = createNiceMock(StackInfo.class);
+ expect(stackInfo.getReleaseVersion()).andReturn(new
DefaultStackVersion()).atLeastOnce();
+
+ AmbariMetaInfo ami = createNiceMock(AmbariMetaInfo.class);
+
expect(ami.getStack(EasyMock.anyObject(StackId.class))).andReturn(stackInfo).atLeastOnce();
+
// !!! should never be accessed as it's not in any VDF
Service serviceAMS = createNiceMock(Service.class);
@@ -446,28 +455,28 @@ public class VersionDefinitionTest {
.put("AMBARI_METRICS", serviceAMS).build()).atLeastOnce();
- replay(cluster, repositoryVersion, serviceHdfs, serviceHBase);
+ replay(cluster, repositoryVersion, serviceHdfs, serviceHBase, stackInfo,
ami);
File f = new
File("src/test/resources/version_definition_test_all_services.xml");
VersionDefinitionXml xml = VersionDefinitionXml.load(f.toURI().toURL());
- ClusterVersionSummary summary = xml.getClusterSummary(cluster);
+ ClusterVersionSummary summary = xml.getClusterSummary(cluster, ami);
assertEquals(2, summary.getAvailableServiceNames().size());
f = new File("src/test/resources/version_definition_test_maint.xml");
xml = VersionDefinitionXml.load(f.toURI().toURL());
- summary = xml.getClusterSummary(cluster);
+ summary = xml.getClusterSummary(cluster, ami);
assertEquals(0, summary.getAvailableServiceNames().size());
f = new File("src/test/resources/version_definition_test_maint.xml");
xml = VersionDefinitionXml.load(f.toURI().toURL());
xml.release.repositoryType = RepositoryType.STANDARD;
xml.availableServices = Collections.emptyList();
- summary = xml.getClusterSummary(cluster);
+ summary = xml.getClusterSummary(cluster, ami);
assertEquals(2, summary.getAvailableServiceNames().size());
f = new
File("src/test/resources/version_definition_test_maint_partial.xml");
xml = VersionDefinitionXml.load(f.toURI().toURL());
- summary = xml.getClusterSummary(cluster);
+ summary = xml.getClusterSummary(cluster, ami);
assertEquals(1, summary.getAvailableServiceNames().size());
}
@@ -488,6 +497,12 @@ public class VersionDefinitionTest {
expect(serviceHBase.getDisplayName()).andReturn("HBase").atLeastOnce();
expect(serviceHBase.getDesiredRepositoryVersion()).andReturn(repositoryVersion).atLeastOnce();
+ StackInfo stackInfo = createNiceMock(StackInfo.class);
+ expect(stackInfo.getReleaseVersion()).andReturn(new
DefaultStackVersion()).atLeastOnce();
+
+ AmbariMetaInfo ami = createNiceMock(AmbariMetaInfo.class);
+
expect(ami.getStack(EasyMock.anyObject(StackId.class))).andReturn(stackInfo).atLeastOnce();
+
// !!! should never be accessed as it's not in any VDF
Service serviceAMS = createNiceMock(Service.class);
@@ -496,13 +511,13 @@ public class VersionDefinitionTest {
.put("HBASE", serviceHBase)
.put("AMBARI_METRICS", serviceAMS).build()).atLeastOnce();
- replay(cluster, repositoryVersion, serviceHdfs, serviceHBase);
+ replay(cluster, repositoryVersion, serviceHdfs, serviceHBase, stackInfo,
ami);
File f = new
File("src/test/resources/version_definition_test_maint_partial.xml");
VersionDefinitionXml xml = VersionDefinitionXml.load(f.toURI().toURL());
xml.release.version = "2.3.4.1";
xml.release.build = "2";
- ClusterVersionSummary summary = xml.getClusterSummary(cluster);
+ ClusterVersionSummary summary = xml.getClusterSummary(cluster, ami);
assertEquals(1, summary.getAvailableServiceNames().size());
}