AMBARI-25449. Fix bulk delete api, response code 400 - Bulk DELETE API is broken (#3163) (praveenkjvs via dgrinenko)
diff --git a/ambari-admin/src/main/resources/ui/admin-web/bower.json b/ambari-admin/src/main/resources/ui/admin-web/bower.json
index 739eb3f..b814b9f 100644
--- a/ambari-admin/src/main/resources/ui/admin-web/bower.json
+++ b/ambari-admin/src/main/resources/ui/admin-web/bower.json
@@ -19,8 +19,5 @@
"chai": "1.8.0",
"mocha": "1.14.0",
"sinon": "1.10.3"
- },
- "resolutions": {
- "angular": "1.7.5"
}
-}
\ No newline at end of file
+}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
index f0314e1..f8b0a29 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/handlers/DeleteHandler.java
@@ -83,8 +83,10 @@
return null;
}
- if (requestStatusMetaData.getClass() != DeleteStatusMetaData.class) {
- throw new IllegalArgumentException("RequestStatusDetails is not of type DeleteStatusDetails");
+ if (!(requestStatusMetaData instanceof DeleteStatusMetaData)) {
+ throw new IllegalArgumentException(
+ String.format("Wrong status details class received - expecting: %s; actual: %s",
+ DeleteStatusMetaData.class, requestStatusMetaData.getClass()));
}
DeleteStatusMetaData statusDetails = (DeleteStatusMetaData) requestStatusMetaData;
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 cc82a2d..c6794f8 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
@@ -3605,12 +3605,13 @@
ServiceComponentHost componentHost = component.getServiceComponentHost(request.getHostname());
if (!componentHost.canBeRemoved()) {
- throw new AmbariException("Host Component cannot be removed"
+ throw new AmbariException("Current host component state prohibiting component removal."
+ ", clusterName=" + request.getClusterName()
+ ", serviceName=" + request.getServiceName()
+ ", componentName=" + request.getComponentName()
+ ", hostname=" + request.getHostname()
- + ", request=" + request);
+ + ", request=" + request
+ + ", state=" + componentHost.getState());
}
}
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DeleteHostComponentStatusMetaData.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DeleteHostComponentStatusMetaData.java
index 7237f5b..79bc26b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DeleteHostComponentStatusMetaData.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/DeleteHostComponentStatusMetaData.java
@@ -37,7 +37,7 @@
String clusterId, String version, State lastComponentState) {
removedHostComponents.add(new HostComponent(componentName, serviceName, hostId,
hostName, clusterId, version, lastComponentState));
- addDeletedKey(componentName + "/" + hostName);
+ addDeletedKey(hostName + "/" + componentName);
}
public Set<HostComponent> getRemovedHostComponents() {
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
index 3374521..4cfa00d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceComponentImpl.java
@@ -558,14 +558,15 @@
ServiceComponentHost sch = getServiceComponentHost(hostname);
LOG.info("Deleting servicecomponenthost for cluster" + ", clusterName=" + getClusterName()
+ ", serviceName=" + getServiceName() + ", componentName=" + getName()
- + ", recoveryEnabled=" + isRecoveryEnabled() + ", hostname=" + sch.getHostName());
+ + ", recoveryEnabled=" + isRecoveryEnabled() + ", hostname=" + sch.getHostName() + ", state=" + sch.getState());
if (!sch.canBeRemoved()) {
- throw new AmbariException("Could not delete hostcomponent from cluster"
+ throw new AmbariException("Current host component state prohibiting component removal."
+ ", clusterName=" + getClusterName()
+ ", serviceName=" + getServiceName()
+ ", componentName=" + getName()
+ ", recoveryEnabled=" + isRecoveryEnabled()
- + ", hostname=" + sch.getHostName());
+ + ", hostname=" + sch.getHostName()
+ + ", state=" + sch.getState());
}
sch.delete(deleteMetaData);
hostComponents.remove(hostname);
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 92b32ef..f8b8f4a 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -7927,7 +7927,7 @@
Assert.fail("Expect failure while deleting.");
} catch (Exception ex) {
Assert.assertTrue(ex.getMessage().contains(
- "Host Component cannot be removed"));
+ "Current host component state prohibiting component removal"));
}
sc1.getServiceComponentHosts().values().iterator().next().setDesiredState(State.STARTED);