You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2013/07/10 12:31:30 UTC

[1/2] git commit: JCLOUDS-171: Fixed NPE when destroying nodes in Abiquo

Updated Branches:
  refs/heads/master 726b1f3ee -> 9695b8757


JCLOUDS-171: Fixed NPE when destroying nodes in Abiquo

There was a race condition when destroying a node in Abiquo
using the ComputeService: jclouds performed the active wait
until the node was in state TERMINATED, and used the transformation
functions to convert an Abiquo VirtualMachine to a NodeMetadata. If the
node was effectively deleted during this transformation, a NPE
was raised. This is because there are a couple of API calls that are
executed in that transformation to retrieve all information required
to build the NodeMetadata.

To prevent this, the AbiquoComputeServiceAdapter will block until the
node has been actually deleted instead of delegating that to jclouds.
This way there is no need to run the transformation functions that had
the race condition.


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/commit/7eb9fb03
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/tree/7eb9fb03
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/diff/7eb9fb03

Branch: refs/heads/master
Commit: 7eb9fb0372c161ebffb0f3671b0c817c6da59c9d
Parents: 726b1f3
Author: Ignasi Barrera <ig...@gmail.com>
Authored: Mon Jul 8 10:31:35 2013 +0200
Committer: Ignasi Barrera <ig...@gmail.com>
Committed: Wed Jul 10 12:28:56 2013 +0200

----------------------------------------------------------------------
 .../abiquo/compute/strategy/AbiquoComputeServiceAdapter.java      | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/7eb9fb03/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java b/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
index 2853f75..bec572e 100644
--- a/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
+++ b/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
@@ -215,7 +215,10 @@ public class AbiquoComputeServiceAdapter
 
    @Override
    public void destroyNode(final String id) {
+      VirtualMachineMonitor monitor = monitoringService.getVirtualMachineMonitor();
       VirtualMachine vm = getNode(id);
+      vm.undeploy(true);
+      monitor.awaitCompletionUndeploy(vm);
       vm.delete();
    }
 


[2/2] git commit: Use ComputeService timeouts to avoid blocking forever

Posted by na...@apache.org.
Use ComputeService timeouts to avoid blocking forever


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/commit/9695b875
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/tree/9695b875
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/diff/9695b875

Branch: refs/heads/master
Commit: 9695b875742941082b4640b457acfb32bfed055a
Parents: 7eb9fb0
Author: Ignasi Barrera <ig...@gmail.com>
Authored: Tue Jul 9 00:04:03 2013 +0200
Committer: Ignasi Barrera <ig...@gmail.com>
Committed: Wed Jul 10 12:29:01 2013 +0200

----------------------------------------------------------------------
 .../strategy/AbiquoComputeServiceAdapter.java        | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs/blob/9695b875/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java b/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
index bec572e..b82bb9a 100644
--- a/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
+++ b/abiquo/src/main/java/org/jclouds/abiquo/compute/strategy/AbiquoComputeServiceAdapter.java
@@ -25,6 +25,7 @@ import static com.google.common.collect.Iterables.transform;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 import javax.annotation.Resource;
 import javax.inject.Named;
@@ -53,6 +54,7 @@ import org.jclouds.compute.domain.Hardware;
 import org.jclouds.compute.domain.Processor;
 import org.jclouds.compute.domain.Template;
 import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
 import org.jclouds.logging.Logger;
 import org.jclouds.rest.ApiContext;
 
@@ -89,17 +91,20 @@ public class AbiquoComputeServiceAdapter
 
    private final Supplier<Map<Integer, Datacenter>> regionMap;
 
+   private final Timeouts timeouts;
+
    @Inject
    public AbiquoComputeServiceAdapter(final ApiContext<AbiquoApi> context, final AdministrationService adminService,
          final CloudService cloudService, final MonitoringService monitoringService,
          final FindCompatibleVirtualDatacenters compatibleVirtualDatacenters,
-         @Memoized final Supplier<Map<Integer, Datacenter>> regionMap) {
+         @Memoized final Supplier<Map<Integer, Datacenter>> regionMap, Timeouts timeouts) {
       this.context = checkNotNull(context, "context");
       this.adminService = checkNotNull(adminService, "adminService");
       this.cloudService = checkNotNull(cloudService, "cloudService");
       this.monitoringService = checkNotNull(monitoringService, "monitoringService");
       this.compatibleVirtualDatacenters = checkNotNull(compatibleVirtualDatacenters, "compatibleVirtualDatacenters");
       this.regionMap = checkNotNull(regionMap, "regionMap");
+      this.timeouts = checkNotNull(timeouts, "timeouts");
    }
 
    @Override
@@ -218,7 +223,7 @@ public class AbiquoComputeServiceAdapter
       VirtualMachineMonitor monitor = monitoringService.getVirtualMachineMonitor();
       VirtualMachine vm = getNode(id);
       vm.undeploy(true);
-      monitor.awaitCompletionUndeploy(vm);
+      monitor.awaitCompletionUndeploy(timeouts.nodeTerminated, TimeUnit.MILLISECONDS, vm);
       vm.delete();
    }
 
@@ -227,7 +232,7 @@ public class AbiquoComputeServiceAdapter
       VirtualMachineMonitor monitor = monitoringService.getVirtualMachineMonitor();
       VirtualMachine vm = getNode(id);
       vm.reboot();
-      monitor.awaitState(VirtualMachineState.ON, vm);
+      monitor.awaitState(timeouts.nodeRunning, TimeUnit.MILLISECONDS, VirtualMachineState.ON, vm);
    }
 
    @Override
@@ -235,7 +240,7 @@ public class AbiquoComputeServiceAdapter
       VirtualMachineMonitor monitor = monitoringService.getVirtualMachineMonitor();
       VirtualMachine vm = getNode(id);
       vm.changeState(VirtualMachineState.ON);
-      monitor.awaitState(VirtualMachineState.ON, vm);
+      monitor.awaitState(timeouts.nodeRunning, TimeUnit.MILLISECONDS, VirtualMachineState.ON, vm);
    }
 
    @Override
@@ -243,7 +248,7 @@ public class AbiquoComputeServiceAdapter
       VirtualMachineMonitor monitor = monitoringService.getVirtualMachineMonitor();
       VirtualMachine vm = getNode(id);
       vm.changeState(VirtualMachineState.PAUSED);
-      monitor.awaitState(VirtualMachineState.PAUSED, vm);
+      monitor.awaitState(timeouts.nodeSuspended, TimeUnit.MILLISECONDS, VirtualMachineState.PAUSED, vm);
    }
 
    @Override