You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2014/10/06 22:24:17 UTC

[2/7] git commit: JCLOUDS-153 remove IO Executor and usage of it.

JCLOUDS-153 remove IO Executor and usage of it.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/0a236f59
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/0a236f59
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/0a236f59

Branch: refs/heads/reactivate-checkstyle
Commit: 0a236f59ad4aa0207b0603b287b76de1d7c0c19f
Parents: ffc0df1
Author: Adrian Cole <ad...@gmail.com>
Authored: Sun Oct 5 22:53:38 2014 -0700
Committer: Adrian Cole <ad...@gmail.com>
Committed: Mon Oct 6 07:56:31 2014 -0700

----------------------------------------------------------------------
 .../v2_0/internal/BaseOpenStackMockTest.java    |   2 +-
 .../java/org/jclouds/s3/S3ClientMockTest.java   |   2 +-
 .../sqs/features/PermissionApiLiveTest.java     |   2 +-
 .../ParallelMultipartUploadStrategy.java        |  14 +-
 ...quentialMultipartUploadStrategyMockTest.java |   4 +-
 .../stub/config/StubComputeServiceAdapter.java  |  15 +-
 .../extensions/StubSecurityGroupExtension.java  |   9 -
 ...ScriptUsingSshAndBlockUntilCompleteTest.java |   4 +-
 core/src/main/java/org/jclouds/Constants.java   |   3 +
 .../main/java/org/jclouds/ContextBuilder.java   |   2 +-
 .../jclouds/apis/internal/BaseApiMetadata.java  |   2 -
 .../config/ExecutorServiceModule.java           |  45 +++--
 .../http/HttpCommandExecutorService.java        |  15 +-
 .../BaseHttpCommandExecutorService.java         |  38 ----
 .../JavaUrlHttpCommandExecutorService.java      |   6 +-
 .../lifecycle/config/LifeCycleModule.java       |   6 -
 .../config/ExecutorServiceModuleTest.java       |  33 ++--
 .../events/config/EventBusModuleTest.java       |   1 -
 ...tpCommandExecutorServiceIntegrationTest.java |   3 -
 ...ackingJavaUrlHttpCommandExecutorService.java |  16 +-
 .../lifecycle/config/LifeCycleModuleTest.java   |   7 -
 .../rest/annotationparsing/ClosableApiTest.java |   2 +-
 .../rest/internal/BaseRestApiExpectTest.java    |  10 +-
 .../jclouds/rest/internal/BaseRestApiTest.java  |   2 -
 .../internal/RestAnnotationProcessorTest.java   |  54 ------
 .../ApacheHCHttpCommandExecutorService.java     |  13 +-
 ...CHttpCommandExecutorServiceTestDisabled.java |   2 -
 .../config/EnterpriseConfigurationModule.java   |  10 ++
 .../gae/AsyncGaeHttpCommandExecutorService.java | 175 -------------------
 .../gae/GaeHttpCommandExecutorService.java      |   6 +-
 ...AsyncGoogleAppEngineConfigurationModule.java |  57 ------
 .../CurrentRequestExecutorServiceModule.java    |   7 -
 .../GoogleAppEngineConfigurationModule.java     |   2 +-
 ...AsyncGoogleAppEngineConfigurationModule.java |  64 -------
 ...tpCommandExecutorServiceIntegrationTest.java |  95 ----------
 ...tpCommandExecutorServiceIntegrationTest.java |  95 ++++++++++
 .../okhttp/OkHttpCommandExecutorService.java    |   5 +-
 .../OkHttpCommandExecutorServiceTest.java       |   3 -
 .../ParallelMultipartUploadStrategy.java        |  14 +-
 ...quentialMultipartUploadStrategyMockTest.java |   4 +-
 .../dynect/v3/config/DynECTHttpApiModule.java   |   5 +-
 .../jclouds/dynect/v3/DynectApiMockTest.java    |   2 +-
 .../BaseHPCloudObjectStorageMockTest.java       |   2 +-
 43 files changed, 189 insertions(+), 669 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
