You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2014/11/20 16:54:43 UTC

jclouds git commit: JCLOUDS-781 cluster regions is a subset of regions.

Repository: jclouds
Updated Branches:
  refs/heads/master dd743e58b -> ba868af55


JCLOUDS-781 cluster regions is a subset of regions.


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

Branch: refs/heads/master
Commit: ba868af5534b5d6558b8501cb0f6edcd5116782f
Parents: dd743e5
Author: Adrian Cole <ac...@twitter.com>
Authored: Wed Nov 19 14:26:09 2014 -0800
Committer: Adrian Cole <ad...@gmail.com>
Committed: Thu Nov 20 07:54:26 2014 -0800

----------------------------------------------------------------------
 .../compute/suppliers/AWSEC2ImageSupplier.java  | 47 ++++++++++----------
 1 file changed, 24 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/ba868af5/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2ImageSupplier.java
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2ImageSupplier.java b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2ImageSupplier.java
index 16b472e..066204b 100644
--- a/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2ImageSupplier.java
+++ b/providers/aws-ec2/src/main/java/org/jclouds/aws/ec2/compute/suppliers/AWSEC2ImageSupplier.java
@@ -16,8 +16,12 @@
  */
 package org.jclouds.aws.ec2.compute.suppliers;
 
+import static com.google.common.base.Predicates.in;
+import static com.google.common.base.Throwables.propagate;
 import static com.google.common.collect.Iterables.concat;
+import static com.google.common.collect.Iterables.filter;
 import static com.google.common.collect.Iterables.transform;
+import static org.jclouds.Constants.PROPERTY_USER_THREADS;
 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_AMI_QUERY;
 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMI_QUERY;
 import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_REGIONS;
@@ -28,9 +32,7 @@ import java.util.Set;
 import javax.annotation.Resource;
 import javax.inject.Inject;
 import javax.inject.Named;
-import javax.inject.Singleton;
 
-import org.jclouds.Constants;
 import org.jclouds.aws.ec2.compute.config.ClusterCompute;
 import org.jclouds.aws.ec2.compute.config.ImageQuery;
 import org.jclouds.compute.domain.Image;
@@ -43,7 +45,6 @@ import org.jclouds.logging.Logger;
 import com.google.common.base.Function;
 import com.google.common.base.Splitter;
 import com.google.common.base.Supplier;
-import com.google.common.base.Throwables;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ForwardingSet;
 import com.google.common.collect.ImmutableMultimap;
@@ -54,14 +55,11 @@ import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 
-@Singleton
-public class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
-   
-   // TODO could/should this sub-class EC2ImageSupplier? Or does that confuse guice?
-   
+public final class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
+
    @Resource
    @Named(ComputeServiceConstants.COMPUTE_LOGGER)
-   protected Logger logger = Logger.NULL;
+   private Logger logger = Logger.NULL;
    
    private final Set<String> clusterComputeIds;
    private final CallForImages.Factory factory;
@@ -72,12 +70,11 @@ public class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
    private final Iterable<String> clusterRegions;
    private final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache;
    
-   @Inject
-   protected AWSEC2ImageSupplier(@Region Supplier<Set<String>> regions,
-            @ImageQuery Map<String, String> queries, @Named(PROPERTY_EC2_CC_REGIONS) String clusterRegions,
-            Supplier<LoadingCache<RegionAndName, ? extends Image>> cache,
-            CallForImages.Factory factory, @ClusterCompute Set<String> clusterComputeIds,
-            @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
+   @Inject AWSEC2ImageSupplier(@Region Supplier<Set<String>> regions, @ImageQuery Map<String, String> queries,
+         @Named(PROPERTY_EC2_CC_REGIONS) String clusterRegions,
+         Supplier<LoadingCache<RegionAndName, ? extends Image>> cache, CallForImages.Factory factory,
+         @ClusterCompute Set<String> clusterComputeIds,
+         @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor) {
       this.factory = factory;
       this.regions = regions;
       this.queries = queries;
@@ -93,13 +90,16 @@ public class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
       String amiQuery = queries.get(PROPERTY_EC2_AMI_QUERY);
       String ccAmiQuery = queries.get(PROPERTY_EC2_CC_AMI_QUERY);
 
-      ListenableFuture<Iterable<Image>> normalImages = images(regions.get(), amiQuery, PROPERTY_EC2_AMI_QUERY);
+      Set<String> regionIds = regions.get();
+
+      ListenableFuture<Iterable<Image>> normalImages = images(regionIds, amiQuery, PROPERTY_EC2_AMI_QUERY);
       ImmutableSet<Image> clusterImages;
       try {
-         clusterImages = ImmutableSet.copyOf(images(clusterRegions, ccAmiQuery, PROPERTY_EC2_CC_AMI_QUERY).get());
+         clusterImages = ImmutableSet
+               .copyOf(images(filter(clusterRegions, in(regionIds)), ccAmiQuery, PROPERTY_EC2_CC_AMI_QUERY).get());
       } catch (Exception e) {
          logger.warn(e, "Error parsing images in query %s", ccAmiQuery);
-         throw Throwables.propagate(e);
+         throw propagate(e);
       }
       Iterables.addAll(clusterComputeIds, transform(clusterImages, new Function<Image, String>() {
 
@@ -109,20 +109,21 @@ public class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
          }
 
       }));
+
       Iterable<? extends Image> parsedImages;
       try {
          parsedImages = ImmutableSet.copyOf(concat(clusterImages, normalImages.get()));
       } catch (Exception e) {
          logger.warn(e, "Error parsing images in query %s", amiQuery);
-         throw Throwables.propagate(e);
+         throw propagate(e);
       }
 
-      final Map<RegionAndName, ? extends Image> imageMap = ImagesToRegionAndIdMap.imagesToMap(parsedImages);
+      Map<RegionAndName, ? extends Image> imageMap = ImagesToRegionAndIdMap.imagesToMap(parsedImages);
       cache.get().invalidateAll();
-      cache.get().asMap().putAll(Map.class.cast(imageMap));
+      cache.get().putAll(Map.class.cast(imageMap));
       logger.debug("<< images(%d)", imageMap.size());
-      
-      // TODO Used to be mutable; was this assumed anywhere?
+
+      // Forwarding so that later changes to the underlying cache are visible.
       return new ForwardingSet<Image>() {
          protected Set<Image> delegate() {
             return ImmutableSet.copyOf(cache.get().asMap().values());