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()).
