diff --git a/atmos/pom.xml b/atmos/pom.xml
index 4cb7bc0d68..aec222e1a4 100644
--- a/atmos/pom.xml
+++ b/atmos/pom.xml
@@ -127,6 +127,14 @@
test.initializer
${test.initializer}
+
+ jclouds.blobstore.httpstream.url
+ ${jclouds.blobstore.httpstream.url}
+
+
+ jclouds.blobstore.httpstream.md5
+ ${jclouds.blobstore.httpstream.md5}
+
diff --git a/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java b/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java
index e547b780a2..c968259751 100644
--- a/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java
+++ b/aws/core/src/main/java/org/jclouds/aws/ec2/compute/EC2ComputeService.java
@@ -43,12 +43,13 @@ import org.jclouds.aws.ec2.domain.KeyPair;
import org.jclouds.aws.ec2.domain.PlacementGroup;
import org.jclouds.aws.ec2.domain.PlacementGroup.State;
import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.internal.BaseComputeService;
import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
import org.jclouds.compute.strategy.DestroyNodeStrategy;
import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
import org.jclouds.compute.strategy.ListNodesStrategy;
@@ -81,14 +82,14 @@ public class EC2ComputeService extends BaseComputeService {
DestroyNodeStrategy destroyNodeStrategy, Provider templateBuilderProvider,
Provider templateOptionsProvider,
@Named("NODE_RUNNING") Predicate nodeRunning,
- @Named("NODE_TERMINATED") Predicate nodeTerminated, ComputeUtils utils,
+ @Named("NODE_TERMINATED") Predicate nodeTerminated, ComputeUtils utils, Timeouts timeouts,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor, EC2Client ec2Client,
Map credentialsMap, @Named("SECURITY") Map securityGroupMap,
@Named("PLACEMENT") Map placementGroupMap,
@Named("DELETED") Predicate placementGroupDeleted) {
super(context, images, sizes, locations, listNodesStrategy, getNodeMetadataStrategy, runNodesAndAddToSetStrategy,
rebootNodeStrategy, destroyNodeStrategy, templateBuilderProvider, templateOptionsProvider, nodeRunning,
- nodeTerminated, utils, executor);
+ nodeTerminated, utils, timeouts, executor);
this.ec2Client = ec2Client;
this.credentialsMap = credentialsMap;
this.securityGroupMap = securityGroupMap;
diff --git a/aws/pom.xml b/aws/pom.xml
index aa5c5c3946..2b2e620caf 100644
--- a/aws/pom.xml
+++ b/aws/pom.xml
@@ -271,6 +271,14 @@
test.initializer
${test.initializer}
+
+ jclouds.blobstore.httpstream.url
+ ${jclouds.blobstore.httpstream.url}
+
+
+ jclouds.blobstore.httpstream.md5
+ ${jclouds.blobstore.httpstream.md5}
+
diff --git a/azure/pom.xml b/azure/pom.xml
index b27f4bd972..b276832bb8 100644
--- a/azure/pom.xml
+++ b/azure/pom.xml
@@ -140,6 +140,14 @@
test.initializer
${test.initializer}
+
+ jclouds.blobstore.httpstream.url
+ ${jclouds.blobstore.httpstream.url}
+
+
+ jclouds.blobstore.httpstream.md5
+ ${jclouds.blobstore.httpstream.md5}
+
diff --git a/azure/src/test/java/org/jclouds/azure/storage/blob/AzureBlobClientLiveTest.java b/azure/src/test/java/org/jclouds/azure/storage/blob/AzureBlobClientLiveTest.java
index 0886c05e1c..5124a7b789 100644
--- a/azure/src/test/java/org/jclouds/azure/storage/blob/AzureBlobClientLiveTest.java
+++ b/azure/src/test/java/org/jclouds/azure/storage/blob/AzureBlobClientLiveTest.java
@@ -73,7 +73,7 @@ public class AzureBlobClientLiveTest {
private String containerPrefix = System.getProperty("user.name") + "-azureblob";
private BlobStoreContext context;
- protected String provider = "azurequeue";
+ protected String provider = "azureblob";
protected String identity;
protected String credential;
protected String endpoint;
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
index be9e05e358..d7bd8911d8 100755
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java
@@ -127,7 +127,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
public Void apply(Blob from) {
try {
assertEquals(CryptoStreams.md5(from.getPayload()), oneHundredOneConstitutionsMD5);
- checkContentDispostion(from, expectedContentDisposition);
+ checkContentDisposition(from, expectedContentDisposition);
} catch (IOException e) {
Throwables.propagate(e);
}
@@ -156,16 +156,6 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
context.getBlobStore().putBlob(containerName, sourceObject);
}
- /**
- * Methods for checking Content-Disposition. In this way, in implementations that do not support
- * the new field, it is easy to override with empty, and allow the rest of the test to work.
- *
- * @param blob
- * @param expected
- */
- protected void checkContentDispostion(Blob blob, String expected) {
- assertEquals(blob.getPayload().getContentMetadata().getContentDisposition(), expected);
- }
@Test(groups = { "integration", "live" })
public void testGetIfModifiedSince() throws InterruptedException {
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 cc3562fe65..ec289f72df 100755
--- a/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java
+++ b/compute/src/main/java/org/jclouds/compute/internal/BaseComputeService.java
@@ -30,6 +30,8 @@ import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
import javax.annotation.Resource;
@@ -45,15 +47,16 @@ import org.jclouds.compute.RunNodesException;
import org.jclouds.compute.RunScriptOnNodesException;
import org.jclouds.compute.callables.RunScriptOnNode;
import org.jclouds.compute.domain.ComputeMetadata;
+import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.options.RunScriptOptions;
import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.compute.predicates.NodePredicates;
import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
import org.jclouds.compute.strategy.DestroyNodeStrategy;
import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
import org.jclouds.compute.strategy.ListNodesStrategy;
@@ -63,6 +66,7 @@ import org.jclouds.compute.util.ComputeUtils;
import org.jclouds.domain.Location;
import org.jclouds.io.Payload;
import org.jclouds.logging.Logger;
+import org.jclouds.predicates.RetryablePredicate;
import org.jclouds.ssh.ExecResponse;
import org.jclouds.ssh.SshClient;
@@ -100,6 +104,7 @@ public class BaseComputeService implements ComputeService {
protected final Predicate nodeRunning;
protected final Predicate nodeTerminated;
protected final ComputeUtils utils;
+ protected final Timeouts timeouts;
protected final ExecutorService executor;
@Inject
@@ -110,7 +115,7 @@ public class BaseComputeService implements ComputeService {
DestroyNodeStrategy destroyNodeStrategy, Provider templateBuilderProvider,
Provider templateOptionsProvider,
@Named("NODE_RUNNING") Predicate nodeRunning,
- @Named("NODE_TERMINATED") Predicate nodeTerminated, ComputeUtils utils,
+ @Named("NODE_TERMINATED") Predicate nodeTerminated, ComputeUtils utils, Timeouts timeouts,
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
this.context = checkNotNull(context, "context");
this.images = checkNotNull(images, "images");
@@ -126,6 +131,7 @@ public class BaseComputeService implements ComputeService {
this.nodeRunning = checkNotNull(nodeRunning, "nodeRunning");
this.nodeTerminated = checkNotNull(nodeTerminated, "nodeTerminated");
this.utils = checkNotNull(utils, "utils");
+ this.timeouts = checkNotNull(timeouts, "timeouts");
this.executor = checkNotNull(executor, "executor");
}
@@ -145,9 +151,9 @@ public class BaseComputeService implements ComputeService {
throws RunNodesException {
checkArgument(tag.indexOf('-') == -1, "tag cannot contain hyphens");
checkNotNull(template.getLocation(), "location");
- logger.debug(">> running %d node%s tag(%s) location(%s) image(%s) hardwareProfile(%s) options(%s)", count, count > 1 ? "s"
- : "", tag, template.getLocation().getId(), template.getImage().getId(), template.getHardware().getId(),
- template.getOptions());
+ logger.debug(">> running %d node%s tag(%s) location(%s) image(%s) hardwareProfile(%s) options(%s)", count,
+ count > 1 ? "s" : "", tag, template.getLocation().getId(), template.getImage().getId(), template
+ .getHardware().getId(), template.getOptions());
Set nodes = Sets.newHashSet();
Map badNodes = Maps.newLinkedHashMap();
Map, Future> responses = runNodesAndAddToSetStrategy.execute(tag, count, template, nodes, badNodes);
@@ -179,11 +185,27 @@ public class BaseComputeService implements ComputeService {
* {@inheritDoc}
*/
@Override
- public void destroyNode(String id) {
+ public void destroyNode(final String id) {
checkNotNull(id, "id");
logger.debug(">> destroying node(%s)", id);
- NodeMetadata node = destroyNodeStrategy.execute(id);
- boolean successful = node == null ? true : nodeTerminated.apply(node);
+ final AtomicReference node = new AtomicReference();
+ RetryablePredicate tester = new RetryablePredicate(new Predicate() {
+
+ @Override
+ public boolean apply(String input) {
+ try {
+ NodeMetadata md = destroyNodeStrategy.execute(id);
+ if (md != null)
+ node.set(md);
+ return true;
+ } catch (IllegalStateException e) {
+ logger.warn("<< illegal state destroying node(%s)", id);
+ return false;
+ }
+ }
+
+ }, timeouts.nodeRunning, 1000, TimeUnit.MILLISECONDS);
+ boolean successful = tester.apply(id) && (node.get() == null || nodeTerminated.apply(node.get()));
logger.debug("<< destroyed node(%s) success(%s)", id, successful);
}
diff --git a/compute/src/main/java/org/jclouds/compute/reference/ComputeServiceConstants.java b/compute/src/main/java/org/jclouds/compute/reference/ComputeServiceConstants.java
index 58dd1dc937..34981fd8b7 100644
--- a/compute/src/main/java/org/jclouds/compute/reference/ComputeServiceConstants.java
+++ b/compute/src/main/java/org/jclouds/compute/reference/ComputeServiceConstants.java
@@ -43,7 +43,7 @@ public interface ComputeServiceConstants {
public static final String PROPERTY_BLACKLIST_NODES = "jclouds.compute.blacklist.nodes";
@Singleton
- static class Timeouts {
+ public static class Timeouts {
@Inject(optional = true)
@Named(PROPERTY_TIMEOUT_NODE_TERMINATED)
public long nodeTerminated = 30 * 1000;
diff --git a/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java b/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java
index f3329a2175..300de6c21a 100755
--- a/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java
+++ b/compute/src/test/java/org/jclouds/compute/BaseComputeServiceLiveTest.java
@@ -170,9 +170,8 @@ public abstract class BaseComputeServiceLiveTest {
protected void setupCredentials() {
identity = checkNotNull(System.getProperty("test." + provider + ".identity"), "test." + provider + ".identity");
credential = System.getProperty("test." + provider + ".credential");
- endpoint = checkNotNull(System.getProperty("test." + provider + ".endpoint"), "test." + provider + ".endpoint");
- apiversion = checkNotNull(System.getProperty("test." + provider + ".apiversion"), "test." + provider
- + ".apiversion");
+ endpoint = System.getProperty("test." + provider + ".endpoint");
+ apiversion = System.getProperty("test." + provider + ".apiversion");
}
protected Properties setupProperties() {
diff --git a/core/src/main/java/org/jclouds/concurrent/internal/SyncProxy.java b/core/src/main/java/org/jclouds/concurrent/internal/SyncProxy.java
index 1363b80e9a..fa5e52477e 100644
--- a/core/src/main/java/org/jclouds/concurrent/internal/SyncProxy.java
+++ b/core/src/main/java/org/jclouds/concurrent/internal/SyncProxy.java
@@ -45,6 +45,7 @@ import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.common.util.concurrent.ListenableFuture;
+import com.google.inject.ProvisionException;
/**
* Generates RESTful clients from appropriately annotated interfaces.
@@ -56,7 +57,7 @@ public class SyncProxy implements InvocationHandler {
@SuppressWarnings("unchecked")
public static T proxy(Class clazz, SyncProxy proxy) throws IllegalArgumentException, SecurityException,
- NoSuchMethodException {
+ NoSuchMethodException {
return (T) Proxy.newProxyInstance(clazz.getClassLoader(), new Class>[] { clazz }, proxy);
}
@@ -71,8 +72,8 @@ public class SyncProxy implements InvocationHandler {
@Inject
public SyncProxy(Class> declaring, Object async,
- @Named("sync") ConcurrentMap delegateMap, Map, Class>> sync2Async)
- throws SecurityException, NoSuchMethodException {
+ @Named("sync") ConcurrentMap delegateMap, Map, Class>> sync2Async)
+ throws SecurityException, NoSuchMethodException {
this.delegateMap = delegateMap;
this.delegate = async;
this.declaring = declaring;
@@ -91,7 +92,7 @@ public class SyncProxy implements InvocationHandler {
Method delegatedMethod = delegate.getClass().getMethod(method.getName(), method.getParameterTypes());
if (!Arrays.equals(delegatedMethod.getExceptionTypes(), method.getExceptionTypes()))
throw new IllegalArgumentException(String.format(
- "method %s has different typed exceptions than delegated method %s", method, delegatedMethod));
+ "method %s has different typed exceptions than delegated method %s", method, delegatedMethod));
if (delegatedMethod.getReturnType().isAssignableFrom(ListenableFuture.class)) {
if (method.isAnnotationPresent(Timeout.class)) {
Timeout methodTimeout = method.getAnnotation(Timeout.class);
@@ -123,7 +124,7 @@ public class SyncProxy implements InvocationHandler {
} else if (method.isAnnotationPresent(Delegate.class)) {
Class> asyncClass = sync2Async.get(method.getReturnType());
checkState(asyncClass != null, "please configure corresponding async class for " + method.getReturnType()
- + " in your RestClientModule");
+ + " in your RestClientModule");
Object returnVal = delegateMap.get(new ClassMethodArgs(asyncClass, method, args));
return returnVal;
} else if (syncMethodMap.containsKey(method)) {
@@ -131,7 +132,9 @@ public class SyncProxy implements InvocationHandler {
} else {
try {
return ((ListenableFuture>) methodMap.get(method).invoke(delegate, args)).get(timeoutMap.get(method),
- TimeUnit.NANOSECONDS);
+ TimeUnit.NANOSECONDS);
+ } catch (ProvisionException e) {
+ throw throwTypedExceptionOrCause(method.getExceptionTypes(), e);
} catch (ExecutionException e) {
throw throwTypedExceptionOrCause(method.getExceptionTypes(), e);
} catch (Exception e) {
diff --git a/core/src/main/java/org/jclouds/rest/internal/AsyncRestClientProxy.java b/core/src/main/java/org/jclouds/rest/internal/AsyncRestClientProxy.java
index b322208b7c..29ad5224a7 100755
--- a/core/src/main/java/org/jclouds/rest/internal/AsyncRestClientProxy.java
+++ b/core/src/main/java/org/jclouds/rest/internal/AsyncRestClientProxy.java
@@ -40,8 +40,10 @@ import org.jclouds.http.HttpResponse;
import org.jclouds.http.TransformingHttpCommand;
import org.jclouds.internal.ClassMethodArgs;
import org.jclouds.logging.Logger;
+import org.jclouds.rest.AuthorizationException;
import org.jclouds.rest.InvocationContext;
import org.jclouds.rest.annotations.Delegate;
+import org.jclouds.util.Utils;
import com.google.common.base.Function;
import com.google.common.util.concurrent.Futures;
@@ -117,6 +119,9 @@ public class AsyncRestClientProxy implements InvocationHandler {
((InvocationContext) exceptionParser).setContext((GeneratedHttpRequest) request);
}
} catch (RuntimeException e) {
+ AuthorizationException aex = Utils.getFirstThrowableOfType(e, AuthorizationException.class);
+ if (aex != null)
+ e = aex;
if (exceptionParser != null) {
try {
return Futures.immediateFuture(exceptionParser.apply(e));
diff --git a/rackspace/pom.xml b/rackspace/pom.xml
index 9a3ab33101..b59c1b321d 100644
--- a/rackspace/pom.xml
+++ b/rackspace/pom.xml
@@ -158,6 +158,14 @@
test.initializer
${test.initializer}
+
+ jclouds.blobstore.httpstream.url
+ ${jclouds.blobstore.httpstream.url}
+
+
+ jclouds.blobstore.httpstream.md5
+ ${jclouds.blobstore.httpstream.md5}
+
diff --git a/rackspace/src/main/java/org/jclouds/rackspace/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java b/rackspace/src/main/java/org/jclouds/rackspace/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java
index 61359fb3bd..8b6d9216c2 100644
--- a/rackspace/src/main/java/org/jclouds/rackspace/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java
+++ b/rackspace/src/main/java/org/jclouds/rackspace/cloudservers/handlers/ParseCloudServersErrorFromHttpResponse.java
@@ -71,8 +71,10 @@ public class ParseCloudServersErrorFromHttpResponse implements HttpErrorHandler
break;
case 409:
exception = new IllegalStateException(content);
+ break;
default:
exception = new HttpResponseException(command, response, content);
+ break;
}
} finally {
releasePayload(response);
diff --git a/rackspace/src/test/java/org/jclouds/rackspace/RackspaceAuthenticationLiveTest.java b/rackspace/src/test/java/org/jclouds/rackspace/RackspaceAuthenticationLiveTest.java
index d066b88f67..06b4476580 100755
--- a/rackspace/src/test/java/org/jclouds/rackspace/RackspaceAuthenticationLiveTest.java
+++ b/rackspace/src/test/java/org/jclouds/rackspace/RackspaceAuthenticationLiveTest.java
@@ -73,7 +73,7 @@ public class RackspaceAuthenticationLiveTest {
authentication.authenticate("foo", "bar").get(10, TimeUnit.SECONDS);
}
- protected String provider = "rackspace";
+ protected String provider = "cloudservers";
protected String identity;
protected String credential;
protected String endpoint;
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VCloudError.java b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VCloudError.java
index ccd6ccafd0..c391231b5c 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VCloudError.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/domain/VCloudError.java
@@ -47,6 +47,10 @@ public interface VCloudError {
* A conflict was detected between sections of an OVF descriptor.
*/
CONFLICT,
+ /**
+ * The entity is busy
+ */
+ BUSY_ENTITY,
/**
* An attempt to instantiate a vAppTemplate or use a vAppTemplate or a Vm in a composition did
* not include an AllEULAsAccepted element with a value of true.
diff --git a/vcloud/core/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java b/vcloud/core/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java
index d68157367e..a9bc823f3d 100644
--- a/vcloud/core/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java
+++ b/vcloud/core/src/main/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponse.java
@@ -41,6 +41,7 @@ import org.jclouds.util.Utils;
import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.VCloudResponseException;
import org.jclouds.vcloud.domain.VCloudError;
+import org.jclouds.vcloud.domain.VCloudError.MinorCode;
import org.jclouds.vcloud.util.VCloudUtils;
/**
@@ -87,7 +88,12 @@ public class ParseVCloudErrorFromHttpResponse implements HttpErrorHandler {
switch (response.getStatusCode()) {
case 400:
- exception = new IllegalArgumentException(message, exception);
+ if (error != null && error.getMinorErrorCode() != null
+ && error.getMinorErrorCode() == MinorCode.BUSY_ENTITY)
+ exception = new IllegalStateException(message, exception);
+ else
+ exception = new IllegalArgumentException(message, exception);
+ break;
case 401:
case 403:
exception = new AuthorizationException(command.getRequest(), message);
diff --git a/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/compute/TerremarkVCloudComputeService.java b/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/compute/TerremarkVCloudComputeService.java
index bd21d30d01..270ff0914a 100644
--- a/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/compute/TerremarkVCloudComputeService.java
+++ b/vcloud/terremark/src/main/java/org/jclouds/vcloud/terremark/compute/TerremarkVCloudComputeService.java
@@ -30,12 +30,13 @@ import javax.inject.Singleton;
import org.jclouds.Constants;
import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.Image;
import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.TemplateBuilder;
import org.jclouds.compute.internal.BaseComputeService;
import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
import org.jclouds.compute.strategy.DestroyNodeStrategy;
import org.jclouds.compute.strategy.GetNodeMetadataStrategy;
import org.jclouds.compute.strategy.ListNodesStrategy;
@@ -61,23 +62,24 @@ public class TerremarkVCloudComputeService extends BaseComputeService {
@Inject
protected TerremarkVCloudComputeService(ComputeServiceContext context, Supplier> images,
- Supplier> sizes, Supplier> locations,
- ListNodesStrategy listNodesStrategy, GetNodeMetadataStrategy getNodeMetadataStrategy,
- RunNodesAndAddToSetStrategy runNodesAndAddToSetStrategy, RebootNodeStrategy rebootNodeStrategy,
- DestroyNodeStrategy destroyNodeStrategy, Provider templateBuilderProvider,
- Provider templateOptionsProvider, @Named("NODE_RUNNING") Predicate nodeRunning,
- @Named("NODE_TERMINATED") Predicate nodeTerminated, ComputeUtils utils,
- @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor, CleanupOrphanKeys cleanupOrphanKeys,
- ConcurrentMap credentialsMap, NodeMetadataToOrgAndName nodeToOrgAndName) {
+ Supplier> sizes, Supplier> locations,
+ ListNodesStrategy listNodesStrategy, GetNodeMetadataStrategy getNodeMetadataStrategy,
+ RunNodesAndAddToSetStrategy runNodesAndAddToSetStrategy, RebootNodeStrategy rebootNodeStrategy,
+ DestroyNodeStrategy destroyNodeStrategy, Provider templateBuilderProvider,
+ Provider templateOptionsProvider,
+ @Named("NODE_RUNNING") Predicate nodeRunning,
+ @Named("NODE_TERMINATED") Predicate nodeTerminated, ComputeUtils utils, Timeouts timeouts,
+ @Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor, CleanupOrphanKeys cleanupOrphanKeys,
+ ConcurrentMap credentialsMap, NodeMetadataToOrgAndName nodeToOrgAndName) {
super(context, images, sizes, locations, listNodesStrategy, getNodeMetadataStrategy, runNodesAndAddToSetStrategy,
- rebootNodeStrategy, destroyNodeStrategy, templateBuilderProvider, templateOptionsProvider, nodeRunning,
- nodeTerminated, utils, executor);
+ rebootNodeStrategy, destroyNodeStrategy, templateBuilderProvider, templateOptionsProvider, nodeRunning,
+ nodeTerminated, utils, timeouts, executor);
this.cleanupOrphanKeys = cleanupOrphanKeys;
}
/**
- * like {@link BaseComputeService#destroyNodesMatching} except that this will
- * clean implicit keypairs.
+ * like {@link BaseComputeService#destroyNodesMatching} except that this will clean implicit
+ * keypairs.
*/
@Override
public Set extends NodeMetadata> destroyNodesMatching(Predicate filter) {
@@ -87,8 +89,7 @@ public class TerremarkVCloudComputeService extends BaseComputeService {
}
/**
- * returns template options, except of type
- * {@link TerremarkVCloudTemplateOptions}.
+ * returns template options, except of type {@link TerremarkVCloudTemplateOptions}.
*/
@Override
public TerremarkVCloudTemplateOptions templateOptions() {