Repository: jclouds Updated Branches: refs/heads/2.0.x c2a4b8afd -> 7785379d8
[JCLOUDS-1332] destroyNode and destroyNodesMatchingPredicate different semantic - modify BaseComputeService to make the 2 operations more similar - remove overridden destroyNode and destroyNodesMatching from GoogleComputeEngineService Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/7785379d Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/7785379d Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/7785379d Branch: refs/heads/2.0.x Commit: 7785379d81cbea79fa6d5212d4e9c298866545ce Parents: c2a4b8a Author: Andrea Turli <[email protected]> Authored: Mon Aug 28 15:35:10 2017 +0200 Committer: Andrea Turli <[email protected]> Committed: Tue Sep 5 22:22:01 2017 +0200 ---------------------------------------------------------------------- .../compute/internal/BaseComputeService.java | 24 ++---- .../compute/GoogleComputeEngineService.java | 29 ------- .../GoogleComputeEngineServiceMockTest.java | 7 +- .../src/test/resources/logback-test.xml | 42 ++++++++++ .../src/test/resources/logback.xml | 83 -------------------- 5 files changed, 50 insertions(+), 135 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/7785379d/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java ---------------------------------------------------------------------- diff --git a/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java b/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java index 8dc5c51..b60592b 100644 --- a/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java +++ b/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java @@ -23,7 +23,6 @@ import static com.google.common.base.Throwables.propagate; import static com.google.common.collect.Iterables.filter; import static com.google.common.collect.Maps.newLinkedHashMap; import static com.google.common.collect.Sets.newLinkedHashSet; -import static java.util.concurrent.TimeUnit.MILLISECONDS; 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; @@ -32,7 +31,6 @@ import static org.jclouds.compute.predicates.NodePredicates.all; import static org.jclouds.compute.util.ComputeServiceUtils.formatStatus; import static org.jclouds.concurrent.FutureIterables.awaitCompletion; import static org.jclouds.concurrent.FutureIterables.transformParallel; -import static org.jclouds.util.Predicates2.retry; import java.util.Map; import java.util.NoSuchElementException; @@ -291,26 +289,14 @@ public class BaseComputeService implements ComputeService { protected NodeMetadata doDestroyNode(final String id) { checkNotNull(id, "id"); logger.debug(">> destroying node(%s)", id); - final AtomicReference<NodeMetadata> node = Atomics.newReference(); - Predicate<String> tester = retry(new Predicate<String>() { - public boolean apply(String input) { - try { - NodeMetadata md = destroyNodeStrategy.destroyNode(id); - if (md != null) - node.set(md); - return true; - } catch (IllegalStateException e) { - logger.warn("<< illegal state destroying node(%s)", id); - return false; - } - } - }, timeouts.nodeTerminated, 1000, MILLISECONDS); - - boolean successful = tester.apply(id) && (node.get() == null || nodeTerminated.apply(node)); + NodeMetadata nodeMetadata = destroyNodeStrategy.destroyNode(id); + if (nodeMetadata == null) return null; + final AtomicReference<NodeMetadata> node = Atomics.newReference(nodeMetadata); + boolean successful = node.get() == null || nodeTerminated.apply(node); if (successful) credentialStore.remove("node#" + id); logger.debug("<< destroyed node(%s) success(%s)", id, successful); - return node.get(); + return nodeMetadata; } protected void cleanUpIncidentalResourcesOfDeadNodes(Set<? extends NodeMetadata> deadNodes) { http://git-wip-us.apache.org/repos/asf/jclouds/blob/7785379d/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java index acf456a..3a05f4f 100644 --- a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java +++ b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineService.java @@ -16,12 +16,9 @@ */ package org.jclouds.googlecomputeengine.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 static org.jclouds.googlecloud.internal.ListPages.concat; import java.util.Map; @@ -69,7 +66,6 @@ import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.Atomics; import com.google.common.util.concurrent.ListeningExecutorService; @@ -125,31 +121,6 @@ public final class GoogleComputeEngineService extends BaseComputeService { } @Override - public void destroyNode(String id) { - // GCE 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 node = getNodeMetadata(id); - super.destroyNode(id); - cleanUpIncidentalResourcesOfDeadNodes(ImmutableSet.of(node)); - } - - @Override - public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<? super NodeMetadata> filter) { - // GCE 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 GCE, as the api does not return deleted nodes - cleanUpIncidentalResourcesOfDeadNodes(nodes); - return nodes; - } - - - - @Override protected synchronized void cleanUpIncidentalResourcesOfDeadNodes(Set<? extends NodeMetadata> deadNodes) { Set<String> orphanedGroups = findOrphanedGroups.apply(deadNodes); for (String orphanedGroup : orphanedGroups) { http://git-wip-us.apache.org/repos/asf/jclouds/blob/7785379d/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java index 279f09d..dbb3b62 100644 --- a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java +++ b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java @@ -25,8 +25,6 @@ import static org.testng.Assert.assertTrue; import java.io.IOException; import java.util.Set; -import com.google.common.collect.ImmutableSet; -import com.squareup.okhttp.mockwebserver.MockResponse; import org.jclouds.compute.ComputeService; import org.jclouds.compute.domain.ComputeMetadata; import org.jclouds.compute.domain.Hardware; @@ -39,6 +37,9 @@ import org.jclouds.googlecomputeengine.domain.Instance; import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiMockTest; import org.testng.annotations.Test; +import com.google.common.collect.ImmutableSet; +import com.squareup.okhttp.mockwebserver.MockResponse; + @Test(groups = "unit", testName = "GoogleComputeEngineServiceMockTest", singleThreaded = true) public class GoogleComputeEngineServiceMockTest extends BaseGoogleComputeEngineApiMockTest { @@ -76,7 +77,6 @@ public class GoogleComputeEngineServiceMockTest extends BaseGoogleComputeEngineA server.enqueue(jsonResponse("/disk_get_with_source_image.json")); server.enqueue(jsonResponse("/image_get_for_source_image.json")); server.enqueue(jsonResponse("/aggregated_machinetype_list.json")); // Why are we getting machineTypes to delete an instance? - server.enqueue(instanceWithNetworkAndStatus("test-delete-1", "default", RUNNING)); server.enqueue(jsonResponse("/operation.json")); // instance delete server.enqueue(jsonResponse("/zone_operation.json")); server.enqueue(response404()); // deleted instance no longer exists @@ -93,7 +93,6 @@ public class GoogleComputeEngineServiceMockTest extends BaseGoogleComputeEngineA assertSent(server, "GET", "/projects/party/zones/us-central1-a/disks/test"); assertSent(server, "GET", "/projects/debian-cloud/global/images/debian-7-wheezy-v20140718"); assertSent(server, "GET", "/projects/party/aggregated/machineTypes"); // Why are we getting machineTypes to delete an instance? - assertSent(server, "GET", "/jclouds/zones/us-central1-a/instances/test-delete-1"); assertSent(server, "DELETE", "/jclouds/zones/us-central1-a/instances/test-delete-1"); // instance delete assertSent(server, "GET", "/projects/party/zones/us-central1-a/operations/operation-1354084865060"); assertSent(server, "GET", "/projects/party/zones/us-central1-a/instances/test-delete-1"); // get instance http://git-wip-us.apache.org/repos/asf/jclouds/blob/7785379d/providers/google-compute-engine/src/test/resources/logback-test.xml ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/resources/logback-test.xml b/providers/google-compute-engine/src/test/resources/logback-test.xml new file mode 100644 index 0000000..cb55d49 --- /dev/null +++ b/providers/google-compute-engine/src/test/resources/logback-test.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<configuration scan="false"> + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds-wire.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/jclouds-compute.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <logger name="org.jclouds"> + <level value="DEBUG" /> + <appender-ref ref="FILE" /> + </logger> + <logger name="jclouds.compute"> + <level value="DEBUG" /> + <appender-ref ref="COMPUTEFILE" /> + </logger> + <logger name="jclouds.wire"> + <level value="DEBUG" /> + <appender-ref ref="WIREFILE" /> + </logger> + <logger name="jclouds.headers"> + <level value="DEBUG" /> + <appender-ref ref="WIREFILE" /> + </logger> + + <root> + <level value="INFO" /> + </root> +</configuration> http://git-wip-us.apache.org/repos/asf/jclouds/blob/7785379d/providers/google-compute-engine/src/test/resources/logback.xml ---------------------------------------------------------------------- diff --git a/providers/google-compute-engine/src/test/resources/logback.xml b/providers/google-compute-engine/src/test/resources/logback.xml deleted file mode 100644 index c83c449..0000000 --- a/providers/google-compute-engine/src/test/resources/logback.xml +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version="1.0"?> -<!-- - - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - ---> -<configuration scan="false"> - <appender name="FILE" class="ch.qos.logback.core.FileAppender"> - <file>target/test-data/jclouds.log</file> - - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - - <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender"> - <file>target/test-data/jclouds-wire.log</file> - - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - - <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender"> - <file>target/test-data/jclouds-compute.log</file> - - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - - <appender name="SSHFILE" class="ch.qos.logback.core.FileAppender"> - <file>target/test-data/jclouds-ssh.log</file> - - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - - <root> - <level value="warn" /> - </root> - - <logger name="org.jclouds"> - <level value="TRACE" /> - <appender-ref ref="FILE" /> - </logger> - - <logger name="jclouds.wire"> - <level value="TRACE" /> - <appender-ref ref="WIREFILE" /> - </logger> - - <logger name="jclouds.headers"> - <level value="TRACE" /> - <appender-ref ref="WIREFILE" /> - </logger> - - <logger name="jclouds.compute"> - <level value="TRACE" /> - <appender-ref ref="COMPUTEFILE" /> - </logger> - - <logger name="jclouds.ssh"> - <level value="TRACE" /> - <appender-ref ref="SSHFILE" /> - </logger> - -</configuration> -