index d6fb2f9..af27d40 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
@@ -58,7 +58,7 @@ public class BaseOpenStackMockTest<A extends Closeable> {
    public static final String accessRackspace = "{\"access\":{\"token\":{\"id\":\"b84f4a37-5126-4603-9521-ccd0665fbde1\",\"expires\":\"2013-04-13T16:49:57.000-05:00\",\"tenant\":{\"id\":\"123123\",\"name\":\"123123\"}},\"serviceCatalog\":[{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudMonitoring\",\"type\":\"rax:monitor\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"},{\"region\":\"ORD\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"}],\"name\":\"cloudFilesCDN\",\"type\":\"rax:object-cdn\"},{\"endpoints\":[{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"},{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudLoadBalancers\",\"type\":\"rax:load-
 balancer\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudDatabases\",\"type\":\"rax:database\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"internalURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"},{\"region\":\"ORD\",\"tenantId\":\"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"publicURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\",\"internalURL\":\"URL/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9\"}],\"name\":\"cloudFiles\",\"type\":\"object-store\"},{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\",\"versionInfo\":\"URL/v1.0\",\"versionList\":\"URL/\",\"versionId\":\"1.0\"}],\"name\":\"cloudServers\",\"type\":\"compute\"},{\"end
 points\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v2/123123\",\"versionInfo\":\"URL/v2\",\"versionList\":\"URL/\",\"versionId\":\"2\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v2/123123\",\"versionInfo\":\"URL/v2\",\"versionList\":\"URL/\",\"versionId\":\"2\"}],\"name\":\"cloudServersOpenStack\",\"type\":\"compute\"},{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudDNS\",\"type\":\"rax:dns\"},{\"endpoints\":[{\"tenantId\":\"123123\",\"publicURL\":\"URL/v1.0/123123\"}],\"name\":\"cloudBackup\",\"type\":\"rax:backup\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\"}],\"name\":\"cloudBlockStorage\",\"type\":\"volume\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\",\"internalURL\":\"URL/v1/123123\"},{\"region\":\"ORD\",\"tenantId\":
 \"123123\",\"publicURL\":\"URL/v1/123123\",\"internalURL\":\"URL/v1/123123\"}],\"name\":\"marconi\",\"type\":\"queuing\"},{\"endpoints\":[{\"region\":\"DFW\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\",\"internalURL\":\"URL/v1/123123\"},{\"region\":\"ORD\",\"tenantId\":\"123123\",\"publicURL\":\"URL/v1/123123\",\"internalURL\":\"URL/v1/123123\"}],\"name\":\"autoscale\",\"type\":\"rax:autoscale\"}],\"user\":{\"id\":\"1234\",\"roles\":[{\"id\":\"3\",\"description\":\"User Admin Role.\",\"name\":\"identity:user-admin\"}],\"name\":\"jclouds-joe\",\"RAX-AUTH:defaultRegion\":\"DFW\"}}}";
 
    private final Set<Module> modules = ImmutableSet.<Module> of(
-         new ExecutorServiceModule(newDirectExecutorService(), newDirectExecutorService()));
+         new ExecutorServiceModule(newDirectExecutorService()));
 
    /**
     * Pattern for replacing the URL token with the correct local address.

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java b/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
index c9f67dc..097d49d 100644
--- a/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
+++ b/apis/s3/src/test/java/org/jclouds/s3/S3ClientMockTest.java
@@ -46,7 +46,7 @@ import com.squareup.okhttp.mockwebserver.RecordedRequest;
 public class S3ClientMockTest {
 
    private static final Set<Module> modules = ImmutableSet.<Module> of(new OkHttpCommandExecutorServiceModule(),
-         new ExecutorServiceModule(newDirectExecutorService(), newDirectExecutorService()));
+         new ExecutorServiceModule(newDirectExecutorService()));
 
    static S3Client getS3Client(URL server) {
       Properties overrides = new Properties();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/apis/sqs/src/test/java/org/jclouds/sqs/features/PermissionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/sqs/src/test/java/org/jclouds/sqs/features/PermissionApiLiveTest.java b/apis/sqs/src/test/java/org/jclouds/sqs/features/PermissionApiLiveTest.java
index 2c96ab2..b8a7f31 100644
--- a/apis/sqs/src/test/java/org/jclouds/sqs/features/PermissionApiLiveTest.java
+++ b/apis/sqs/src/test/java/org/jclouds/sqs/features/PermissionApiLiveTest.java
@@ -91,7 +91,7 @@ public class PermissionApiLiveTest extends BaseSQSApiLiveTest {
 
    private AnonymousAttributesApi getAnonymousAttributesApi(URI queue) {
       return ContextBuilder.newBuilder(forApiOnEndpoint(AnonymousAttributesApi.class, queue.toASCIIString()))
-            .modules(ImmutableSet.<Module> of(new ExecutorServiceModule(newDirectExecutorService(), newDirectExecutorService())))
+            .modules(ImmutableSet.<Module> of(new ExecutorServiceModule(newDirectExecutorService())))
             .buildApi(AnonymousAttributesApi.class);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
index 6257799..446b451 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/strategy/internal/ParallelMultipartUploadStrategy.java
@@ -89,17 +89,17 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra
     @Named(Constants.PROPERTY_REQUEST_TIMEOUT)
     protected Long maxTime;
 
-    private final ListeningExecutorService ioExecutor;
+    private final ListeningExecutorService executor;
 
     protected final SwiftBlobStore blobstore;
     protected final PayloadSlicer slicer;
 
     @Inject
     public ParallelMultipartUploadStrategy(SwiftBlobStore blobstore, PayloadSlicer slicer,
-                                           @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor) {
+                                           @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService executor) {
         this.blobstore = checkNotNull(blobstore, "blobstore");
         this.slicer = checkNotNull(slicer, "slicer");
-        this.ioExecutor = checkNotNull(ioExecutor, "ioExecutor");
+        this.executor = checkNotNull(executor, "executor");
     }
 
 
@@ -125,7 +125,7 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra
 
         final Blob blobPart = blobstore.blobBuilder(blobPartName).payload(chunkedPart).
                 contentDisposition(blobPartName).build();
-        final ListenableFuture<String> futureETag = ioExecutor.submit(new Callable<String>() {
+        final ListenableFuture<String> futureETag = executor.submit(new Callable<String>() {
            @Override public String call() throws Exception {
               return client.putObject(container, blob2Object.apply(blobPart));
            }
@@ -155,13 +155,13 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra
                     latch.countDown();
                 }
             }
-        }, ioExecutor);
+        }, executor);
         futureParts.put(part, futureETag);
     }
 
     @Override
     public ListenableFuture<String> execute(final String container, final Blob blob, final PutOptions options, final BlobToObject blob2Object) {
-        return ioExecutor.submit(new Callable<String>() {
+        return executor.submit(new Callable<String>() {
                     @Override
                     public String call() throws Exception {
                         String key = blob.getMetadata().getName();
@@ -248,7 +248,7 @@ public class ParallelMultipartUploadStrategy implements AsyncMultipartUploadStra
                                 throw rtex;
                             }
                         } else {
-                            ListenableFuture<String> futureETag = ioExecutor.submit(new Callable<String>() {
+                            ListenableFuture<String> futureETag = executor.submit(new Callable<String>() {
                                @Override public String call() throws Exception {
                                   return blobstore.putBlob(container, blob, options);
                                }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java
index cba3a29..352cf8d 100644
--- a/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java
+++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java
@@ -97,8 +97,8 @@ public class SequentialMultipartUploadStrategyMockTest {
       }
    }
 
-   private static final Set<Module> modules = ImmutableSet.<Module> of(new ExecutorServiceModule(newDirectExecutorService(),
-         newDirectExecutorService()));
+   private static final Set<Module> modules = ImmutableSet.<Module> of(
+         new ExecutorServiceModule(newDirectExecutorService()));
 
    static SequentialMultipartUploadStrategy mockSequentialMultipartUploadStrategy(String uri, int partSize) {
       Properties overrides = new Properties();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/compute/src/main/java/org/jclouds/compute/stub/config/StubComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/compute/src/main/java/org/jclouds/compute/stub/config/StubComputeServiceAdapter.java b/compute/src/main/java/org/jclouds/compute/stub/config/StubComputeServiceAdapter.java
index 0823fd5..03ba0ea 100644
--- a/compute/src/main/java/org/jclouds/compute/stub/config/StubComputeServiceAdapter.java
+++ b/compute/src/main/java/org/jclouds/compute/stub/config/StubComputeServiceAdapter.java
@@ -66,9 +66,8 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
    private final Supplier<Location> location;
    private final ConcurrentMap<String, NodeMetadata> nodes;
    private final Multimap<String, SecurityGroup> groupsForNodes;
-   private final ListeningExecutorService ioExecutor;
+   private final ListeningExecutorService executor;
    private final Provider<Integer> idProvider;
-   private final Provider<Integer> groupIdProvider;
    private final String publicIpPrefix;
    private final String privateIpPrefix;
    private final String passwordPrefix;
@@ -78,14 +77,13 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
 
    @Inject
    public StubComputeServiceAdapter(ConcurrentMap<String, NodeMetadata> nodes,
-            @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor, Supplier<Location> location,
+            @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService executor, Supplier<Location> location,
             @Named("NODE_ID") Provider<Integer> idProvider, @Named("PUBLIC_IP_PREFIX") String publicIpPrefix,
             @Named("PRIVATE_IP_PREFIX") String privateIpPrefix, @Named("PASSWORD_PREFIX") String passwordPrefix,
             JustProvider locationSupplier, Map<OsFamily, Map<String, String>> osToVersionMap,
-            Multimap<String, SecurityGroup> groupsForNodes, @Named("GROUP_ID") Provider<Integer> groupIdProvider,
-            Optional<SecurityGroupExtension> securityGroupExtension) {
+            Multimap<String, SecurityGroup> groupsForNodes, Optional<SecurityGroupExtension> securityGroupExtension) {
       this.nodes = nodes;
-      this.ioExecutor = ioExecutor;
+      this.executor = executor;
       this.location = location;
       this.idProvider = idProvider;
       this.publicIpPrefix = publicIpPrefix;
@@ -94,7 +92,6 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
       this.locationSupplier = locationSupplier;
       this.osToVersionMap = osToVersionMap;
       this.groupsForNodes = groupsForNodes;
-      this.groupIdProvider = groupIdProvider;
       this.securityGroupExtension = securityGroupExtension;
    }
 
@@ -106,7 +103,7 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
       if (millis == 0l)
          setStateOnNode(status, node);
       else
-         ioExecutor.execute(new Runnable() {
+         executor.execute(new Runnable() {
 
             @Override
             public void run() {
@@ -220,7 +217,7 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
       setStateOnNodeAfterDelay(Status.TERMINATED, node, 50);
       groupsForNodes.removeAll(id);
 
-      ioExecutor.execute(new Runnable() {
+      executor.execute(new Runnable() {
 
          @Override
          public void run() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/compute/src/main/java/org/jclouds/compute/stub/extensions/StubSecurityGroupExtension.java
----------------------------------------------------------------------
diff --git a/compute/src/main/java/org/jclouds/compute/stub/extensions/StubSecurityGroupExtension.java b/compute/src/main/java/org/jclouds/compute/stub/extensions/StubSecurityGroupExtension.java
index 9f65647..4a57d73 100644
--- a/compute/src/main/java/org/jclouds/compute/stub/extensions/StubSecurityGroupExtension.java
+++ b/compute/src/main/java/org/jclouds/compute/stub/extensions/StubSecurityGroupExtension.java
@@ -28,12 +28,10 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Provider;
 
-import org.jclouds.Constants;
 import org.jclouds.compute.domain.SecurityGroup;
 import org.jclouds.compute.domain.SecurityGroupBuilder;
 import org.jclouds.compute.extensions.SecurityGroupExtension;
 import org.jclouds.domain.Location;
-import org.jclouds.location.suppliers.all.JustProvider;
 import org.jclouds.net.domain.IpPermission;
 import org.jclouds.net.domain.IpProtocol;
 
@@ -42,7 +40,6 @@ import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Multimap;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * An extension to compute service to allow for the manipulation of {@link SecurityGroup}s. Implementation
@@ -52,23 +49,17 @@ public class StubSecurityGroupExtension implements SecurityGroupExtension {
 
    private final Supplier<Location> location;
    private final Provider<Integer> groupIdProvider;
-   private final Supplier<Set<? extends Location>> locationSupplier;
-   private final ListeningExecutorService ioExecutor;
    private final ConcurrentMap<String, SecurityGroup> groups;
    private final Multimap<String, SecurityGroup> groupsForNodes;
 
    @Inject
    public StubSecurityGroupExtension(ConcurrentMap<String, SecurityGroup> groups,
-                                     @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
                                      Supplier<Location> location,
                                      @Named("GROUP_ID") Provider<Integer> groupIdProvider,
-                                     JustProvider locationSupplier,
                                      Multimap<String, SecurityGroup> groupsForNodes) {
       this.groups = groups;
-      this.ioExecutor = ioExecutor;
       this.location = location;
       this.groupIdProvider = groupIdProvider;
-      this.locationSupplier = locationSupplier;
       this.groupsForNodes = groupsForNodes;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/compute/src/test/java/org/jclouds/compute/callables/RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest.java
----------------------------------------------------------------------
diff --git a/compute/src/test/java/org/jclouds/compute/callables/RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest.java b/compute/src/test/java/org/jclouds/compute/callables/RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest.java
index afc88e0..bd3a299 100644
--- a/compute/src/test/java/org/jclouds/compute/callables/RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest.java
+++ b/compute/src/test/java/org/jclouds/compute/callables/RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest.java
@@ -22,7 +22,6 @@ import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
 import static org.jclouds.scriptbuilder.domain.Statements.exec;
@@ -52,11 +51,10 @@ import com.google.inject.assistedinject.FactoryModuleBuilder;
 
 @Test(groups = "unit", singleThreaded = true, testName = "RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest")
 public class RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilCompleteTest {
-   Injector injector = Guice.createInjector(new ExecutorServiceModule(newDirectExecutorService(), newDirectExecutorService()),
+   Injector injector = Guice.createInjector(new ExecutorServiceModule(newDirectExecutorService()),
          new AbstractModule() {
             protected void configure() {
                bindConstant().annotatedWith(named(PROPERTY_USER_THREADS)).to(1);
-               bindConstant().annotatedWith(named(PROPERTY_IO_WORKER_THREADS)).to(1);
                bindConstant().annotatedWith(named(TIMEOUT_SCRIPT_COMPLETE)).to(100);
                install(new FactoryModuleBuilder().build(BlockUntilInitScriptStatusIsZeroThenReturnOutput.Factory.class));
             }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/Constants.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/Constants.java b/core/src/main/java/org/jclouds/Constants.java
index f49227f..a1e77a1 100644
--- a/core/src/main/java/org/jclouds/Constants.java
+++ b/core/src/main/java/org/jclouds/Constants.java
@@ -34,7 +34,10 @@ public final class Constants {
     * Integer property. default (20)
     * <p/>
     * Amount of threads servicing the I/O of http connections.
+    *
+    * @deprecated No longer used. Will be removed in jclouds v2
     */
