You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2017/04/06 09:33:52 UTC
[31/41] ambari git commit: AMBARI-20592 ServicePresences check should
also check for services dropped from a release (dili)
AMBARI-20592 ServicePresences check should also check for services dropped from a release (dili)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/45d8baf1
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/45d8baf1
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/45d8baf1
Branch: refs/heads/branch-3.0-perf
Commit: 45d8baf1ab64c42bba012fef95a74e64063e78f6
Parents: 01e0c69
Author: Di Li <di...@apache.org>
Authored: Tue Apr 4 13:58:58 2017 -0400
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Thu Apr 6 12:32:56 2017 +0300
----------------------------------------------------------------------
.../ambari/server/checks/CheckDescription.java | 5 +-
.../server/checks/ServicePresenceCheck.java | 52 +++++++++++++++++---
.../server/checks/ServicePresenceCheckTest.java | 41 ++++++++++++---
3 files changed, 83 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/45d8baf1/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
index 71c5857..e17185f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/CheckDescription.java
@@ -280,9 +280,12 @@ public class CheckDescription {
"This service does not support upgrades and must be removed before the upgrade can continue. " +
"After upgrading, %s can be reinstalled")
.put(ServicePresenceCheck.KEY_SERVICE_REMOVED,
+ "The %s service is currently installed on the cluster. " +
+ "This service is removed from the new release and must be removed before the upgrade can continue.")
+ .put(ServicePresenceCheck.KEY_SERVICE_REPLACED,
"The %s service is currently installed on the cluster. " +
"This service is removed from the new release and must be removed before the upgrade can continue. " +
- "After upgrading, %s can be installed").build());
+ "After upgrading, %s can be installed as the replacement.").build());
public static CheckDescription RANGER_SERVICE_AUDIT_DB_CHECK = new CheckDescription("RANGER_SERVICE_AUDIT_DB_CHECK",
PrereqCheckType.SERVICE,
http://git-wip-us.apache.org/repos/asf/ambari/blob/45d8baf1/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
index ed38882..5ff1f0b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/ServicePresenceCheck.java
@@ -46,7 +46,9 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
private static final Logger LOG = LoggerFactory.getLogger(ServicePresenceCheck.class);
+ static final String KEY_SERVICE_REPLACED = "service_replaced";
static final String KEY_SERVICE_REMOVED = "service_removed";
+
/*
* List of services that do not support upgrade
* services must be removed before the stack upgrade
@@ -59,6 +61,11 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
static final String REMOVED_SERVICES_PROPERTY_NAME = "removed-service-names";
/*
+ * List of services replaced by other services in the new release
+ * */
+ static final String REPLACED_SERVICES_PROPERTY_NAME = "replaced-service-names";
+
+ /*
* Such as Spark to Spark2
*/
static final String NEW_SERVICES_PROPERTY_NAME = "new-service-names";
@@ -73,7 +80,9 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
Set<String> installedServices = cluster.getServices().keySet();
List<String> noUpgradeSupportServices = getNoUpgradeSupportServices(request);
- Map<String, String> removedServices = getRemovedServices(request);
+ Map<String, String> replacedServices = getReplacedServices(request);
+ List<String> removedServices = getRemovedServices(request);
+
List<String> failReasons = new ArrayList<>();
String reason = getFailReason(prerequisiteCheck, request);
@@ -85,8 +94,8 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
}
}
- reason = getFailReason(KEY_SERVICE_REMOVED, prerequisiteCheck, request);
- for (Map.Entry<String, String> entry : removedServices.entrySet()) {
+ reason = getFailReason(KEY_SERVICE_REPLACED, prerequisiteCheck, request);
+ for (Map.Entry<String, String> entry : replacedServices.entrySet()) {
String removedService = entry.getKey();
if(installedServices.contains(removedService.toUpperCase())){
prerequisiteCheck.getFailedOn().add(removedService);
@@ -96,6 +105,15 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
}
}
+ reason = getFailReason(KEY_SERVICE_REMOVED, prerequisiteCheck, request);
+ for(String service: removedServices){
+ if (installedServices.contains(service.toUpperCase())){
+ prerequisiteCheck.getFailedOn().add(service);
+ String msg = String.format(reason, service);
+ failReasons.add(msg);
+ }
+ }
+
if(!failReasons.isEmpty()){
prerequisiteCheck.setStatus(PrereqCheckStatus.FAIL);
prerequisiteCheck.setFailReason(StringUtils.join(failReasons, '\n'));
@@ -138,28 +156,46 @@ public class ServicePresenceCheck extends AbstractCheckDescriptor{
}
/**
+ + * @return service names
+ + * */
+ private List<String> getRemovedServices(PrereqCheckRequest request){
+ List<String> result = new ArrayList<String>();
+ String value = getPropertyValue(request, REMOVED_SERVICES_PROPERTY_NAME);
+ if (null != value){
+ String[] services = value.split(",");
+ for(String service: services){
+ service = service.trim();
+ if (!service.isEmpty()){
+ result.add(service);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
* @return service names and new service names map
* */
- private Map<String, String> getRemovedServices(PrereqCheckRequest request) throws AmbariException{
+ private Map<String, String> getReplacedServices(PrereqCheckRequest request) throws AmbariException{
Map<String, String> result = new LinkedHashMap<>();
- String value = getPropertyValue(request, REMOVED_SERVICES_PROPERTY_NAME);
+ String value = getPropertyValue(request, REPLACED_SERVICES_PROPERTY_NAME);
String newValue = getPropertyValue(request, NEW_SERVICES_PROPERTY_NAME);
if(value == null && newValue == null){
return result; //no need to check removed services as they are not specified in the upgrade xml file.
} else {
if (value == null || newValue == null){
- throw new AmbariException(String.format("Both %s and %s list must be specified in the upgrade XML file.", REMOVED_SERVICES_PROPERTY_NAME, NEW_SERVICES_PROPERTY_NAME));
+ throw new AmbariException(String.format("Both %s and %s list must be specified in the upgrade XML file.", REPLACED_SERVICES_PROPERTY_NAME, NEW_SERVICES_PROPERTY_NAME));
} else {
List<String> oldServices = Arrays.asList(value.split(","));
List<String> newServices = Arrays.asList(newValue.split(","));
if (oldServices.size() != newServices.size()){
- throw new AmbariException(String.format("%s must have the same number of services as the %s list.", NEW_SERVICES_PROPERTY_NAME, REMOVED_SERVICES_PROPERTY_NAME));
+ throw new AmbariException(String.format("%s must have the same number of services as the %s list.", NEW_SERVICES_PROPERTY_NAME, REPLACED_SERVICES_PROPERTY_NAME));
} else {
for (int i = 0; i < oldServices.size(); i++){
String oldService = oldServices.get(i).trim();
String newService = newServices.get(i).trim();
if (oldService.isEmpty() || newService.isEmpty()) {
- throw new AmbariException(String.format("Make sure both %s and %s list only contain comma separated list of services.", NEW_SERVICES_PROPERTY_NAME, REMOVED_SERVICES_PROPERTY_NAME));
+ throw new AmbariException(String.format("Make sure both %s and %s list only contain comma separated list of services.", NEW_SERVICES_PROPERTY_NAME, REPLACED_SERVICES_PROPERTY_NAME));
} else {
result.put(oldService, newService);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/45d8baf1/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
index d89f0e5..ed2fcb9 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/checks/ServicePresenceCheckTest.java
@@ -64,7 +64,8 @@ public class ServicePresenceCheckTest {
Map<String, String> checkProperties = new HashMap<>();
checkProperties.put(ServicePresenceCheck.NO_UPGRADE_SUPPORT_SERVICES_PROPERTY_NAME,"MyServiceOne, MyServiceTwo");
- checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"OldServiceOne, OldServiceTwo");
+ checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"RemovedServiceOne, RemovedServiceTwo");
+ checkProperties.put(ServicePresenceCheck.REPLACED_SERVICES_PROPERTY_NAME,"OldServiceOne, OldServiceTwo");
checkProperties.put(ServicePresenceCheck.NEW_SERVICES_PROPERTY_NAME,"NewServiceOne, NewServiceTwo");
PrerequisiteCheckConfig prerequisiteCheckConfig = Mockito.mock(PrerequisiteCheckConfig.class);
@@ -105,7 +106,7 @@ public class ServicePresenceCheckTest {
}
@Test
- public void testPerformHasRemovedServices() throws Exception {
+ public void testPerformHasReplacedServices() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
Mockito.when(cluster.getClusterId()).thenReturn(1L);
Mockito.when(m_clusters.getCluster("cluster")).thenReturn(cluster);
@@ -116,7 +117,7 @@ public class ServicePresenceCheckTest {
Mockito.when(cluster.getServices()).thenReturn(services);
Map<String, String> checkProperties = new HashMap<>();
- checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"Atlas, OldService");
+ checkProperties.put(ServicePresenceCheck.REPLACED_SERVICES_PROPERTY_NAME,"Atlas, OldService");
checkProperties.put(ServicePresenceCheck.NEW_SERVICES_PROPERTY_NAME,"Atlas2, NewService");
PrerequisiteCheckConfig prerequisiteCheckConfig = Mockito.mock(PrerequisiteCheckConfig.class);
@@ -132,6 +133,32 @@ public class ServicePresenceCheckTest {
}
@Test
+ public void testPerformHasRemovedServices() throws Exception {
+ final Cluster cluster = Mockito.mock(Cluster.class);
+ Mockito.when(cluster.getClusterId()).thenReturn(1L);
+ Mockito.when(m_clusters.getCluster("cluster")).thenReturn(cluster);
+
+ Map<String, Service> services = new HashMap<String, Service>();
+ services.put("ATLAS", Mockito.mock(Service.class));
+ services.put("OLDSERVICE", Mockito.mock(Service.class));
+ Mockito.when(cluster.getServices()).thenReturn(services);
+
+ Map<String, String> checkProperties = new HashMap<String, String>();
+ checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"OldService");
+
+ PrerequisiteCheckConfig prerequisiteCheckConfig = Mockito.mock(PrerequisiteCheckConfig.class);
+ Mockito.when(prerequisiteCheckConfig.getCheckProperties(
+ m_check.getClass().getName())).thenReturn(checkProperties);
+
+ PrerequisiteCheck check = new PrerequisiteCheck(null, null);
+ PrereqCheckRequest request = new PrereqCheckRequest("cluster");
+ request.setPrerequisiteCheckConfig(prerequisiteCheckConfig);
+
+ m_check.perform(check, request);
+ Assert.assertEquals(PrereqCheckStatus.FAIL, check.getStatus());
+ }
+
+ @Test
public void testPerformMixOne() throws Exception {
final Cluster cluster = Mockito.mock(Cluster.class);
Mockito.when(cluster.getClusterId()).thenReturn(1L);
@@ -139,12 +166,14 @@ public class ServicePresenceCheckTest {
Map<String, Service> services = new HashMap<>();
services.put("ATLAS", Mockito.mock(Service.class));
+ services.put("REMOVEDSERVICE", Mockito.mock(Service.class));
Mockito.when(cluster.getServices()).thenReturn(services);
Map<String, String> checkProperties = new HashMap<>();
checkProperties.put(ServicePresenceCheck.NO_UPGRADE_SUPPORT_SERVICES_PROPERTY_NAME,"MyServiceOne, MyServiceTwo");
- checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"Atlas, OldService");
+ checkProperties.put(ServicePresenceCheck.REPLACED_SERVICES_PROPERTY_NAME,"Atlas, OldService");
checkProperties.put(ServicePresenceCheck.NEW_SERVICES_PROPERTY_NAME,"Atlas2, NewService");
+ checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"RemovedService");
PrerequisiteCheckConfig prerequisiteCheckConfig = Mockito.mock(PrerequisiteCheckConfig.class);
Mockito.when(prerequisiteCheckConfig.getCheckProperties(
@@ -170,7 +199,7 @@ public class ServicePresenceCheckTest {
Map<String, String> checkProperties = new HashMap<>();
checkProperties.put(ServicePresenceCheck.NO_UPGRADE_SUPPORT_SERVICES_PROPERTY_NAME,"Atlas, MyService");
- checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"OldService");
+ checkProperties.put(ServicePresenceCheck.REPLACED_SERVICES_PROPERTY_NAME,"OldService");
checkProperties.put(ServicePresenceCheck.NEW_SERVICES_PROPERTY_NAME,"NewService");
PrerequisiteCheckConfig prerequisiteCheckConfig = Mockito.mock(PrerequisiteCheckConfig.class);
@@ -200,7 +229,7 @@ public class ServicePresenceCheckTest {
Map<String, String> checkProperties = new HashMap<>();
checkProperties.put(ServicePresenceCheck.NO_UPGRADE_SUPPORT_SERVICES_PROPERTY_NAME,"Atlas, HDFS");
- checkProperties.put(ServicePresenceCheck.REMOVED_SERVICES_PROPERTY_NAME,"Storm, Ranger");
+ checkProperties.put(ServicePresenceCheck.REPLACED_SERVICES_PROPERTY_NAME,"Storm, Ranger");
checkProperties.put(ServicePresenceCheck.NEW_SERVICES_PROPERTY_NAME,"Storm2, Ranger2");
PrerequisiteCheckConfig prerequisiteCheckConfig = Mockito.mock(PrerequisiteCheckConfig.class);