Skip to content
Permalink
Browse files
Cleanup extraneous resources
This was not being called as doDestroyNode returns once node deleted.

Change based on similar code on gce compute provider
  • Loading branch information
duncangrant authored and andreaturli committed Aug 25, 2017
1 parent 515f9b5 commit 3a63007f4c6e55bd34ad16c32c71798e7fa4c35d
Showing 1 changed file with 27 additions and 0 deletions.
@@ -16,9 +16,12 @@
*/
package org.jclouds.azurecompute.arm.compute;

import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Sets.newHashSet;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
import static org.jclouds.compute.predicates.NodePredicates.all;

import java.util.Map;
import java.util.Map.Entry;
@@ -124,4 +127,28 @@ protected void cleanUpIncidentalResourcesOfDeadNodes(Set<? extends NodeMetadata>
cleanupResources.deleteResourceGroupIfEmpty(resourceGroup);
}
}

@Override
public void destroyNode(String id) {
// Azure ARM does not return TERMINATED nodes, so in practice no node will never reach the TERMINATED
// state, and the deleted nodes will never be returned.
// In order to be able to clean up the resources associated to the deleted nodes, we have to retrieve
// the details of the nodes before deleting them.
NodeMetadata nodeMetadataBeforeDelete = getNodeMetadata(id);
super.destroyNode(id);
//Node metadata is null after deletion but we still need to clean up incidental resources
cleanUpIncidentalResourcesOfDeadNodes(ImmutableSet.of(nodeMetadataBeforeDelete));
}

@Override
public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<? super NodeMetadata> filter) {
// Azure ARM does not return TERMINATED nodes, so in practice no node will never reach the TERMINATED
// state, and the deleted nodes will never be returned.
// In order to be able to clean up the resources associated to the deleted nodes, we have to retrieve
// the details of the nodes before deleting them.
Set<? extends NodeMetadata> nodes = newHashSet(filter(listNodesDetailsMatching(all()), filter));
super.destroyNodesMatching(filter); // This returns an empty list (a list of null elements) in Azure ARM, as the api does not return deleted nodes
cleanUpIncidentalResourcesOfDeadNodes(nodes);
return nodes;
}
}

0 comments on commit 3a63007

Please sign in to comment.