+   @Deprecated
    public static final String PROPERTY_IO_WORKER_THREADS = "jclouds.io-worker-threads";
 
    /**

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/ContextBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/ContextBuilder.java b/core/src/main/java/org/jclouds/ContextBuilder.java
index 020d728..ef52f20 100644
--- a/core/src/main/java/org/jclouds/ContextBuilder.java
+++ b/core/src/main/java/org/jclouds/ContextBuilder.java
@@ -540,7 +540,7 @@ public class ContextBuilder {
                return input.getClass().isAnnotationPresent(SingleThreaded.class);
             }
          })) {
-            modules.add(new ExecutorServiceModule(newDirectExecutorService(), newDirectExecutorService()));
+            modules.add(new ExecutorServiceModule(newDirectExecutorService()));
          } else {
             modules.add(new ExecutorServiceModule());
          }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/apis/internal/BaseApiMetadata.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/apis/internal/BaseApiMetadata.java b/core/src/main/java/org/jclouds/apis/internal/BaseApiMetadata.java
index 5fd88e3..410d27b 100644
--- a/core/src/main/java/org/jclouds/apis/internal/BaseApiMetadata.java
+++ b/core/src/main/java/org/jclouds/apis/internal/BaseApiMetadata.java
@@ -19,7 +19,6 @@ package org.jclouds.apis.internal;
 import static com.google.common.base.Objects.equal;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.jclouds.Constants.PROPERTY_CONNECTION_TIMEOUT;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
 import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_CONTEXT;
 import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST;
@@ -67,7 +66,6 @@ public abstract class BaseApiMetadata implements ApiMetadata {
       props.setProperty(PROPERTY_MAX_CONNECTIONS_PER_HOST, 0 + "");
       props.setProperty(PROPERTY_SO_TIMEOUT, 60000 + "");
       props.setProperty(PROPERTY_CONNECTION_TIMEOUT, 60000 + "");
-      props.setProperty(PROPERTY_IO_WORKER_THREADS, 20 + "");
       // Successfully tested 50 user threads with BlobStore.clearContainer.
       props.setProperty(PROPERTY_USER_THREADS, numUserThreads + "");
       props.setProperty(PROPERTY_SCHEDULER_THREADS, 10 + "");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/concurrent/config/ExecutorServiceModule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/concurrent/config/ExecutorServiceModule.java b/core/src/main/java/org/jclouds/concurrent/config/ExecutorServiceModule.java
index dd7dd08..9e0e81d 100644
--- a/core/src/main/java/org/jclouds/concurrent/config/ExecutorServiceModule.java
+++ b/core/src/main/java/org/jclouds/concurrent/config/ExecutorServiceModule.java
@@ -17,7 +17,6 @@
 package org.jclouds.concurrent.config;
 
 import static com.google.common.util.concurrent.MoreExecutors.listeningDecorator;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.jclouds.concurrent.DynamicExecutors.newScalingThreadPool;
 
@@ -74,22 +73,37 @@ public class ExecutorServiceModule extends AbstractModule {
    }
 
    final ListeningExecutorService userExecutorFromConstructor;
-   final ListeningExecutorService ioExecutorFromConstructor;
 
    public ExecutorServiceModule() {
       this.userExecutorFromConstructor = null;
-      this.ioExecutorFromConstructor = null;
    }
 
+   /**
+    * @deprecated {@code ioExecutor} is no longer used. This constructor will be removed in jclouds v2.
+    * Use {@link #ExecutorServiceModule(ExecutorService)} instead.
+    */
+   @Deprecated
    public ExecutorServiceModule(@Named(PROPERTY_USER_THREADS) ExecutorService userExecutor,
-         @Named(PROPERTY_IO_WORKER_THREADS) ExecutorService ioExecutor) {
-      this(listeningDecorator(userExecutor), listeningDecorator(ioExecutor));
+         ExecutorService ioExecutor) {
+      this(userExecutor);
    }
 
