You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/10/12 23:07:42 UTC
[9/9] ambari git commit: AMBARI-13392. Stop-and-Start Upgrade: Merge
branch branch-dev-stop-all-upgrade to branch-2.1 for feature Stop-the-World
Upgrade, aka Express Upgrade (alejandro, dlysnichenko, Dmytro Grinenko)
AMBARI-13392. Stop-and-Start Upgrade: Merge branch branch-dev-stop-all-upgrade to branch-2.1 for feature Stop-the-World Upgrade, aka Express Upgrade (alejandro, dlysnichenko, Dmytro Grinenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ff8a56af
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ff8a56af
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ff8a56af
Branch: refs/heads/branch-2.1
Commit: ff8a56af6dda0895369dd1515d3142faebe775ef
Parents: 1abf2ae
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Thu Aug 20 17:24:48 2015 -0700
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Mon Oct 12 14:04:08 2015 -0700
----------------------------------------------------------------------
.../server/api/services/AmbariMetaInfo.java | 21 +-
.../server/checks/AbstractCheckDescriptor.java | 56 +-
.../server/checks/ClientRetryPropertyCheck.java | 17 +-
.../server/checks/ConfigurationMergeCheck.java | 29 +-
.../HiveDynamicServiceDiscoveryCheck.java | 15 +-
.../checks/HiveMultipleMetastoreCheck.java | 13 +-
.../server/checks/HostsHeartbeatCheck.java | 2 +-
.../checks/HostsMasterMaintenanceCheck.java | 15 +-
.../checks/HostsRepositoryVersionCheck.java | 11 +-
...apReduce2JobHistoryStatePreservingCheck.java | 7 +-
.../checks/SecondaryNamenodeDeletedCheck.java | 15 +-
.../checks/ServicesMaintenanceModeCheck.java | 3 +-
.../ServicesMapReduceDistributedCacheCheck.java | 10 +-
.../ServicesNamenodeHighAvailabilityCheck.java | 13 +-
.../checks/ServicesNamenodeTruncateCheck.java | 11 +-
.../ServicesTezDistributedCacheCheck.java | 10 +-
.../ambari/server/checks/ServicesUpCheck.java | 2 +-
.../checks/ServicesYarnWorkPreservingCheck.java | 14 +-
.../ambari/server/checks/UpgradeCheck.java | 8 +
.../server/checks/UpgradeCheckRegistry.java | 19 +
.../checks/YarnRMHighAvailabilityCheck.java | 13 +-
.../YarnTimelineServerStatePreservingCheck.java | 7 +-
.../AmbariCustomCommandExecutionHelper.java | 13 +-
.../AmbariManagementControllerImpl.java | 6 +-
.../server/controller/PrereqCheckRequest.java | 20 +-
.../ClusterStackVersionResourceProvider.java | 4 +-
...atibleRepositoryVersionResourceProvider.java | 3 -
.../PreUpgradeCheckResourceProvider.java | 48 +-
.../RepositoryVersionResourceProvider.java | 96 ++-
.../internal/UpgradeResourceProvider.java | 192 ++++-
.../ambari/server/metadata/ActionMetadata.java | 4 +-
.../server/orm/dao/ClusterVersionDAO.java | 23 +
.../apache/ambari/server/orm/dao/CrudDAO.java | 15 +
.../ambari/server/orm/dao/HostVersionDAO.java | 42 +-
.../server/orm/dao/RepositoryVersionDAO.java | 6 +-
.../ambari/server/orm/dao/UpgradeDAO.java | 19 +-
.../orm/entities/RepositoryVersionEntity.java | 18 +-
.../server/orm/entities/UpgradeEntity.java | 89 +++
.../serveraction/upgrades/ConfigureAction.java | 23 +-
.../upgrades/UpdateDesiredStackAction.java | 139 ++++
.../server/stack/ModuleFileUnmarshaller.java | 4 +-
.../server/stack/StackDefinitionDirectory.java | 2 +
.../ambari/server/stack/StackDirectory.java | 52 +-
.../apache/ambari/server/stack/StackModule.java | 2 +-
.../apache/ambari/server/state/StackInfo.java | 31 +-
.../ambari/server/state/UpgradeContext.java | 56 +-
.../ambari/server/state/UpgradeHelper.java | 151 +++-
.../server/state/stack/ConfigUpgradePack.java | 192 +++++
.../ambari/server/state/stack/UpgradePack.java | 123 ++-
.../state/stack/upgrade/ClusterGrouping.java | 27 +-
.../upgrade/ConfigUpgradeChangeDefinition.java | 420 ++++++++++
.../state/stack/upgrade/ConfigureTask.java | 333 ++------
.../server/state/stack/upgrade/ExecuteTask.java | 12 +
.../server/state/stack/upgrade/Grouping.java | 40 +-
.../server/state/stack/upgrade/ManualTask.java | 4 +
.../stack/upgrade/RepositoryVersionHelper.java | 43 +-
.../state/stack/upgrade/RestartGrouping.java | 36 +
.../server/state/stack/upgrade/RestartTask.java | 14 +-
.../state/stack/upgrade/ServerActionTask.java | 4 +
.../stack/upgrade/ServerSideActionTask.java | 7 +
.../stack/upgrade/ServiceCheckGrouping.java | 34 +-
.../state/stack/upgrade/ServiceCheckTask.java | 12 +
.../state/stack/upgrade/StageWrapper.java | 6 +-
.../stack/upgrade/StageWrapperBuilder.java | 17 +-
.../state/stack/upgrade/StartGrouping.java | 36 +
.../server/state/stack/upgrade/StartTask.java | 53 ++
.../state/stack/upgrade/StopGrouping.java | 36 +
.../server/state/stack/upgrade/StopTask.java | 53 ++
.../ambari/server/state/stack/upgrade/Task.java | 22 +-
.../stack/upgrade/UpdateStackGrouping.java | 36 +
.../state/stack/upgrade/UpgradeFunction.java | 26 +
.../server/state/stack/upgrade/UpgradeType.java | 36 +
.../svccomphost/ServiceComponentHostImpl.java | 1 -
.../server/upgrade/UpgradeCatalog213.java | 369 ++++++++-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 3 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 3 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 3 +-
.../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 3 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 3 +-
.../0.96.0.2.0/package/scripts/hbase_upgrade.py | 6 +-
.../HDFS/2.1.0.2.0/package/scripts/namenode.py | 15 +
.../HDP/2.1/upgrades/nonrolling-upgrade-2.3.xml | 382 +++++++++
.../stacks/HDP/2.2/upgrades/config-upgrade.xml | 55 ++
.../HDP/2.2/upgrades/nonrolling-upgrade-2.2.xml | 469 +++++++++++
.../stacks/HDP/2.2/upgrades/upgrade-2.2.xml | 123 ++-
.../stacks/HDP/2.2/upgrades/upgrade-2.3.xml | 731 +++--------------
.../stacks/HDP/2.3/repos/repoinfo.xml.orig | 92 ---
.../stacks/HDP/2.3/upgrades/config-upgrade.xml | 800 +++++++++++++++++++
.../stacks/HDP/2.3/upgrades/upgrade-2.3.xml | 146 ++--
.../checks/ConfigurationMergeCheckTest.java | 6 +
.../checks/HostsMasterMaintenanceCheckTest.java | 11 +-
.../SecondaryNamenodeDeletedCheckTest.java | 16 +-
...vicesMapReduceDistributedCacheCheckTest.java | 14 +-
...rvicesNamenodeHighAvailabilityCheckTest.java | 10 +-
.../ServicesNamenodeTruncateCheckTest.java | 8 +-
.../ServicesTezDistributedCacheCheckTest.java | 15 +-
.../ServicesYarnWorkPreservingCheckTest.java | 10 +-
.../checks/UpgradeCheckStackVersionTest.java | 170 ----
.../AmbariManagementControllerTest.java | 2 +-
...leRepositoryVersionResourceProviderTest.java | 16 +
.../RepositoryVersionResourceProviderTest.java | 110 ++-
.../UpgradeResourceProviderHDP22Test.java | 4 +-
.../internal/UpgradeResourceProviderTest.java | 71 +-
.../apache/ambari/server/orm/OrmTestHelper.java | 2 +-
.../ambari/server/orm/dao/CrudDAOTest.java | 1 -
.../orm/dao/RepositoryVersionDAOTest.java | 8 +-
.../ambari/server/orm/dao/UpgradeDAOTest.java | 10 +-
.../upgrades/ConfigureActionTest.java | 39 +-
.../upgrades/UpgradeActionTest.java | 6 +-
.../ambari/server/state/UpgradeHelperTest.java | 202 +++--
.../state/stack/ConfigUpgradePackTest.java | 198 +++++
.../server/state/stack/UpgradePackTest.java | 190 +++--
.../stack/upgrade/StageWrapperBuilderTest.java | 4 +-
.../server/upgrade/UpgradeCatalog213Test.java | 220 ++++-
.../stacks/2.0.6/HBASE/test_hbase_master.py | 2 +-
.../2.1/configs/secured-storm-start.json.orig | 374 ---------
.../HDP/2.1.1/upgrades/config-upgrade.xml | 101 +++
.../HDP/2.1.1/upgrades/upgrade_bucket_test.xml | 17 +-
.../HDP/2.1.1/upgrades/upgrade_direction.xml | 6 +-
.../stacks/HDP/2.1.1/upgrades/upgrade_test.xml | 61 +-
.../HDP/2.1.1/upgrades/upgrade_test_checks.xml | 30 +-
.../2.1.1/upgrades/upgrade_test_nonrolling.xml | 182 +++++
.../HDP/2.1.1/upgrades/upgrade_to_new_stack.xml | 24 +-
.../HDP/2.2.0/upgrades/config-upgrade.xml | 101 +++
.../stacks/HDP/2.2.0/upgrades/upgrade_test.xml | 21 +-
.../HDP/2.2.0/upgrades/upgrade_test_checks.xml | 30 +-
.../browser/HiveBrowserService.java.orig | 282 -------
.../hive/resources/jobs/JobService.java.orig | 476 -----------
128 files changed, 5958 insertions(+), 3287 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
index 561b3f4..e35e7ac 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
@@ -60,6 +60,7 @@ import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptorFactory;
import org.apache.ambari.server.state.stack.Metric;
import org.apache.ambari.server.state.stack.MetricDefinition;
import org.apache.ambari.server.state.stack.OsFamily;
+import org.apache.ambari.server.state.stack.ConfigUpgradePack;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -997,7 +998,7 @@ public class AmbariMetaInfo {
}
return alertDefinitionFactory.getAlertDefinitions(alertsFile,
- service.getName());
+ service.getName());
}
/**
@@ -1206,6 +1207,24 @@ public class AmbariMetaInfo {
}
/**
+ * Get all upgrade config pack if it is available for a stack.
+ *
+ * @param stackName the stack name
+ * @param stackVersion the stack version
+ * @return config upgrade pack for stack or null if it is
+ * not defined for stack
+ */
+ public ConfigUpgradePack getConfigUpgradePack(String stackName, String stackVersion) {
+ try {
+ StackInfo stack = getStack(stackName, stackVersion);
+ return stack.getConfigUpgradePack();
+ } catch (AmbariException e) {
+ LOG.debug("Cannot load config upgrade pack for non-existent stack {}-{}", stackName, stackVersion, e);
+ return null;
+ }
+ }
+
+ /**
* Gets the fully compiled Kerberos descriptor for the relevant stack and version.
* <p/>
* All of the kerberos.json files from the specified stack (and version) are read, parsed and
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
index 2f0bc94..760a971 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/AbstractCheckDescriptor.java
@@ -18,7 +18,9 @@
package org.apache.ambari.server.checks;
import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -82,7 +84,7 @@ public abstract class AbstractCheckDescriptor {
/**
* Tests if the prerequisite check is applicable to given cluster. This
- * method's defautl logic is to ensure that the cluster stack source and
+ * method's default logic is to ensure that the cluster stack source and
* target are compatible with the prerequisite check. When overridding this
* method, call {@code super#isApplicable(PrereqCheckRequest)}.
*
@@ -94,26 +96,36 @@ public abstract class AbstractCheckDescriptor {
* if server error happens
*/
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- StackId sourceStackId = getSourceStack();
- StackId targetStackId = getTargetStack();
-
- if( null == sourceStackId && null == targetStackId ) {
- return true;
- }
-
- StackId requestSourceStack = request.getSourceStackId();
- if (null != sourceStackId && null != requestSourceStack
- && sourceStackId.compareTo(requestSourceStack) > 0) {
- return false;
- }
+ // this is default behaviour
+ return true;
+ }
- StackId requestTargetStack = request.getTargetStackId();
- if (null != targetStackId && null != requestTargetStack
- && targetStackId.compareTo(requestTargetStack) < 0) {
- return false;
+ /**
+ * Same like {@code isApplicable(PrereqCheckRequest request)}, but with service presence check
+ * @param request
+ * prerequisite check request
+ * @param requiredServices
+ * set of services, which need to be present to allow check execution
+ * @param requiredAll
+ * require all services in the list or at least one need to present
+ * @return true if check should be performed
+ * @throws org.apache.ambari.server.AmbariException
+ * if server error happens
+ */
+ public boolean isApplicable(PrereqCheckRequest request, List<String> requiredServices, boolean requiredAll) throws AmbariException {
+ final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
+ Set<String> services = cluster.getServices().keySet();
+ boolean serviceFound = false;
+
+ for (String service : requiredServices) {
+ if (services.contains(service) && !requiredAll) {
+ serviceFound = true;
+ } else if (!services.contains(service) && requiredAll) {
+ return false;
+ }
}
- return true;
+ return !(!serviceFound && !requiredAll);
}
/**
@@ -292,4 +304,12 @@ public abstract class AbstractCheckDescriptor {
return formatted.toString();
}
+
+ /**
+ * Return the optionality flag of the Upgrade Check
+ * @return
+ */
+ public Boolean isRequired(){
+ return getClass().getAnnotation(UpgradeCheck.class).required();
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
index 52fca40..368bcb8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ClientRetryPropertyCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -36,7 +37,7 @@ import com.google.inject.Singleton;
* client retry properties for HDFS, HIVE, and OOZIE are set.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.CLIENT_RETRY_PROPERTY)
+@UpgradeCheck(group = UpgradeCheckGroup.CLIENT_RETRY_PROPERTY, required = true)
public class ClientRetryPropertyCheck extends AbstractCheckDescriptor {
static final String HIVE_CLIENT_RETRY_MISSING_KEY = "hive.client.retry.missing.key";
@@ -54,19 +55,7 @@ public class ClientRetryPropertyCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
-
- if (services.containsKey("HDFS") || services.containsKey("HIVE")
- || services.containsKey("OOZIE")) {
- return true;
- }
-
- return false;
+ return super.isApplicable(request, Arrays.asList("HDFS", "HIVE", "OOZIE"), false);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
index b81ca11..a47512e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ConfigurationMergeCheck.java
@@ -39,7 +39,7 @@ import com.google.inject.Singleton;
* Checks for configuration merge conflicts.
*/
@Singleton
-@UpgradeCheck(order = 99.0f)
+@UpgradeCheck(order = 99.0f, required = true)
public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
@Inject
@@ -49,33 +49,6 @@ public class ConfigurationMergeCheck extends AbstractCheckDescriptor {
super(CheckDescription.CONFIG_MERGE);
}
- @Override
- public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- String stackName = request.getTargetStackId().getStackName();
- String repoVersion = request.getRepositoryVersion();
- if (null == repoVersion) {
- return false;
- }
-
- RepositoryVersionEntity rve = repositoryVersionDaoProvider.get().findByStackNameAndVersion(stackName, repoVersion);
- if (null == rve) {
- return false;
- }
-
- Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
-
- if (rve.getStackId().equals(cluster.getCurrentStackVersion())) {
- return false;
- }
-
- return true;
- }
-
-
/**
* The following logic determines if a warning is generated for config merge
* issues:
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
index 4ea5484..d8f51a2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveDynamicServiceDiscoveryCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -37,7 +38,7 @@ import com.google.inject.Singleton;
* is properly configured for dynamic discovery.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.DEFAULT, order = 1.0f, required = true)
public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor {
static final String HIVE_DYNAMIC_SERVICE_DISCOVERY_ENABLED_KEY = "hive.dynamic-service.discovery.enabled.key";
@@ -56,17 +57,7 @@ public class HiveDynamicServiceDiscoveryCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (services.containsKey("HIVE")) {
- return true;
- }
-
- return false;
+ return super.isApplicable(request, Arrays.asList("HIVE"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
index c387a4b..14b8435 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HiveMultipleMetastoreCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -51,17 +52,7 @@ public class HiveMultipleMetastoreCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("HIVE")) {
- return false;
- }
-
- return true;
+ return super.isApplicable(request, Arrays.asList("HIVE"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
index a8600c4..a6811cb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsHeartbeatCheck.java
@@ -43,7 +43,7 @@ import com.google.inject.Singleton;
* {@link PrereqCheckStatus#WARNING} for any hosts in maintenance mode.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 1.0f, required = true)
public class HostsHeartbeatCheck extends AbstractCheckDescriptor {
static final String KEY_HOSTS_IN_MM_WARNING = "key.hosts.in.mm.warning";
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
index ef93337..39ab39f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsMasterMaintenanceCheck.java
@@ -40,7 +40,7 @@ import com.google.inject.Singleton;
* Checks that all hosts in maintenance state do not have master components.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 1.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 1.0f, required = true)
public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
static final String KEY_NO_UPGRADE_NAME = "no_upgrade_name";
@@ -54,21 +54,14 @@ public class HostsMasterMaintenanceCheck extends AbstractCheckDescriptor {
}
@Override
- public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- return request.getRepositoryVersion() != null;
- }
-
- @Override
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
final String clusterName = request.getClusterName();
final Cluster cluster = clustersProvider.get().getCluster(clusterName);
final StackId stackId = cluster.getDesiredStackVersion();
final Set<String> hostsWithMasterComponent = new HashSet<String>();
- final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(stackId.getStackName(), stackId.getStackVersion(), request.getRepositoryVersion());
+
+ // TODO AMBARI-12698, need to pass the upgrade pack to use in the request, or at least the type.
+ final String upgradePackName = repositoryVersionHelper.get().getUpgradePackageName(stackId.getStackName(), stackId.getStackVersion(), request.getRepositoryVersion(), null);
if (upgradePackName == null) {
prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
String fail = getFailReason(KEY_NO_UPGRADE_NAME, prerequisiteCheck, request);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
index eaa0096..00862ac 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/HostsRepositoryVersionCheck.java
@@ -41,7 +41,7 @@ import com.google.inject.Singleton;
* orchstration, so no warning is required.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.REPOSITORY_VERSION)
+@UpgradeCheck(group = UpgradeCheckGroup.REPOSITORY_VERSION, required = true)
public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor {
static final String KEY_NO_REPO_VERSION = "no_repo_version";
@@ -54,15 +54,6 @@ public class HostsRepositoryVersionCheck extends AbstractCheckDescriptor {
}
@Override
- public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- return request.getRepositoryVersion() != null;
- }
-
- @Override
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request)
throws AmbariException {
final String clusterName = request.getClusterName();
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
index 5f02c4f..af134d8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/MapReduce2JobHistoryStatePreservingCheck.java
@@ -28,6 +28,7 @@ import org.apache.ambari.server.utils.VersionUtils;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -87,15 +88,11 @@ public class MapReduce2JobHistoryStatePreservingCheck extends AbstractCheckDescr
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
+ if (!super.isApplicable(request, Arrays.asList("MAPREDUCE2"), true)) {
return false;
}
final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("MAPREDUCE2")) {
- return false;
- }
// Applicable only if stack not defined in MinimumApplicableStackVersion, or
// version equals or exceeds the enumerated version.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
index 493042f..d7c27d7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/SecondaryNamenodeDeletedCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -53,14 +54,7 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor {
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("HDFS");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("HDFS"), true)) {
return false;
}
@@ -72,6 +66,11 @@ public class SecondaryNamenodeDeletedCheck extends AbstractCheckDescriptor {
return true;
}
+ // TODO AMBARI-12698, there are 2 ways to filter the prechecks.
+ // 1. Explictly mention them in each upgrade pack, which is more flexible, but requires adding the name of checks
+ // to perform in each upgrade pack.
+ // 2. Make each upgrade check class call a function before perform() that will determine if the check is appropriate
+ // given the type of upgrade. The PrereqCheckRequest object has a field for the type of upgrade.
@Override
public void perform(PrerequisiteCheck prerequisiteCheck, PrereqCheckRequest request) throws AmbariException {
Set<String> hosts = new HashSet<String>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
index 5108afd..8d578d8 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMaintenanceModeCheck.java
@@ -24,7 +24,6 @@ import org.apache.ambari.server.controller.PrereqCheckRequest;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.MaintenanceState;
import org.apache.ambari.server.state.Service;
-import org.apache.ambari.server.state.State;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
@@ -34,7 +33,7 @@ import com.google.inject.Singleton;
* Checks that services are in the maintenance mode.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 2.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.MAINTENANCE_MODE, order = 2.0f, required = true)
public class ServicesMaintenanceModeCheck extends AbstractCheckDescriptor {
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
index be5d11a..2359919 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesMapReduceDistributedCacheCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -48,14 +49,7 @@ public class ServicesMapReduceDistributedCacheCheck extends AbstractCheckDescrip
public boolean isApplicable(PrereqCheckRequest request)
throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("YARN");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("YARN"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
index d92f12d..44e183d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeHighAvailabilityCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -46,17 +47,7 @@ public class ServicesNamenodeHighAvailabilityCheck extends AbstractCheckDescript
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("HDFS");
- } catch (ServiceNotFoundException ex) {
- return false;
- }
- return true;
+ return super.isApplicable(request, Arrays.asList("HDFS"), true);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
index 51369c9..3761d99 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesNamenodeTruncateCheck.java
@@ -28,6 +28,8 @@ import org.apache.ambari.server.utils.VersionUtils;
import com.google.inject.Singleton;
+import java.util.Arrays;
+
/**
* Checks that namenode high availability is enabled.
*/
@@ -44,14 +46,7 @@ public class ServicesNamenodeTruncateCheck extends AbstractCheckDescriptor {
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("HDFS");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("HDFS"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
index 68a7103..70a9b1b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesTezDistributedCacheCheck.java
@@ -18,6 +18,7 @@
package org.apache.ambari.server.checks;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -48,14 +49,7 @@ public class ServicesTezDistributedCacheCheck extends AbstractCheckDescriptor {
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("TEZ");
- } catch (ServiceNotFoundException ex) {
+ if (!super.isApplicable(request, Arrays.asList("TEZ"), true)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
index 70b8884..ea8569c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesUpCheck.java
@@ -44,7 +44,7 @@ import com.google.inject.Singleton;
* Checks that services are up.
*/
@Singleton
-@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 2.0f)
+@UpgradeCheck(group = UpgradeCheckGroup.LIVELINESS, order = 2.0f, required = true)
public class ServicesUpCheck extends AbstractCheckDescriptor {
private static final float SLAVE_THRESHOLD = 0.5f;
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
index a0b2b59..062c11f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicesYarnWorkPreservingCheck.java
@@ -27,6 +27,8 @@ import org.apache.commons.lang.BooleanUtils;
import com.google.inject.Singleton;
+import java.util.Arrays;
+
/**
* Checks that YARN has work-preserving restart enabled.
*/
@@ -46,17 +48,7 @@ public class ServicesYarnWorkPreservingCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- try {
- cluster.getService("YARN");
- } catch (ServiceNotFoundException ex) {
- return false;
- }
- return true;
+ return super.isApplicable(request, Arrays.asList("YARN"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
index 9fa8916..9e43560 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheck.java
@@ -55,4 +55,12 @@ public @interface UpgradeCheck {
* @return the order, or {@code 1.0f} if not specified.
*/
float order() default 1.0f;
+
+ /**
+ * Gets whether the pre-upgrade check is required.
+ * By default, a pre-upgrade check needs to be declared in the upgrade pack. This flag will override that setting.
+ *
+ * @return flag state, or {@code true} if not specified
+ */
+ boolean required() default false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
index 8be572c..4ed345c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/UpgradeCheckRegistry.java
@@ -24,6 +24,7 @@ import java.util.Set;
import java.util.TreeSet;
import com.google.inject.Singleton;
+import org.apache.ambari.server.state.stack.UpgradePack;
/**
* The {@link UpgradeCheckRegistry} contains the ordered list of all pre-upgrade
@@ -59,6 +60,24 @@ public class UpgradeCheckRegistry {
}
/**
+ * Gets an ordered and filtered list of the upgrade checks.
+ * @param upgradePack Upgrade pack object with the list of required checks to be included
+ * @return
+ */
+ public List<AbstractCheckDescriptor> getFilteredUpgradeChecks(UpgradePack upgradePack){
+ List<String> prerequisiteChecks = upgradePack.getPrerequisiteChecks();
+ List<AbstractCheckDescriptor> resultCheckDescriptor = new ArrayList<AbstractCheckDescriptor>();
+ for (AbstractCheckDescriptor descriptor: m_upgradeChecks){
+ if (descriptor.isRequired()){
+ resultCheckDescriptor.add(descriptor);
+ } else if (prerequisiteChecks.contains(descriptor.getClass().getName())){
+ resultCheckDescriptor.add(descriptor);
+ }
+ }
+ return resultCheckDescriptor;
+ }
+
+ /**
* THe {@link PreUpgradeCheckComparator} class is used to compare
* {@link AbstractCheckDescriptor} based on their {@link UpgradeCheck}
* annotations.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
index bf25f9f..9f3bd6e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnRMHighAvailabilityCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -49,17 +50,7 @@ public class YarnRMHighAvailabilityCheck extends AbstractCheckDescriptor {
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
- return false;
- }
-
- final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("YARN")) {
- return false;
- }
-
- return true;
+ return super.isApplicable(request, Arrays.asList("YARN"), true);
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
index eca0967..03528c2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/YarnTimelineServerStatePreservingCheck.java
@@ -17,6 +17,7 @@
*/
package org.apache.ambari.server.checks;
+import java.util.Arrays;
import java.util.Map;
import org.apache.ambari.server.AmbariException;
@@ -81,15 +82,11 @@ public class YarnTimelineServerStatePreservingCheck extends AbstractCheckDescrip
*/
@Override
public boolean isApplicable(PrereqCheckRequest request) throws AmbariException {
- if (!super.isApplicable(request)) {
+ if (!super.isApplicable(request, Arrays.asList("YARN"), true)) {
return false;
}
final Cluster cluster = clustersProvider.get().getCluster(request.getClusterName());
- Map<String, Service> services = cluster.getServices();
- if (!services.containsKey("YARN")) {
- return false;
- }
// Applicable only if stack not defined in MinimumApplicableStackVersion, or
// version equals or exceeds the enumerated version.
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index 2bda16e..c515e46 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -900,7 +900,7 @@ public class AmbariCustomCommandExecutionHelper {
String commandDetail = getReadableCustomCommandDetail(actionExecutionContext, resourceFilter);
- Map<String, String> extraParams = new HashMap<String, String>();;
+ Map<String, String> extraParams = new HashMap<String, String>();
String componentName = (null == resourceFilter.getComponentName()) ? null :
resourceFilter.getComponentName().toLowerCase();
@@ -1024,11 +1024,12 @@ public class AmbariCustomCommandExecutionHelper {
*
* @param actionExecContext the context
* @param cluster the cluster for the command
+ * @param stackId the effective stack id to use.
*
* @return a wrapper of the imporant JSON structures to add to a stage
*/
public ExecuteCommandJson getCommandJson(ActionExecutionContext actionExecContext,
- Cluster cluster) throws AmbariException {
+ Cluster cluster, StackId stackId) throws AmbariException {
Map<String, String> commandParamsStage = StageUtils.getCommandParamsStage(actionExecContext);
Map<String, String> hostParamsStage = new HashMap<String, String>();
@@ -1038,8 +1039,8 @@ public class AmbariCustomCommandExecutionHelper {
if (null != cluster) {
clusterHostInfo = StageUtils.getClusterHostInfo(
cluster);
- hostParamsStage = createDefaultHostParams(cluster);
- StackId stackId = cluster.getDesiredStackVersion();
+ // Important, because this runs during Stack Uprade, it needs to use the effective Stack Id.
+ hostParamsStage = createDefaultHostParams(cluster, stackId);
String componentName = null;
String serviceName = null;
if (actionExecContext.getOperationLevel() != null) {
@@ -1070,6 +1071,10 @@ public class AmbariCustomCommandExecutionHelper {
Map<String, String> createDefaultHostParams(Cluster cluster) {
StackId stackId = cluster.getDesiredStackVersion();
+ return createDefaultHostParams(cluster, stackId);
+ }
+
+ Map<String, String> createDefaultHostParams(Cluster cluster, StackId stackId) {
TreeMap<String, String> hostLevelParams = new TreeMap<String, String>();
hostLevelParams.put(JDK_LOCATION, managementController.getJdkResourceUrl());
hostLevelParams.put(JAVA_HOME, managementController.getJavaHome());
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index aa51d4e..d2203fc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -3336,7 +3336,11 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
actionManager,
actionRequest);
- ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, cluster);
+ StackId stackId = null;
+ if (null != cluster) {
+ stackId = cluster.getDesiredStackVersion();
+ }
+ ExecuteCommandJson jsons = customCommandExecutionHelper.getCommandJson(actionExecContext, cluster, stackId);
String commandParamsForStage = jsons.getCommandParamsForStage();
// Ensure that the specified requestContext (if any) is set as the request context
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
index f8c5316..b8dda3a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrereqCheckRequest.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.apache.ambari.server.checks.CheckDescription;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.stack.PrereqCheckStatus;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
* Represents a prerequisite check request.
@@ -33,17 +34,34 @@ public class PrereqCheckRequest {
private StackId m_sourceStackId;
private StackId m_targetStackId;
+ private UpgradeType m_upgradeType;
+
private Map<CheckDescription, PrereqCheckStatus> m_results =
new HashMap<CheckDescription, PrereqCheckStatus>();
- public PrereqCheckRequest(String clusterName) {
+
+ public PrereqCheckRequest(String clusterName, UpgradeType upgradeType) {
m_clusterName = clusterName;
+ m_upgradeType = upgradeType;
+ }
+
+ /**
+ * Construct a request to performs checks before an Upgrade.
+ * The default type is Rolling.
+ * @param clusterName
+ */
+ public PrereqCheckRequest(String clusterName) {
+ this(clusterName, UpgradeType.ROLLING);
}
public String getClusterName() {
return m_clusterName;
}
+ public UpgradeType getUpgradeType() {
+ return m_upgradeType;
+ }
+
public String getRepositoryVersion() {
return m_repositoryVersion;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProvider.java
----------------------------------------------------------------------
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 7030d23..e8a089d 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
@@ -620,10 +620,10 @@ public class ClusterStackVersionResourceProvider extends AbstractControllerResou
}
} catch (AmbariException e) {
e.printStackTrace();
- throw new SystemException("Can not perform request. " + e.getMessage(), e);
+ throw new SystemException("Cannot perform request. " + e.getMessage(), e);
} catch (InterruptedException e) {
e.printStackTrace();
- throw new SystemException("Can not perform request. " + e.getMessage(), e);
+ throw new SystemException("Cannot perform request. " + e.getMessage(), e);
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
index 6344aa2..2a1092b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java
@@ -61,7 +61,6 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
public static final String REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID = "CompatibleRepositoryVersions/stack_version";
public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = "CompatibleRepositoryVersions/repository_version";
public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID = "CompatibleRepositoryVersions/display_name";
- public static final String REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID = "CompatibleRepositoryVersions/upgrade_pack";
public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID = new OperatingSystemResourceDefinition().getPluralName();
public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID = new RepositoryResourceDefinition().getPluralName();
@@ -73,7 +72,6 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
- REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID,
SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID);
static Map<Type, String> keyPropertyIds = new HashMap<Type, String>() {
@@ -151,7 +149,6 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc
setResourceProperty(resource, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, entity.getStackName(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, entity.getStackVersion(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, entity.getDisplayName(), requestedIds);
- setResourceProperty(resource, REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID, entity.getUpgradePackage(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), requestedIds);
resources.add(resource);
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
index ce58e1e..93093d2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PreUpgradeCheckResourceProvider.java
@@ -20,30 +20,40 @@ package org.apache.ambari.server.controller.internal;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.StaticallyInject;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.checks.AbstractCheckDescriptor;
import org.apache.ambari.server.checks.UpgradeCheckRegistry;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.PrereqCheckRequest;
+import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
import org.apache.ambari.server.controller.spi.NoSuchResourceException;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Request;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.Resource.Type;
+import org.apache.ambari.server.controller.spi.SystemException;
+import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.state.CheckHelper;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.UpgradeHelper;
import org.apache.ambari.server.state.stack.PrerequisiteCheck;
import com.google.common.collect.Sets;
import com.google.inject.Inject;
import com.google.inject.Provider;
+import org.apache.ambari.server.state.stack.UpgradePack;
+import org.apache.ambari.server.state.stack.upgrade.Direction;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
/**
* Resource provider for pre-upgrade checks.
@@ -61,6 +71,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
public static final String UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "failed_detail");
public static final String UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "check_type");
public static final String UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "cluster_name");
+ public static final String UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "upgrade_type");
public static final String UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("UpgradeChecks", "repository_version");
@Inject
@@ -72,6 +83,9 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
@Inject
private static UpgradeCheckRegistry upgradeCheckRegistry;
+ @Inject
+ private static Provider<UpgradeHelper> upgradeHelper;
+
private static Set<String> pkPropertyIds = Collections.singleton(UPGRADE_CHECK_ID_PROPERTY_ID);
public static Set<String> propertyIds = Sets.newHashSet(
@@ -83,6 +97,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID,
UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID,
UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID,
+ UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID,
UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID);
@@ -107,7 +122,8 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
}
@Override
- public Set<Resource> getResources(Request request, Predicate predicate) throws NoSuchResourceException {
+ public Set<Resource> getResources(Request request, Predicate predicate) throws SystemException, UnsupportedPropertyException,
+ NoSuchResourceException, NoSuchParentResourceException {
final Set<Resource> resources = new HashSet<Resource>();
final Set<String> requestedIds = getRequestPropertyIds(request, predicate);
@@ -115,6 +131,9 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
for (Map<String, Object> propertyMap: propertyMaps) {
final String clusterName = propertyMap.get(UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID).toString();
+ // TODO AMBARI-12698, uncomment once the UI starts passing the property.
+ // final UpgradeType upgradeType = (UpgradeType) propertyMap.get(UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID);
+ final UpgradeType upgradeType = UpgradeType.NON_ROLLING;
final Cluster cluster;
try {
@@ -124,20 +143,40 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
}
String stackName = cluster.getCurrentStackVersion().getStackName();
+ String sourceStackVersion = cluster.getCurrentStackVersion().getStackVersion();
- final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(clusterName);
+ final PrereqCheckRequest upgradeCheckRequest = new PrereqCheckRequest(clusterName, upgradeType);
upgradeCheckRequest.setSourceStackId(cluster.getCurrentStackVersion());
if (propertyMap.containsKey(UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID)) {
String repositoryVersionId = propertyMap.get(UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID).toString();
RepositoryVersionEntity repositoryVersionEntity = repositoryVersionDAO.findByStackNameAndVersion(stackName, repositoryVersionId);
-
// set some required properties on the check request
upgradeCheckRequest.setRepositoryVersion(repositoryVersionId);
upgradeCheckRequest.setTargetStackId(repositoryVersionEntity.getStackId());
}
- for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeCheckRegistry.getUpgradeChecks())) {
+ //ambariMetaInfo.getStack(stackName, cluster.getCurrentStackVersion().getStackVersion()).getUpgradePacks()
+ // TODO AMBARI-12698, filter the upgrade checks to run based on the stack and upgrade type, or the upgrade pack.
+ UpgradePack upgradePack = null;
+ try{
+ // Hint: PreChecks currently executing only before UPGRADE direction
+ upgradePack = upgradeHelper.get().suggestUpgradePack(clusterName, sourceStackVersion,
+ upgradeCheckRequest.getRepositoryVersion(), Direction.UPGRADE, upgradeType);
+ } catch (AmbariException e) {
+ throw new SystemException(e.getMessage(), e);
+ }
+
+ if (upgradePack == null) {
+ throw new SystemException(String.format("Upgrade pack not found for the target repository version %s",
+ upgradeCheckRequest.getRepositoryVersion()));
+ }
+
+ // ToDo: properly handle exceptions, i.e. create fake check with error description
+
+ List<AbstractCheckDescriptor> upgradeChecksToRun = upgradeCheckRegistry.getFilteredUpgradeChecks(upgradePack);
+
+ for (PrerequisiteCheck prerequisiteCheck : checkHelper.performChecks(upgradeCheckRequest, upgradeChecksToRun)) {
final Resource resource = new ResourceImpl(Resource.Type.PreUpgradeCheck);
setResourceProperty(resource, UPGRADE_CHECK_ID_PROPERTY_ID, prerequisiteCheck.getId(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CHECK_PROPERTY_ID, prerequisiteCheck.getDescription(), requestedIds);
@@ -147,6 +186,7 @@ public class PreUpgradeCheckResourceProvider extends ReadOnlyResourceProvider {
setResourceProperty(resource, UPGRADE_CHECK_FAILED_DETAIL_PROPERTY_ID,prerequisiteCheck.getFailedDetail(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CHECK_TYPE_PROPERTY_ID, prerequisiteCheck.getType(), requestedIds);
setResourceProperty(resource, UPGRADE_CHECK_CLUSTER_NAME_PROPERTY_ID, prerequisiteCheck.getClusterName(), requestedIds);
+ setResourceProperty(resource, UPGRADE_CHECK_UPGRADE_TYPE_PROPERTY_ID, upgradeType, requestedIds);
if (upgradeCheckRequest.getRepositoryVersion() != null) {
setResourceProperty(resource, UPGRADE_CHECK_REPOSITORY_VERSION_PROPERTY_ID, upgradeCheckRequest.getRepositoryVersion(), requestedIds);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/ff8a56af/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
index f1fa3bf..60210c3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
@@ -19,12 +19,14 @@ package org.apache.ambari.server.controller.internal;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.google.inject.Provider;
import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.ObjectNotFoundException;
import org.apache.ambari.server.api.resources.OperatingSystemResourceDefinition;
@@ -49,10 +51,13 @@ import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
import org.apache.ambari.server.orm.entities.RepositoryEntity;
import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.OperatingSystemInfo;
import org.apache.ambari.server.state.RepositoryVersionState;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
@@ -73,7 +78,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
public static final String REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "stack_version");
public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "repository_version");
public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "display_name");
- public static final String REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID = PropertyHelper.getPropertyId("RepositoryVersions", "upgrade_pack");
public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID = new OperatingSystemResourceDefinition().getPluralName();
public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID = new RepositoryResourceDefinition().getPluralName();
@@ -92,7 +96,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
add(REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID);
add(REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID);
add(REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID);
- add(REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID);
add(SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID);
}
};
@@ -121,6 +124,9 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
@Inject
private RepositoryVersionHelper repositoryVersionHelper;
+ @Inject
+ private Provider<Clusters> clusters;
+
/**
* Data access object used for lookup up stacks.
*/
@@ -148,13 +154,13 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
@Override
public Void invoke() throws AmbariException {
final String[] requiredProperties = {
- REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
- SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID,
- REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
- REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
- REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID
+ REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
+ SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID,
+ REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
+ REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
+ REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID
};
- for (String propertyName: requiredProperties) {
+ for (String propertyName : requiredProperties) {
if (properties.get(propertyName) == null) {
throw new AmbariException("Property " + propertyName + " should be provided");
}
@@ -214,7 +220,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
setResourceProperty(resource, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, entity.getStackName(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, entity.getStackVersion(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, entity.getDisplayName(), requestedIds);
- setResourceProperty(resource, REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID, entity.getUpgradePackage(), requestedIds);
setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), requestedIds);
resources.add(resource);
@@ -243,22 +248,18 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
throw new ObjectNotFoundException("There is no repository version with id " + id);
}
- if (StringUtils.isNotBlank(ObjectUtils.toString(propertyMap.get(REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID)))) {
- StackEntity stackEntity = entity.getStack();
- String stackName = stackEntity.getStackName();
- String stackVersion = stackEntity.getStackVersion();
+ // Prevent changing repo version if there's already a cluster version that has performed some meaningful action on it.
+ StackEntity stackEntity = entity.getStack();
+ String stackName = stackEntity.getStackName();
+ String stackVersion = stackEntity.getStackVersion();
- final List<ClusterVersionEntity> clusterVersionEntities = clusterVersionDAO.findByStackAndVersion(
- stackName, stackVersion, entity.getVersion());
+ final List<ClusterVersionEntity> clusterVersionEntities = clusterVersionDAO.findByStackAndVersion(
+ stackName, stackVersion, entity.getVersion());
- if (!clusterVersionEntities.isEmpty()) {
- final ClusterVersionEntity firstClusterVersion = clusterVersionEntities.get(0);
- throw new AmbariException("Upgrade pack can't be changed for repository version which is " +
- firstClusterVersion.getState().name() + " on cluster " + firstClusterVersion.getClusterEntity().getClusterName());
- }
-
- final String upgradePackage = propertyMap.get(REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID).toString();
- entity.setUpgradePackage(upgradePackage);
+ if (!clusterVersionEntities.isEmpty()) {
+ final ClusterVersionEntity firstClusterVersion = clusterVersionEntities.get(0);
+ throw new AmbariException("Upgrade pack can't be changed for repository version which has a state of " +
+ firstClusterVersion.getState().name() + " on cluster " + firstClusterVersion.getClusterEntity().getClusterName());
}
if (StringUtils.isNotBlank(ObjectUtils.toString(propertyMap.get(SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID)))) {
@@ -348,14 +349,13 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
*/
protected void validateRepositoryVersion(RepositoryVersionEntity repositoryVersion) throws AmbariException {
final StackId requiredStack = new StackId(repositoryVersion.getStack());
- final String stackName = requiredStack.getStackName();
- final String stackMajorVersion = requiredStack.getStackVersion();
- final String stackFullName = requiredStack.getStackId();
-
- // check that stack exists
- final StackInfo stackInfo = ambariMetaInfo.getStack(stackName, stackMajorVersion);
- if (stackInfo.getUpgradePacks() == null) {
- throw new AmbariException("Stack " + stackFullName + " doesn't have upgrade packages");
+
+ final String requiredStackName = requiredStack.getStackName();
+ final String requiredStackVersion = requiredStack.getStackVersion();
+ final String requiredStackId = requiredStack.getStackId();
+
+ if (!upgradePackExists(repositoryVersion.getVersion())) {
+ throw new AmbariException("Stack " + requiredStackId + " doesn't have upgrade packages");
}
// List of all repo urls that are already added at stack
@@ -374,7 +374,7 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
// check that repositories contain only supported operating systems
final Set<String> osSupported = new HashSet<String>();
- for (OperatingSystemInfo osInfo: ambariMetaInfo.getOperatingSystems(stackName, stackMajorVersion)) {
+ for (OperatingSystemInfo osInfo: ambariMetaInfo.getOperatingSystems(requiredStackName, requiredStackVersion)) {
osSupported.add(osInfo.getOsType());
}
final Set<String> osRepositoryVersion = new HashSet<String>();
@@ -394,7 +394,7 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
}
for (String os: osRepositoryVersion) {
if (!osSupported.contains(os)) {
- throw new AmbariException("Operating system type " + os + " is not supported by stack " + stackFullName);
+ throw new AmbariException("Operating system type " + os + " is not supported by stack " + requiredStackId);
}
}
@@ -405,6 +405,35 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
}
/**
+ * Check for required upgrade pack across all stack definitions
+ * @param checkVersion version to check (e.g. 2.2.3.0-1111)
+ * @return existence flag
+ */
+ private boolean upgradePackExists(String checkVersion) throws AmbariException{
+ Collection<StackInfo> stacks = new ArrayList<StackInfo>();
+
+ // Search results only in the installed stacks
+ for (Cluster cluster:clusters.get().getClusters().values()){
+ stacks.add(ambariMetaInfo.getStack(cluster.getCurrentStackVersion().getStackName(),
+ cluster.getCurrentStackVersion().getStackVersion()));
+ }
+
+ for (StackInfo si: stacks){
+ Map<String, UpgradePack> upgradePacks = si.getUpgradePacks();
+ if (upgradePacks!=null) {
+ for (UpgradePack upgradePack: upgradePacks.values()){
+ if (upgradePack.canBeApplied(checkVersion)) {
+ // If we found at least one match, the rest could be skipped
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+
+ /**
* Transforms map of json properties to repository version entity.
*
* @param properties json map
@@ -430,7 +459,6 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
throw new AmbariException("Json structure for operating systems is incorrect", ex);
}
entity.setOperatingSystems(operatingSystemsJson);
- entity.setUpgradePackage(repositoryVersionHelper.getUpgradePackageName(stackName, stackVersion, entity.getVersion()));
return entity;
}