From 0a85d84aca2980038c955aaf311d942e62ee7345 Mon Sep 17 00:00:00 2001 From: anuchan Date: Sun, 4 Sep 2016 18:27:17 -0700 Subject: [PATCH 1/2] applyAsync on a root resource should create a dependency resource only if it is not already created and root resource always needs to be updated in this case --- .../com/microsoft/azure/TaskGroupBase.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) 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 747f0273fa..6de2a3ab46 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 @@ -64,18 +64,31 @@ public Observable executeAsync() { final List> observables = new ArrayList<>(); while (nextNode != null) { final DAGNode thisNode = nextNode; - observables.add(nextNode.data().executeAsync() - .flatMap(new Func1>() { - @Override - public Observable call(T t) { - dag().reportedCompleted(thisNode); - if (dag().isRootNode(thisNode)) { - return Observable.just(t); - } else { + T cachedResult = nextNode.data().result(); + if (cachedResult != null && !this.dag().isRootNode(nextNode)) { + observables.add(Observable.just(cachedResult) + .flatMap(new Func1>() { + @Override + public Observable call(T t) { + dag().reportedCompleted(thisNode); return executeAsync(); } - } - })); + }) + ); + } else { + observables.add(nextNode.data().executeAsync() + .flatMap(new Func1>() { + @Override + public Observable call(T t) { + dag().reportedCompleted(thisNode); + if (dag().isRootNode(thisNode)) { + return Observable.just(t); + } else { + return executeAsync(); + } + } + })); + } nextNode = dag.getNext(); } return Observable.merge(observables); From 9be12ef2534e334e7629f966c62690d83d7e6b95 Mon Sep 17 00:00:00 2001 From: Jianghao Lu Date: Tue, 6 Sep 2016 16:57:19 -0700 Subject: [PATCH 2/2] Fix errors from merge --- .../src/main/java/com/microsoft/rest/ServiceCall.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client-runtime/src/main/java/com/microsoft/rest/ServiceCall.java b/client-runtime/src/main/java/com/microsoft/rest/ServiceCall.java index 218a33f745..960a016b88 100644 --- a/client-runtime/src/main/java/com/microsoft/rest/ServiceCall.java +++ b/client-runtime/src/main/java/com/microsoft/rest/ServiceCall.java @@ -136,7 +136,7 @@ protected void setSubscription(Subscription subscription) { * @param result the service response returned. * @return true if successfully reported; false otherwise. */ - public boolean success(ServiceResponse result) { + public boolean success(T result) { return set(result); }