+   /**
+    * @deprecated {@code ioExecutor} is no longer used. This constructor will be removed in jclouds v2.
+    * Use {@link #ExecutorServiceModule(ListeningExecutorService)} instead.
+    */
+   @Deprecated
    public ExecutorServiceModule(@Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
-         @Named(PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor) {
+         ListeningExecutorService ioExecutor) {
+      this(userExecutor);
+   }
+
+   public ExecutorServiceModule(@Named(PROPERTY_USER_THREADS) ExecutorService userExecutor) {
+      this(listeningDecorator(userExecutor));
+   }
+
+   public ExecutorServiceModule(@Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
       this.userExecutorFromConstructor = WithSubmissionTrace.wrap(userExecutor);
-      this.ioExecutorFromConstructor = WithSubmissionTrace.wrap(ioExecutor);
    }
 
    @Override
@@ -113,28 +127,11 @@ public class ExecutorServiceModule extends AbstractModule {
 
    @Provides
    @Singleton
-   @Named(PROPERTY_IO_WORKER_THREADS)
-   ListeningExecutorService provideListeningIOExecutorService(@Named(PROPERTY_IO_WORKER_THREADS) int count,
-         Closer closer) { // NO_UCD
-      if (ioExecutorFromConstructor != null)
-         return ioExecutorFromConstructor;
-      return shutdownOnClose(WithSubmissionTrace.wrap(newThreadPoolNamed("i/o thread %d", count)), closer);
-   }
-
-   @Provides
-   @Singleton
    @Named(PROPERTY_USER_THREADS)
    ExecutorService provideUserExecutorService(@Named(PROPERTY_USER_THREADS) ListeningExecutorService in) { // NO_UCD
       return in;
    }
 
-   @Provides
-   @Singleton
-   @Named(PROPERTY_IO_WORKER_THREADS)
-   ExecutorService provideIOExecutorService(@Named(PROPERTY_IO_WORKER_THREADS) ListeningExecutorService in) { // NO_UCD
-      return in;
-   }
-
    static <T extends ListeningExecutorService> T shutdownOnClose(final T service, Closer closer) {
       closer.addToClose(new ShutdownExecutorOnClose(service));
       return service;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/http/HttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/HttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/HttpCommandExecutorService.java
index eed2910..74254f3 100644
--- a/core/src/main/java/org/jclouds/http/HttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/HttpCommandExecutorService.java
@@ -16,27 +16,14 @@
  */
 package org.jclouds.http;
 
-
-import com.google.common.util.concurrent.ListenableFuture;
-
 /**
  * Capable of invoking http commands.
  */
-public interface HttpCommandExecutorService { 
+public interface HttpCommandExecutorService {
 
    /**
-    * Returns a potentially deferred {@code HttpResponse} from a server responding to the
-    * {@code command}. The output {@code ListenableFuture} need not be
-    * {@linkplain Future#isDone done}, making {@code HttpCommandExecutorService}
-    * suitable for asynchronous derivations.
-    * 
-    */
-   ListenableFuture<HttpResponse> submit(HttpCommand command);
-   
-   /**
     * Returns a {@code HttpResponse} from the server which responded to the
     * {@code command}.
     */
    HttpResponse invoke(HttpCommand command);
-
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
index 270a217..6921aa5 100644
--- a/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/internal/BaseHttpCommandExecutorService.java
@@ -23,7 +23,6 @@ import static org.jclouds.http.HttpUtils.wirePayloadIfEnabled;
 import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
 
 import java.io.IOException;
-import java.util.concurrent.Callable;
 
 import javax.annotation.Resource;
 import javax.inject.Inject;
@@ -43,9 +42,6 @@ import org.jclouds.http.handlers.DelegatingRetryHandler;
 import org.jclouds.io.ContentMetadataCodec;
 import org.jclouds.logging.Logger;
 
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
 public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandExecutorService {
    protected final HttpUtils utils;
    protected final ContentMetadataCodec contentMetadataCodec;
@@ -53,7 +49,6 @@ public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandEx
    protected final DelegatingRetryHandler retryHandler;
    protected final IOExceptionRetryHandler ioRetryHandler;
    protected final DelegatingErrorHandler errorHandler;
-   protected final ListeningExecutorService ioExecutor;
 
    @Resource
    protected Logger logger = Logger.NULL;
@@ -65,7 +60,6 @@ public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandEx
 
    @Inject
    protected BaseHttpCommandExecutorService(HttpUtils utils, ContentMetadataCodec contentMetadataCodec,
-         @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
          DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
          DelegatingErrorHandler errorHandler, HttpWire wire) {
       this.utils = checkNotNull(utils, "utils");
@@ -73,7 +67,6 @@ public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandEx
       this.retryHandler = checkNotNull(retryHandler, "retryHandler");
       this.ioRetryHandler = checkNotNull(ioRetryHandler, "ioRetryHandler");
       this.errorHandler = checkNotNull(errorHandler, "errorHandler");
-      this.ioExecutor = checkNotNull(ioExecutor, "ioExecutor");
       this.wire = checkNotNull(wire, "wire");
    }
 
@@ -137,37 +130,6 @@ public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandEx
       return shouldContinue;
    }
 
-   @Override
-   public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-      HttpRequest request = command.getCurrentRequest();
-      checkRequestHasContentLengthOrChunkedEncoding(request,
-            "if the request has a payload, it must be set to chunked encoding or specify a content length: " + request);
-      return ioExecutor.submit(new HttpResponseCallable(command));
-   }
-
-   public class HttpResponseCallable implements Callable<HttpResponse> {
-      private final HttpCommand command;
-
-      public HttpResponseCallable(HttpCommand command) {
-         this.command = command;
-      }
-
-      public HttpResponse call() throws Exception {
-         try {
-            return invoke(command);
-         } finally {
-            if (command.getException() != null)
-               throw command.getException();
-         }
-      }
-
-      @Override
-      public String toString() {
-         return command.toString();
-      }
-
-   }
-
    protected abstract Q convert(HttpRequest request) throws IOException, InterruptedException;
 
    protected abstract HttpResponse invoke(Q nativeRequest) throws IOException, InterruptedException;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
index 3647ef2..47a8575 100644
--- a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.jclouds.http.internal;
+
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Throwables.propagate;
 import static com.google.common.io.ByteStreams.toByteArray;
@@ -43,7 +44,6 @@ import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 
-import org.jclouds.Constants;
 import org.jclouds.JcloudsVersion;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
@@ -62,7 +62,6 @@ import com.google.common.collect.ImmutableMultimap.Builder;
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Closeables;
 import com.google.common.io.CountingOutputStream;
-import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.inject.Inject;
 
 /**
@@ -82,12 +81,11 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
 
    @Inject
    public JavaUrlHttpCommandExecutorService(HttpUtils utils, ContentMetadataCodec contentMetadataCodec,
-            @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
             DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
             DelegatingErrorHandler errorHandler, HttpWire wire, @Named("untrusted") HostnameVerifier verifier,
             @Named("untrusted") Supplier<SSLContext> untrustedSSLContextProvider, Function<URI, Proxy> proxyForURI) 
                   throws SecurityException, NoSuchFieldException {
-      super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
+      super(utils, contentMetadataCodec, retryHandler, ioRetryHandler, errorHandler, wire);
       if (utils.getMaxConnections() > 0)
          System.setProperty("http.maxConnections", String.valueOf(checkNotNull(utils, "utils").getMaxConnections()));
       this.untrustedSSLContextProvider = checkNotNull(untrustedSSLContextProvider, "untrustedSSLContextProvider");

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/main/java/org/jclouds/lifecycle/config/LifeCycleModule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/lifecycle/config/LifeCycleModule.java b/core/src/main/java/org/jclouds/lifecycle/config/LifeCycleModule.java
index ef4cabc..e978c24 100644
--- a/core/src/main/java/org/jclouds/lifecycle/config/LifeCycleModule.java
+++ b/core/src/main/java/org/jclouds/lifecycle/config/LifeCycleModule.java
@@ -20,7 +20,6 @@ import static com.google.common.base.Throwables.propagate;
 import static com.google.common.collect.Iterables.filter;
 import static com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService;
 import static com.google.inject.matcher.Matchers.any;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_SCHEDULER_THREADS;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.jclouds.reflect.Reflection2.methods;
@@ -70,9 +69,6 @@ public class LifeCycleModule extends AbstractModule {
          @Inject
          @Named(PROPERTY_USER_THREADS)
          ListeningExecutorService userExecutor;
-         @Inject
-         @Named(PROPERTY_IO_WORKER_THREADS)
-         ListeningExecutorService ioExecutor;
          // ScheduledExecutor is defined in an optional module
          @Inject(optional = true)
          @Named(PROPERTY_SCHEDULER_THREADS)
@@ -81,8 +77,6 @@ public class LifeCycleModule extends AbstractModule {
          public void close() throws IOException {
             assert userExecutor != null;
             userExecutor.shutdownNow();
-            assert ioExecutor != null;
-            ioExecutor.shutdownNow();
             // ScheduledExecutor is defined in an optional module
             if (scheduledExecutor != null)
                scheduledExecutor.shutdownNow();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/concurrent/config/ExecutorServiceModuleTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/concurrent/config/ExecutorServiceModuleTest.java b/core/src/test/java/org/jclouds/concurrent/config/ExecutorServiceModuleTest.java
index a935999..ead684d 100644
--- a/core/src/test/java/org/jclouds/concurrent/config/ExecutorServiceModuleTest.java
+++ b/core/src/test/java/org/jclouds/concurrent/config/ExecutorServiceModuleTest.java
@@ -23,7 +23,6 @@ import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotEquals;
@@ -55,7 +54,6 @@ public class ExecutorServiceModuleTest {
       ExecutorServiceModule module = new ExecutorServiceModule() {
          @Override
          protected void configure() {
-            bindConstant().annotatedWith(named(PROPERTY_IO_WORKER_THREADS)).to(1);
             bindConstant().annotatedWith(named(PROPERTY_USER_THREADS)).to(1);
             super.configure();
          }
@@ -63,18 +61,14 @@ public class ExecutorServiceModuleTest {
 
       injector = Guice.createInjector(module);
       assertNull(module.userExecutorFromConstructor);
-      assertNull(module.ioExecutorFromConstructor);
    }
 
    @AfterClass
    private void close() throws IOException {
       ListeningExecutorService user = injector.getInstance(Key.get(ListeningExecutorService.class,
             named(PROPERTY_USER_THREADS)));
-      ListeningExecutorService io = injector.getInstance(Key.get(ListeningExecutorService.class,
-            named(PROPERTY_IO_WORKER_THREADS)));
       injector.getInstance(Closer.class).close();
       assertTrue(user.isShutdown());
-      assertTrue(io.isShutdown());
    }
 
    @Test
@@ -95,23 +89,18 @@ public class ExecutorServiceModuleTest {
 
    @Test(timeOut = 5000)
    public void testExceptionInSubmitRunnableIncludesSubmissionTrace() throws Exception {
-      ListeningExecutorService user = injector.getInstance(Key.get(ListeningExecutorService.class,
+      ListeningExecutorService exec = injector.getInstance(Key.get(ListeningExecutorService.class,
             named(PROPERTY_USER_THREADS)));
-      ListeningExecutorService io = injector.getInstance(Key.get(ListeningExecutorService.class,
-            named(PROPERTY_IO_WORKER_THREADS)));
-
-      for (ListeningExecutorService exec : ImmutableList.of(user, io)) {
-         String submission = null;
-         try {
-            // this is sensitive to formatting as we are looking for the stack traces to match. if you wrap the below
-            // line again, you'll need to change incrementInitialElement to 3 line numbers instead of 2.
-            submission = getStackTraceAsString(incrementInitialElement(new RuntimeException(), 2)).replaceFirst(format(".*%s", LINE_SEPARATOR),
-                  "");
-            exec.submit(runnableThrowsRTE()).get();
-         } catch (ExecutionException e) {
-            assertTraceHasSubmission(getStackTraceAsString(e), submission);
-            assertTraceHasSubmission(getStackTraceAsString(e.getCause()), submission);
-         }
+      String submission = null;
+      try {
+         // this is sensitive to formatting as we are looking for the stack traces to match. if you wrap the below
+         // line again, you'll need to change incrementInitialElement to 3 line numbers instead of 2.
+         submission = getStackTraceAsString(incrementInitialElement(new RuntimeException(), 2)).replaceFirst(format(".*%s", LINE_SEPARATOR),
+               "");
+         exec.submit(runnableThrowsRTE()).get();
+      } catch (ExecutionException e) {
+         assertTraceHasSubmission(getStackTraceAsString(e), submission);
+         assertTraceHasSubmission(getStackTraceAsString(e.getCause()), submission);
       }
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/events/config/EventBusModuleTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/events/config/EventBusModuleTest.java b/core/src/test/java/org/jclouds/events/config/EventBusModuleTest.java
index 3a0af75..8259d96 100644
--- a/core/src/test/java/org/jclouds/events/config/EventBusModuleTest.java
+++ b/core/src/test/java/org/jclouds/events/config/EventBusModuleTest.java
@@ -45,7 +45,6 @@ public class EventBusModuleTest {
         ExecutorServiceModule userExecutorModule = new ExecutorServiceModule() {
             @Override
             protected void configure() {
-               bindConstant().annotatedWith(Names.named(Constants.PROPERTY_IO_WORKER_THREADS)).to(1);
                bindConstant().annotatedWith(Names.named(Constants.PROPERTY_USER_THREADS)).to(1);
                super.configure();
             }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/http/JavaUrlHttpCommandExecutorServiceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/http/JavaUrlHttpCommandExecutorServiceIntegrationTest.java b/core/src/test/java/org/jclouds/http/JavaUrlHttpCommandExecutorServiceIntegrationTest.java
index 53184c1..d1d4c60 100644
--- a/core/src/test/java/org/jclouds/http/JavaUrlHttpCommandExecutorServiceIntegrationTest.java
+++ b/core/src/test/java/org/jclouds/http/JavaUrlHttpCommandExecutorServiceIntegrationTest.java
@@ -16,7 +16,6 @@
  */
 package org.jclouds.http;
 
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_CONTEXT;
 import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
@@ -41,8 +40,6 @@ public class JavaUrlHttpCommandExecutorServiceIntegrationTest extends BaseHttpCo
    protected void addOverrideProperties(Properties props) {
       props.setProperty(PROPERTY_MAX_CONNECTIONS_PER_CONTEXT, 50 + "");
       props.setProperty(PROPERTY_MAX_CONNECTIONS_PER_HOST, 0 + "");
-      // IO workers not used in this executor
-      props.setProperty(PROPERTY_IO_WORKER_THREADS, 0 + "");
       props.setProperty(PROPERTY_USER_THREADS, 5 + "");
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java b/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
index fbf0f24..bb808a2 100644
--- a/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
+++ b/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
@@ -27,9 +27,7 @@ import javax.inject.Singleton;
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.SSLContext;
 
-import org.jclouds.Constants;
 import org.jclouds.http.HttpCommand;
-import org.jclouds.http.HttpResponse;
 import org.jclouds.http.HttpUtils;
 import org.jclouds.http.IOExceptionRetryHandler;
 import org.jclouds.http.handlers.DelegatingErrorHandler;
@@ -41,8 +39,6 @@ import com.google.common.base.Function;
 import com.google.common.base.Supplier;
 import com.google.common.collect.Iterables;
 import com.google.common.reflect.Invokable;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.inject.AbstractModule;
 import com.google.inject.Module;
 import com.google.inject.TypeLiteral;
@@ -87,20 +83,12 @@ public class TrackingJavaUrlHttpCommandExecutorService extends JavaUrlHttpComman
 
    @Inject
    public TrackingJavaUrlHttpCommandExecutorService(HttpUtils utils, ContentMetadataCodec contentMetadataCodec,
-            @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
             DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
             DelegatingErrorHandler errorHandler, HttpWire wire, @Named("untrusted") HostnameVerifier verifier,
             @Named("untrusted") Supplier<SSLContext> untrustedSSLContextProvider, Function<URI, Proxy> proxyForURI,
             List<HttpCommand> commandsInvoked) throws SecurityException, NoSuchFieldException {
-      super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire, verifier,
-               untrustedSSLContextProvider, proxyForURI);
+      super(utils, contentMetadataCodec, retryHandler, ioRetryHandler, errorHandler, wire, verifier,
+            untrustedSSLContextProvider, proxyForURI);
       this.commandsInvoked = commandsInvoked;
    }
-
-   @Override
-   public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-      commandsInvoked.add(command);
-      return super.submit(command);
-   }
-
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/lifecycle/config/LifeCycleModuleTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/lifecycle/config/LifeCycleModuleTest.java b/core/src/test/java/org/jclouds/lifecycle/config/LifeCycleModuleTest.java
index 1ae52ab..6feb182 100644
--- a/core/src/test/java/org/jclouds/lifecycle/config/LifeCycleModuleTest.java
+++ b/core/src/test/java/org/jclouds/lifecycle/config/LifeCycleModuleTest.java
@@ -17,7 +17,6 @@
 package org.jclouds.lifecycle.config;
 
 import static com.google.inject.name.Names.named;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 
 import java.io.Closeable;
@@ -48,13 +47,11 @@ public class LifeCycleModuleTest {
    void testBindsExecutor() {
       Injector i = createInjector();
       assert i.getInstance(Key.get(ListeningExecutorService.class, named(PROPERTY_USER_THREADS))) != null;
-      assert i.getInstance(Key.get(ListeningExecutorService.class, named(PROPERTY_IO_WORKER_THREADS))) != null;
    }
 
    private Injector createInjector() {
       Injector i = Guice.createInjector(new AbstractModule() {
          protected void configure() {
-            bindConstant().annotatedWith(named(PROPERTY_IO_WORKER_THREADS)).to(1);
             bindConstant().annotatedWith(named(PROPERTY_USER_THREADS)).to(1);
          }
       }, new LifeCycleModule(), new ExecutorServiceModule());
@@ -90,14 +87,10 @@ public class LifeCycleModuleTest {
       ListeningExecutorService userExecutor = i.getInstance(Key.get(ListeningExecutorService.class,
             named(PROPERTY_USER_THREADS)));
       assert !userExecutor.isShutdown();
-      ListeningExecutorService ioExecutor = i.getInstance(Key.get(ListeningExecutorService.class,
-            named(PROPERTY_IO_WORKER_THREADS)));
-      assert !ioExecutor.isShutdown();
       Closer closer = i.getInstance(Closer.class);
       assert closer.getState() == Closer.State.AVAILABLE;
       closer.close();
       assert userExecutor.isShutdown();
-      assert ioExecutor.isShutdown();
       assert closer.getState() == Closer.State.DONE;
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/rest/annotationparsing/ClosableApiTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/rest/annotationparsing/ClosableApiTest.java b/core/src/test/java/org/jclouds/rest/annotationparsing/ClosableApiTest.java
index ea6b5cd..b124309 100644
--- a/core/src/test/java/org/jclouds/rest/annotationparsing/ClosableApiTest.java
+++ b/core/src/test/java/org/jclouds/rest/annotationparsing/ClosableApiTest.java
@@ -56,7 +56,7 @@ public class ClosableApiTest {
 
       DelegatingApi api = ContextBuilder.newBuilder(provider)
                                         .modules(ImmutableSet.<Module> builder()
-                                                             .add(new ExecutorServiceModule(executor, executor))
+                                                             .add(new ExecutorServiceModule(executor))
                                                              .build())
                                         .buildApi(DelegatingApi.class);
       api.close();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
index 34a461e..92bf77b 100644
--- a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiExpectTest.java
@@ -19,7 +19,6 @@ package org.jclouds.rest.internal;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService;
 import static com.google.inject.name.Names.named;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.testng.Assert.assertEquals;
@@ -191,11 +190,9 @@ public abstract class BaseRestApiExpectTest<S> {
 
       @Inject
       public ExpectHttpCommandExecutorService(Function<HttpRequest, HttpResponse> fn, HttpUtils utils,
-               ContentMetadataCodec contentMetadataCodec,
-               @Named(PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
-               IOExceptionRetryHandler ioRetryHandler, DelegatingRetryHandler retryHandler,
-               DelegatingErrorHandler errorHandler, HttpWire wire) {
-         super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
+            ContentMetadataCodec contentMetadataCodec, IOExceptionRetryHandler ioRetryHandler,
+            DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, HttpWire wire) {
+         super(utils, contentMetadataCodec, retryHandler, ioRetryHandler, errorHandler, wire);
          this.fn = checkNotNull(fn, "fn");
       }
 
@@ -228,7 +225,6 @@ public abstract class BaseRestApiExpectTest<S> {
       @Override
       public void configure() {
          bind(ListeningExecutorService.class).annotatedWith(named(PROPERTY_USER_THREADS)).toInstance(newDirectExecutorService());
-         bind(ListeningExecutorService.class).annotatedWith(named(PROPERTY_IO_WORKER_THREADS)).toInstance(newDirectExecutorService());
          bind(new TypeLiteral<Function<HttpRequest, HttpResponse>>() {
          }).toInstance(fn);
          bind(HttpCommandExecutorService.class).to(ExpectHttpCommandExecutorService.class);

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
index c151c4e..915aa99 100644
--- a/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/BaseRestApiTest.java
@@ -21,7 +21,6 @@ import static com.google.common.net.HttpHeaders.TRANSFER_ENCODING;
 import static com.google.common.util.concurrent.MoreExecutors.newDirectExecutorService;
 import static com.google.inject.name.Names.named;
 import static org.easymock.EasyMock.createMock;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
@@ -79,7 +78,6 @@ public abstract class BaseRestApiTest {
       @Override
       protected void configure() {
          bind(ListeningExecutorService.class).annotatedWith(named(PROPERTY_USER_THREADS)).toInstance(newDirectExecutorService());
-         bind(ListeningExecutorService.class).annotatedWith(named(PROPERTY_IO_WORKER_THREADS)).toInstance(newDirectExecutorService());
          bind(HttpCommandExecutorService.class).toInstance(mock);
       }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
index a16eb91..16ace50 100644
--- a/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
+++ b/core/src/test/java/org/jclouds/rest/internal/RestAnnotationProcessorTest.java
@@ -244,12 +244,6 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
          ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
          int callCounter = 0;
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError();
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             if (callCounter == 1)
@@ -279,19 +273,12 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateWithPathParamIsLazyLoadedAndRequestIncludesEndpointVersionAndPath()
          throws InterruptedException, ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(command.getCurrentRequest().getRequestLine(),
                   "GET http://howdyboys/testing/testing/thepathparam/client/1/foo HTTP/1.1");
             return HttpResponse.builder().build();
          }
-
       });
 
       try {
@@ -310,18 +297,11 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateWithHeaderParamIsLazyLoadedAndRequestIncludesEndpointVersionAndHeader()
          throws InterruptedException, ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(command.getCurrentRequest().getFirstHeaderOrNull("header"), "theheaderparam");
             return HttpResponse.builder().build();
          }
-
       });
 
       try {
@@ -338,12 +318,6 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateWithoutProducesAndConsumes()
          throws InterruptedException, ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(
@@ -352,7 +326,6 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
             assertTrue(command.getCurrentRequest().getHeaders().get("Accept").contains(APPLICATION_JSON));
             return HttpResponse.builder().build();
          }
-
       });
 
       try {
@@ -368,12 +341,6 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateWithProducesAndConsumesOnMethodIsLazyLoaded()
          throws InterruptedException, ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(
@@ -398,12 +365,6 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateWithProducesAndConsumesOnClassIsLazyLoaded()
          throws InterruptedException, ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(
@@ -412,7 +373,6 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
             assertTrue(command.getCurrentRequest().getHeaders().get("Accept").contains(APPLICATION_XML));
             return HttpResponse.builder().build();
          }
-
       });
 
       try {
@@ -428,18 +388,11 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateIsLazyLoadedAndRequestIncludesEndpointVersionAndPathOptionalPresent()
          throws InterruptedException, ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(command.getCurrentRequest().getRequestLine(), "GET http://howdyboys/client/1/foo HTTP/1.1");
             return HttpResponse.builder().build();
          }
-
       });
 
       try {
@@ -458,18 +411,11 @@ public class RestAnnotationProcessorTest extends BaseRestApiTest {
    public void testDelegateIsLazyLoadedAndRequestIncludesEndpointVersionAndPath() throws InterruptedException,
          ExecutionException {
       Injector child = injectorForCaller(new HttpCommandExecutorService() {
-
-         @Override
-         public ListenableFuture<HttpResponse> submit(HttpCommand command) {
-            throw new AssertionError("jclouds no longer uses the submit method");
-         }
-
          @Override
          public HttpResponse invoke(HttpCommand command) {
             assertEquals(command.getCurrentRequest().getRequestLine(), "GET http://howdyboys/client/1/foo HTTP/1.1");
             return HttpResponse.builder().build();
          }
-
       });
 
       try {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java b/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
index 8448a55..74d3628 100644
--- a/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
+++ b/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorService.java
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 package org.jclouds.http.apachehc;
+
 import static com.google.common.hash.Hashing.md5;
 import static com.google.common.io.BaseEncoding.base64;
 import static org.jclouds.http.HttpUtils.filterOutContentHeaders;
@@ -22,14 +23,13 @@ import static org.jclouds.http.HttpUtils.filterOutContentHeaders;
 import java.io.IOException;
 import java.net.URI;
 
-import javax.inject.Named;
+import javax.inject.Inject;
 
 import org.apache.http.Header;
 import org.apache.http.HttpHost;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpUriRequest;
-import org.jclouds.Constants;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.http.HttpUtils;
@@ -38,18 +38,16 @@ import org.jclouds.http.handlers.DelegatingErrorHandler;
 import org.jclouds.http.handlers.DelegatingRetryHandler;
 import org.jclouds.http.internal.BaseHttpCommandExecutorService;
 import org.jclouds.http.internal.HttpWire;
-import org.jclouds.io.ContentMetadataCodec;
 import org.jclouds.io.ByteStreams2;
+import org.jclouds.io.ContentMetadataCodec;
 import org.jclouds.io.Payload;
 import org.jclouds.io.Payloads;
 
 import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.Multimap;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.Inject;
 
 /**
- * Simple implementation of a {@link HttpFutureCommandClient}, Apache Components HttpClient 4.x.
+ * Simple implementation of a {@link HttpCommandExecutorService}, Apache Components HttpClient 4.x.
  */
 public class ApacheHCHttpCommandExecutorService extends BaseHttpCommandExecutorService<HttpUriRequest> {
    private final HttpClient client;
@@ -57,10 +55,9 @@ public class ApacheHCHttpCommandExecutorService extends BaseHttpCommandExecutorS
 
    @Inject
    ApacheHCHttpCommandExecutorService(HttpUtils utils, ContentMetadataCodec contentMetadataCodec,
-         @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
          DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
          DelegatingErrorHandler errorHandler, HttpWire wire, HttpClient client) {
-      super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
+      super(utils, contentMetadataCodec, retryHandler, ioRetryHandler, errorHandler, wire);
       this.client = client;
       this.apacheHCUtils = new ApacheHCUtils(contentMetadataCodec);
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java
----------------------------------------------------------------------
diff --git a/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java b/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java
index 7b46eda..016f997 100644
--- a/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java
+++ b/drivers/apachehc/src/test/java/org/jclouds/http/apachehc/ApacheHCHttpCommandExecutorServiceTestDisabled.java
@@ -17,7 +17,6 @@
 package org.jclouds.http.apachehc;
 
 import static org.jclouds.Constants.PROPERTY_CONNECTION_TIMEOUT;
-import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
 import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_CONTEXT;
 import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST;
 import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
@@ -49,7 +48,6 @@ public class ApacheHCHttpCommandExecutorServiceTestDisabled extends BaseHttpComm
       props.setProperty(PROPERTY_MAX_CONNECTIONS_PER_HOST, 0 + "");
       props.setProperty(PROPERTY_CONNECTION_TIMEOUT, 100 + "");
       props.setProperty(PROPERTY_SO_TIMEOUT, 100 + "");
-      props.setProperty(PROPERTY_IO_WORKER_THREADS, 3 + "");
       props.setProperty(PROPERTY_USER_THREADS, 0 + "");
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/enterprise/src/main/java/org/jclouds/enterprise/config/EnterpriseConfigurationModule.java
----------------------------------------------------------------------
diff --git a/drivers/enterprise/src/main/java/org/jclouds/enterprise/config/EnterpriseConfigurationModule.java b/drivers/enterprise/src/main/java/org/jclouds/enterprise/config/EnterpriseConfigurationModule.java
index 5dfab86..abdfd13 100644
--- a/drivers/enterprise/src/main/java/org/jclouds/enterprise/config/EnterpriseConfigurationModule.java
+++ b/drivers/enterprise/src/main/java/org/jclouds/enterprise/config/EnterpriseConfigurationModule.java
@@ -30,10 +30,20 @@ import com.google.common.util.concurrent.ListeningExecutorService;
 @ConfiguresExecutorService
 public class EnterpriseConfigurationModule extends ExecutorServiceModule {
 
+   /**
+    * @deprecated {@code ioExecutor} is no longer used. This constructor will be removed in jclouds v2.
+    * Use {@link #EnterpriseConfigurationModule(ListeningExecutorService)} instead.
+    */
+   @Deprecated
    public EnterpriseConfigurationModule(ListeningExecutorService userExecutor, ListeningExecutorService ioExecutor) {
       super(userExecutor, ioExecutor);
    }
 
+   @Deprecated
+   public EnterpriseConfigurationModule(ListeningExecutorService userExecutor) {
+      super(userExecutor);
+   }
+
    public EnterpriseConfigurationModule() {
       super();
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/gae/src/main/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/drivers/gae/src/main/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorService.java b/drivers/gae/src/main/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorService.java
deleted file mode 100644
index b8410b5..0000000
--- a/drivers/gae/src/main/java/org/jclouds/gae/AsyncGaeHttpCommandExecutorService.java
+++ /dev/null
@@ -1,175 +0,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.
- */
-package org.jclouds.gae;
-
-import static com.google.common.base.Throwables.propagate;
-import static com.google.common.util.concurrent.Futures.transform;
-import static com.google.common.util.concurrent.JdkFutureAdapters.listenInPoolThread;
-import static org.jclouds.http.HttpUtils.checkRequestHasContentLengthOrChunkedEncoding;
-import static org.jclouds.http.HttpUtils.wirePayloadIfEnabled;
-
-import java.io.IOException;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.Constants;
-import org.jclouds.JcloudsVersion;
-import org.jclouds.http.HttpCommand;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.http.HttpRequestFilter;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.http.HttpResponseException;
-import org.jclouds.http.HttpUtils;
-import org.jclouds.http.IOExceptionRetryHandler;
-import org.jclouds.http.handlers.DelegatingErrorHandler;
-import org.jclouds.http.handlers.DelegatingRetryHandler;
-import org.jclouds.http.internal.BaseHttpCommandExecutorService;
-import org.jclouds.http.internal.HttpWire;
-import org.jclouds.io.ContentMetadataCodec;
-import org.jclouds.util.Throwables2;
-
-import com.google.appengine.api.urlfetch.HTTPRequest;
-import com.google.appengine.api.urlfetch.HTTPResponse;
-import com.google.appengine.api.urlfetch.URLFetchService;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- * Google App Engine version of {@link HttpCommandExecutorService} using their
- * fetchAsync call
- */
-@Singleton
-public class AsyncGaeHttpCommandExecutorService extends BaseHttpCommandExecutorService<HTTPRequest> {
-   // TODO: look up gae version
-   public static final String USER_AGENT = String.format("jclouds/%s urlfetch/%s", JcloudsVersion.get(), "1.6.5");
-
-   private final URLFetchService urlFetchService;
-   private final ConvertToGaeRequest convertToGaeRequest;
-   private final ConvertToJcloudsResponse convertToJcloudsResponse;
-   private final ListeningExecutorService ioExecutor;
-
-   @Inject
-   public AsyncGaeHttpCommandExecutorService(URLFetchService urlFetchService, HttpUtils utils,
-         ContentMetadataCodec contentMetadataCodec,
-         @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
-         IOExceptionRetryHandler ioRetryHandler, DelegatingRetryHandler retryHandler,
-         DelegatingErrorHandler errorHandler, HttpWire wire, ConvertToGaeRequest convertToGaeRequest,
-         ConvertToJcloudsResponse convertToJcloudsResponse) {
-      super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
-      this.ioExecutor = ioExecutor;
-      this.urlFetchService = urlFetchService;
-      this.convertToGaeRequest = convertToGaeRequest;
-      this.convertToJcloudsResponse = convertToJcloudsResponse;
-   }
-
-   @VisibleForTesting
-   protected HttpResponse convert(HTTPResponse gaeResponse) {
-      return convertToJcloudsResponse.apply(gaeResponse);
-   }
-
-   @VisibleForTesting
-   protected HTTPRequest convert(HttpRequest request) throws IOException {
-      return convertToGaeRequest.apply(request);
-   }
-
-   /**
-    * nothing to clean up.
-    */
-   @Override
-   protected void cleanup(HTTPRequest nativeRequest) {
-   }
-
-   @Override
-   protected HttpResponse invoke(HTTPRequest request) throws IOException {
-      return convert(urlFetchService.fetch(request));
-   }
-
-   public HTTPRequest filterLogAndConvertRe(HttpRequest request) {
-      for (HttpRequestFilter filter : request.getFilters()) {
-         request = filter.filter(request);
-      }
-      checkRequestHasContentLengthOrChunkedEncoding(request,
-            "After filtering, the request has neither chunked encoding nor content length: " + request);
-      logger.debug("Sending request %s: %s", request.hashCode(), request.getRequestLine());
-      wirePayloadIfEnabled(wire, request);
-      HTTPRequest nativeRequest = convertToGaeRequest.apply(request);
-      utils.logRequest(headerLog, request, ">>");
-      return nativeRequest;
-   }
-
-   @Override
-   public ListenableFuture<HttpResponse> submit(final HttpCommand command) {
-      HTTPRequest nativeRequest = filterLogAndConvertRe(command.getCurrentRequest());
-      ListenableFuture<HttpResponse> response = transform(
-            listenInPoolThread(urlFetchService.fetchAsync(nativeRequest)), convertToJcloudsResponse);
-
-      return transform(response, new Function<HttpResponse, HttpResponse>() {
-         public HttpResponse apply(HttpResponse response) {
-            return receiveResponse(command, response);
-         }
-
-      }, ioExecutor);
-   }
-
-   private HttpResponse receiveResponse(HttpCommand command, HttpResponse response) {
-      try {
-         logger.debug("Receiving response %s: %s", command.getCurrentRequest().hashCode(), response.getStatusLine());
-         utils.logResponse(headerLog, response, "<<");
-         if (response.getPayload() != null && wire.enabled())
-            wire.input(response);
-         int statusCode = response.getStatusCode();
-         if (statusCode >= 300) {
-            if (shouldContinue(command, response))
-               return submit(command).get();
-            else
-               return response;
-         }
-         return response;
-      } catch (Exception e) {
-         IOException ioe = Throwables2.getFirstThrowableOfType(e, IOException.class);
-         if (ioe != null && ioRetryHandler.shouldRetryRequest(command, ioe)) {
-            try {
-               return submit(command).get();
-            } catch (Exception e1) {
-               command.setException(e1);
-               return response;
-            }
-         } else {
-            command.setException(new HttpResponseException(e.getMessage() + " connecting to "
-                  + command.getCurrentRequest().getRequestLine(), command, null, e));
-            return response;
-         }
-      } finally {
-         if (command.getException() != null)
-            propagate(command.getException());
-      }
-   }
-
-   private boolean shouldContinue(HttpCommand command, HttpResponse response) {
-      boolean shouldContinue = false;
-      if (retryHandler.shouldRetryRequest(command, response)) {
-         shouldContinue = true;
-      } else {
-         errorHandler.handleError(command, response);
-      }
-      return shouldContinue;
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/gae/src/main/java/org/jclouds/gae/GaeHttpCommandExecutorService.java
----------------------------------------------------------------------
diff --git a/drivers/gae/src/main/java/org/jclouds/gae/GaeHttpCommandExecutorService.java b/drivers/gae/src/main/java/org/jclouds/gae/GaeHttpCommandExecutorService.java
index ac84afe..79ff28d 100644
--- a/drivers/gae/src/main/java/org/jclouds/gae/GaeHttpCommandExecutorService.java
+++ b/drivers/gae/src/main/java/org/jclouds/gae/GaeHttpCommandExecutorService.java
@@ -19,10 +19,8 @@ package org.jclouds.gae;
 import java.io.IOException;
 
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.JcloudsVersion;
 import org.jclouds.concurrent.SingleThreaded;
 import org.jclouds.http.HttpRequest;
@@ -39,7 +37,6 @@ import com.google.appengine.api.urlfetch.HTTPRequest;
 import com.google.appengine.api.urlfetch.HTTPResponse;
 import com.google.appengine.api.urlfetch.URLFetchService;
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.util.concurrent.ListeningExecutorService;
 
 /**
  * Google App Engine version of {@link HttpCommandExecutorService}
@@ -57,11 +54,10 @@ public class GaeHttpCommandExecutorService extends BaseHttpCommandExecutorServic
    @Inject
    public GaeHttpCommandExecutorService(URLFetchService urlFetchService, HttpUtils utils,
             ContentMetadataCodec contentMetadataCodec,
-            @Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
             IOExceptionRetryHandler ioRetryHandler, DelegatingRetryHandler retryHandler,
             DelegatingErrorHandler errorHandler, HttpWire wire, ConvertToGaeRequest convertToGaeRequest,
             ConvertToJcloudsResponse convertToJcloudsResponse) {
-      super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
+      super(utils, contentMetadataCodec, retryHandler, ioRetryHandler, errorHandler, wire);
       this.urlFetchService = urlFetchService;
       this.convertToGaeRequest = convertToGaeRequest;
       this.convertToJcloudsResponse = convertToJcloudsResponse;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/gae/src/main/java/org/jclouds/gae/config/AsyncGoogleAppEngineConfigurationModule.java
----------------------------------------------------------------------
diff --git a/drivers/gae/src/main/java/org/jclouds/gae/config/AsyncGoogleAppEngineConfigurationModule.java b/drivers/gae/src/main/java/org/jclouds/gae/config/AsyncGoogleAppEngineConfigurationModule.java
deleted file mode 100644
index d6979b8..0000000
--- a/drivers/gae/src/main/java/org/jclouds/gae/config/AsyncGoogleAppEngineConfigurationModule.java
+++ /dev/null
@@ -1,57 +0,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.
- */
-package org.jclouds.gae.config;
-
-import org.jclouds.concurrent.SingleThreaded;
-import org.jclouds.concurrent.config.ConfiguresExecutorService;
-import org.jclouds.gae.AsyncGaeHttpCommandExecutorService;
-import org.jclouds.http.HttpCommandExecutorService;
-import org.jclouds.http.config.ConfiguresHttpCommandExecutorService;
-
-import com.google.common.base.Supplier;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.Module;
-
-/**
- * Configures {@link AsyncGaeHttpCommandExecutorService}.
- */
-@ConfiguresHttpCommandExecutorService
-@ConfiguresExecutorService
-@SingleThreaded
-public class AsyncGoogleAppEngineConfigurationModule extends GoogleAppEngineConfigurationModule {
-   public AsyncGoogleAppEngineConfigurationModule() {
-      super();
-   }
-
-   public AsyncGoogleAppEngineConfigurationModule(Module userExecutorModule) {
-      super(userExecutorModule);
-   }
-
-   /**
-    * Used when you are creating multiple contexts in the same app.
-    * @param memoizedCurrentRequestExecutorService
-    * @see CurrentRequestExecutorServiceModule#memoizedCurrentRequestExecutorService
-    */
-   public AsyncGoogleAppEngineConfigurationModule(Supplier<ListeningExecutorService> memoizedCurrentRequestExecutorService) {
-      super(memoizedCurrentRequestExecutorService);
-   }
-
-   protected void bindHttpCommandExecutorService() {
-      bind(HttpCommandExecutorService.class).to(AsyncGaeHttpCommandExecutorService.class);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/gae/src/main/java/org/jclouds/gae/config/CurrentRequestExecutorServiceModule.java
----------------------------------------------------------------------
diff --git a/drivers/gae/src/main/java/org/jclouds/gae/config/CurrentRequestExecutorServiceModule.java b/drivers/gae/src/main/java/org/jclouds/gae/config/CurrentRequestExecutorServiceModule.java
index 8e1a777..70c8f19 100644
--- a/drivers/gae/src/main/java/org/jclouds/gae/config/CurrentRequestExecutorServiceModule.java
+++ b/drivers/gae/src/main/java/org/jclouds/gae/config/CurrentRequestExecutorServiceModule.java
@@ -102,11 +102,4 @@ public class CurrentRequestExecutorServiceModule extends AbstractModule {
    protected ListeningExecutorService userExecutor() {
       return memoizedCurrentRequestExecutorService.get();
    }
-
-   @Provides
-   @Singleton
-   @Named(Constants.PROPERTY_IO_WORKER_THREADS)
-   protected ListeningExecutorService ioExecutor() {
-      return memoizedCurrentRequestExecutorService.get();
-   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/gae/src/main/java/org/jclouds/gae/config/GoogleAppEngineConfigurationModule.java
----------------------------------------------------------------------
diff --git a/drivers/gae/src/main/java/org/jclouds/gae/config/GoogleAppEngineConfigurationModule.java b/drivers/gae/src/main/java/org/jclouds/gae/config/GoogleAppEngineConfigurationModule.java
index e3264a3..21d40e2 100644
--- a/drivers/gae/src/main/java/org/jclouds/gae/config/GoogleAppEngineConfigurationModule.java
+++ b/drivers/gae/src/main/java/org/jclouds/gae/config/GoogleAppEngineConfigurationModule.java
@@ -46,7 +46,7 @@ public class GoogleAppEngineConfigurationModule extends AbstractModule {
    private final Module userExecutorModule;
 
    public GoogleAppEngineConfigurationModule() {
-      this(new ExecutorServiceModule(newDirectExecutorService(), newDirectExecutorService()));
+      this(new ExecutorServiceModule(newDirectExecutorService()));
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0a236f59/drivers/gae/src/main/java/org/jclouds/gae/config/MultithreadedAsyncGoogleAppEngineConfigurationModule.java
----------------------------------------------------------------------
diff --git a/drivers/gae/src/main/java/org/jclouds/gae/config/MultithreadedAsyncGoogleAppEngineConfigurationModule.java b/drivers/gae/src/main/java/org/jclouds/gae/config/MultithreadedAsyncGoogleAppEngineConfigurationModule.java
deleted file mode 100644
index cc5d442..0000000
--- a/drivers/gae/src/main/java/org/jclouds/gae/config/MultithreadedAsyncGoogleAppEngineConfigurationModule.java
+++ /dev/null
@@ -1,64 +0,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.
- */
-package org.jclouds.gae.config;
-
-import org.jclouds.concurrent.config.ConfiguresExecutorService;
-import org.jclouds.gae.AsyncGaeHttpCommandExecutorService;
-import org.jclouds.http.HttpCommandExecutorService;
-import org.jclouds.http.config.ConfiguresHttpCommandExecutorService;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Supplier;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- * Configures {@link AsyncGaeHttpCommandExecutorService}.
- */
-@Beta
-@ConfiguresHttpCommandExecutorService
-@ConfiguresExecutorService
-public class MultithreadedAsyncGoogleAppEngineConfigurationModule extends GoogleAppEngineConfigurationModule {
-   public MultithreadedAsyncGoogleAppEngineConfigurationModule() {
-      super(new CurrentRequestExecutorServiceModule());
-   }
-
-   /**
-    * Used when you are creating multiple contexts in the same app.
-    * 
-    * @param currentRequestThreadFactory
-    * @see CurrentRequestExecutorServiceModule#currentRequestThreadFactory
-    */
-   public MultithreadedAsyncGoogleAppEngineConfigurationModule(ListeningExecutorService currentRequestThreadFactory) {
-      super(new CurrentRequestExecutorServiceModule(currentRequestThreadFactory));
-   }
-
-   /**
-    * Used when you are creating multiple contexts in the same app.
-    * 
-    * @param memoizedCurrentRequestExecutorService
-    * @see CurrentRequestExecutorServiceModule#memoizedCurrentRequestExecutorService
-    */
-   public MultithreadedAsyncGoogleAppEngineConfigurationModule(
-         Supplier<ListeningExecutorService> memoizedCurrentRequestExecutorService) {
-      super(memoizedCurrentRequestExecutorService);
-   }
-
-   protected void bindHttpCommandExecutorService() {
-      bind(HttpCommandExecutorService.class).to(AsyncGaeHttpCommandExecutorService.class);
-   }
-
-}