You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by aj...@apache.org on 2016/04/28 01:14:50 UTC
ambari git commit: AMBARI-16145. Add dryrun API for host delete (ajit)
Repository: ambari
Updated Branches:
refs/heads/trunk 80f1beaac -> 237a5d692
AMBARI-16145. Add dryrun API for host delete (ajit)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/237a5d69
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/237a5d69
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/237a5d69
Branch: refs/heads/trunk
Commit: 237a5d6926ddf841859695b4fcc469ab1cc04fcf
Parents: 80f1bea
Author: Ajit Kumar <aj...@apache.org>
Authored: Wed Apr 27 16:12:42 2016 -0700
Committer: Ajit Kumar <aj...@apache.org>
Committed: Wed Apr 27 16:12:42 2016 -0700
----------------------------------------------------------------------
.../api/resources/HostResourceDefinition.java | 10 +++-
.../internal/HostResourceProvider.java | 48 ++++++++++++--------
.../internal/HostResourceProviderTest.java | 2 +-
3 files changed, 39 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/237a5d69/ambari-server/src/main/java/org/apache/ambari/server/api/resources/HostResourceDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/HostResourceDefinition.java b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/HostResourceDefinition.java
index c9b0878..10828bb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/HostResourceDefinition.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/HostResourceDefinition.java
@@ -19,9 +19,12 @@
package org.apache.ambari.server.api.resources;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
+import org.apache.ambari.server.controller.spi.Request;
import org.apache.ambari.server.controller.spi.Resource;
/**
@@ -47,8 +50,13 @@ public class HostResourceDefinition extends BaseResourceDefinition {
}
@Override
+ public Collection<String> getDeleteDirectives() {
+ return Collections.singleton(Request.DIRECTIVE_DRY_RUN);
+ }
+
+ @Override
public Set<SubResourceDefinition> getSubResourceDefinitions() {
- Set<SubResourceDefinition> subs = new HashSet<SubResourceDefinition>();
+ Set<SubResourceDefinition> subs = new HashSet<>();
subs.add(new SubResourceDefinition(Resource.Type.HostComponent));
subs.add(new SubResourceDefinition(Resource.Type.Alert));
subs.add(new SubResourceDefinition(Resource.Type.HostStackVersion));
http://git-wip-us.apache.org/repos/asf/ambari/blob/237a5d69/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index 4dc47be..56ef28b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -330,7 +330,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
}
@Override
- protected RequestStatus deleteResourcesAuthorized(Request request, Predicate predicate)
+ protected RequestStatus deleteResourcesAuthorized(final Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
final Set<HostRequest> requests = new HashSet<>();
@@ -341,7 +341,7 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
DeleteStatusMetaData deleteStatusMetaData = modifyResources(new Command<DeleteStatusMetaData>() {
@Override
public DeleteStatusMetaData invoke() throws AmbariException {
- return deleteHosts(requests);
+ return deleteHosts(requests, request.isDryRunRequest());
}
});
@@ -827,13 +827,12 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
}
@Transactional
- protected DeleteStatusMetaData deleteHosts(Set<HostRequest> requests)
+ protected DeleteStatusMetaData deleteHosts(Set<HostRequest> requests, boolean dryRun)
throws AmbariException {
AmbariManagementController controller = getManagementController();
Clusters clusters = controller.getClusters();
DeleteStatusMetaData deleteStatusMetaData = new DeleteStatusMetaData();
-
List<HostRequest> okToRemove = new ArrayList<>();
for (HostRequest hostRequest : requests) {
@@ -850,22 +849,13 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
}
}
- for (HostRequest hostRequest : okToRemove) {
- // Assume the user also wants to delete it entirely, including all clusters.
- String hostname = hostRequest.getHostname();
- try {
- clusters.deleteHost(hostname);
- deleteStatusMetaData.addDeletedKey(hostname);
- } catch (Exception ex) {
- deleteStatusMetaData.addException(hostname, ex);
- }
- for (LogicalRequest logicalRequest: topologyManager.getRequests(Collections.<Long>emptyList())) {
- logicalRequest.removeHostRequestByHostName(hostname);
- }
-
- if (null != hostRequest.getClusterName()) {
- clusters.getCluster(hostRequest.getClusterName()).recalculateAllClusterVersionStates();
+ //If dry run, don't delete. just assume it can be successfully deleted.
+ if (dryRun) {
+ for (HostRequest request : okToRemove) {
+ deleteStatusMetaData.addDeletedKey(request.getHostname());
}
+ } else {
+ processDeleteHostRequests(okToRemove, clusters, deleteStatusMetaData);
}
//Do not break behavior for existing clients where delete request contains only 1 host.
@@ -887,6 +877,26 @@ public class HostResourceProvider extends AbstractControllerResourceProvider {
return deleteStatusMetaData;
}
+ private void processDeleteHostRequests(List<HostRequest> requests, Clusters clusters, DeleteStatusMetaData deleteStatusMetaData) throws AmbariException {
+ for (HostRequest hostRequest : requests) {
+ // Assume the user also wants to delete it entirely, including all clusters.
+ String hostname = hostRequest.getHostname();
+ try {
+ clusters.deleteHost(hostname);
+ deleteStatusMetaData.addDeletedKey(hostname);
+ } catch (Exception ex) {
+ deleteStatusMetaData.addException(hostname, ex);
+ }
+ for (LogicalRequest logicalRequest: topologyManager.getRequests(Collections.<Long>emptyList())) {
+ logicalRequest.removeHostRequestByHostName(hostname);
+ }
+
+ if (null != hostRequest.getClusterName()) {
+ clusters.getCluster(hostRequest.getClusterName()).recalculateAllClusterVersionStates();
+ }
+ }
+ }
+
private void validateHostInDeleteFriendlyState(HostRequest hostRequest, Clusters clusters ) throws AmbariException {
Set<String> clusterNamesForHost = new HashSet<>();
String hostName = hostRequest.getHostname();
http://git-wip-us.apache.org/repos/asf/ambari/blob/237a5d69/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index 1c91477..3a2fdb2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@ -1361,7 +1361,7 @@ public class HostResourceProviderTest extends EasyMockSupport {
HostResourceProvider provider = getHostProvider(controller);
HostResourceProvider.setTopologyManager(topologyManager);
- provider.deleteHosts(requests);
+ provider.deleteHosts(requests, false);
}
public static void updateHosts(AmbariManagementController controller, Set<HostRequest> requests)