Repository: jclouds-labs
Updated Branches:
  refs/heads/master 7df28d259 -> 7dd02a010


[JCLOUDS-1135] improve performance of AzureComputeServiceAdapter.getNode

If the deployment name is the same as cloud service name, which it is
for all nodes created by the JClouds Azure provider, the getNode(id)
method will no longer list all existing cloud services.


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

Branch: refs/heads/master
Commit: 7dd02a010a8275aea2c3953aac71c5dec22eeeeb
Parents: 7df28d2
Author: Ladislav Thon <[email protected]>
Authored: Fri Jul 1 16:13:19 2016 +0200
Committer: Ignasi Barrera <[email protected]>
Committed: Tue Jul 12 12:29:15 2016 +0200

----------------------------------------------------------------------
 .../compute/AzureComputeServiceAdapter.java     | 33 +++++++++++++-------
 1 file changed, 22 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7dd02a01/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
 
b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
index ecf6c0d..7a65e6d 100644
--- 
a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
+++ 
b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
@@ -265,24 +265,35 @@ public class AzureComputeServiceAdapter implements 
ComputeServiceAdapter<Deploym
       return api.getLocationApi().list();
    }
 
+   /** Returns the {@code deployment} argument itself if already settled, 
otherwise {@code null}. */
+   private Deployment isSettled(Deployment deployment) {
+      return deployment == null || deployment.roleInstanceList().isEmpty()
+              ? null
+              : FluentIterable.from(deployment.roleInstanceList()).allMatch(
+                      new Predicate<RoleInstance>() {
+                         @Override
+                         public boolean apply(final RoleInstance input) {
+                            return input != null && 
!input.instanceStatus().isTransient();
+                         }
+                      })
+                      ? deployment
+                      : null;
+   }
+
    @Override
    public Deployment getNode(final String id) {
+      // all nodes created by this provider will always have a cloud service 
name equal to deployment name
+      final Deployment deployment = api.getDeploymentApiForService(id).get(id);
+      if (deployment != null) {
+         return isSettled(deployment);
+      }
+
       return FluentIterable.from(api.getCloudServiceApi().list()).
               transform(new Function<CloudService, Deployment>() {
                  @Override
                  public Deployment apply(final CloudService input) {
                     final Deployment deployment = 
api.getDeploymentApiForService(input.name()).get(id);
-                    return deployment == null || 
deployment.roleInstanceList().isEmpty()
-                            ? null
-                            : 
FluentIterable.from(deployment.roleInstanceList()).allMatch(
-                                    new Predicate<RoleInstance>() {
-                                       @Override
-                                       public boolean apply(final RoleInstance 
input) {
-                                          return input != null && 
!input.instanceStatus().isTransient();
-                                       }
-                                    })
-                                    ? deployment
-                                    : null;
+                    return isSettled(deployment);
                  }
               }).
               firstMatch(notNull()).

Reply via email to