From 6286c699933c6e5789b1ea3d8d512d87a4ba7044 Mon Sep 17 00:00:00 2001 From: Jianghao Lu Date: Wed, 3 Aug 2016 00:29:17 -0700 Subject: [PATCH 1/3] Bring Future like ServiceCall to SDK --- .../java/com/microsoft/azure/AzureClient.java | 14 ++++++++++---- .../java/com/microsoft/azure/TaskGroupBase.java | 17 ++++++++++------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureClient.java b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureClient.java index 39108162d2..729a0a0320 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureClient.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureClient.java @@ -840,7 +840,10 @@ class PostDeletePollingTask extends AsyncPollingTask { this.pollingCallback = new ServiceCallback() { @Override public void failure(Throwable t) { - clientCallback.failure(t); + if (clientCallback != null) { + clientCallback.failure(t); + } + serviceCall.failure(t); } @Override @@ -863,17 +866,20 @@ public void run() { } else { ServiceException serviceException = new ServiceException("No async header in response"); pollingCallback.failure(serviceException); - serviceCall.failure(serviceException); } } else { // Check if operation failed if (AzureAsyncOperation.getFailedStatuses().contains(pollingState.getStatus())) { ServiceException serviceException = new ServiceException("Async operation failed"); - clientCallback.failure(serviceException); + if (clientCallback != null) { + clientCallback.failure(serviceException); + } serviceCall.failure(serviceException); } else { ServiceResponse serviceResponse = new ServiceResponse<>(pollingState.getResource(), pollingState.getResponse()); - clientCallback.success(serviceResponse); + if (clientCallback != null) { + clientCallback.success(serviceResponse); + } serviceCall.success(serviceResponse); } } diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java b/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java index c7b982a8f0..235f963747 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java @@ -68,7 +68,7 @@ public void execute() throws Exception { } @Override - public ServiceCall executeAsync(final ServiceCallback callback) { + public ServiceCall executeAsync(final ServiceCallback callback) { executeReadyTasksAsync(callback); return parallelServiceCall; } @@ -113,7 +113,10 @@ public void failure(Throwable t) { public void success(ServiceResponse result) { self.dag().reportedCompleted(taskNode); if (self.dag().isRootNode(taskNode)) { - callback.success(result); + if (callback != null) { + callback.success(result); + } + parallelServiceCall.success(result); } else { self.executeReadyTasksAsync(callback); } @@ -124,8 +127,8 @@ public void success(ServiceResponse result) { /** * Type represents a set of REST calls running possibly in parallel. */ - private class ParallelServiceCall extends ServiceCall { - private ConcurrentLinkedQueue serviceCalls; + private class ParallelServiceCall extends ServiceCall { + private ConcurrentLinkedQueue> serviceCalls; /** * Creates a ParallelServiceCall. @@ -139,7 +142,7 @@ private class ParallelServiceCall extends ServiceCall { * Cancels all the service calls currently executing. */ public void cancel() { - for (ServiceCall call : this.serviceCalls) { + for (ServiceCall call : this.serviceCalls) { call.cancel(); } } @@ -148,7 +151,7 @@ public void cancel() { * @return true if the call has been canceled; false otherwise. */ public boolean isCancelled() { - for (ServiceCall call : this.serviceCalls) { + for (ServiceCall call : this.serviceCalls) { if (!call.isCanceled()) { return false; } @@ -161,7 +164,7 @@ public boolean isCancelled() { * * @param call the call */ - private void addCall(ServiceCall call) { + private void addCall(ServiceCall call) { this.serviceCalls.add(call); } } From 2701ea45cba10eb3493d60f58101adc466484207 Mon Sep 17 00:00:00 2001 From: Jianghao Lu Date: Fri, 5 Aug 2016 00:14:36 -0700 Subject: [PATCH 2/3] Add missing .failure() to parallel service call --- .../src/main/java/com/microsoft/azure/TaskGroupBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java b/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java index 235f963747..f3a4b231c8 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java @@ -107,6 +107,7 @@ private ServiceCallback taskCallback(final DAGNode taskNode, final Service @Override public void failure(Throwable t) { callback.failure(t); + parallelServiceCall.failure(t); } @Override From 652d62214d79618cac01e39d6e4713fb3ff7f498 Mon Sep 17 00:00:00 2001 From: anuchan Date: Mon, 8 Aug 2016 15:16:46 -0700 Subject: [PATCH 3/3] Exposing Create and CreateAsync in collection that takes variable number of Creatables --- .../src/main/java/com/microsoft/azure/TaskGroupBase.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java b/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java index c7b982a8f0..8a5547cac3 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/TaskGroupBase.java @@ -162,7 +162,9 @@ public boolean isCancelled() { * @param call the call */ private void addCall(ServiceCall call) { - this.serviceCalls.add(call); + if (call != null) { + this.serviceCalls.add(call); + } } } }