Repository: jclouds
Updated Branches:
  refs/heads/master 87eda1508 -> fdaa3fd72


Wrap Image with Optional in DiskURIToImage


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

Branch: refs/heads/master
Commit: fdaa3fd7215ba2916650305f83d5323ae91f8240
Parents: 87eda15
Author: Tomasz Wojtuń <[email protected]>
Authored: Wed Feb 22 08:16:10 2017 +0100
Committer: Ignasi Barrera <[email protected]>
Committed: Tue Mar 14 08:40:11 2017 +0100

----------------------------------------------------------------------
 .../GoogleComputeEngineServiceAdapter.java      |  5 +++--
 ...GoogleComputeEngineServiceContextModule.java |  7 ++++---
 .../functions/InstanceToNodeMetadata.java       | 11 +++++++----
 .../compute/loaders/DiskURIToImage.java         |  9 ++++++---
 .../GoogleComputeEngineServiceMockTest.java     | 20 ++++++++++++++++++++
 .../functions/InstanceToNodeMetadataTest.java   |  5 +++--
 .../disk_get_with_source_snapshot.json          | 12 ++++++++++++
 7 files changed, 55 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
index 99ec4e7..fe54bdf 100644
--- 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
+++ 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceAdapter.java
@@ -62,6 +62,7 @@ import org.jclouds.googlecomputeengine.features.InstanceApi;
 import org.jclouds.location.suppliers.all.JustProvider;
 
 import com.google.common.base.Function;
+import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
@@ -96,7 +97,7 @@ public final class GoogleComputeEngineServiceAdapter
    private final Function<Map<String, ?>, String> windowsPasswordGenerator;
    private final FirewallTagNamingConvention.Factory 
firewallTagNamingConvention;
    private final List<String> imageProjects;
-   private final LoadingCache<URI, Image> diskURIToImage;
+   private final LoadingCache<URI, Optional<Image>> diskURIToImage;
 
    @Inject GoogleComputeEngineServiceAdapter(JustProvider justProvider, 
GoogleComputeEngineApi api,
                                             
Predicate<AtomicReference<Operation>> operationDone,
@@ -105,7 +106,7 @@ public final class GoogleComputeEngineServiceAdapter
                                             Resources resources,
                                             
FirewallTagNamingConvention.Factory firewallTagNamingConvention,
                                             @Named(IMAGE_PROJECTS) String 
imageProjects,
-                                            LoadingCache<URI, Image> 
diskURIToImage) {
+                                            LoadingCache<URI, Optional<Image>> 
diskURIToImage) {
       this.justProvider = justProvider;
       this.api = api;
       this.operationDone = operationDone;

http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
index 10c4d6e..6a9772e 100644
--- 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
+++ 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/config/GoogleComputeEngineServiceContextModule.java
@@ -67,6 +67,7 @@ import org.jclouds.googlecomputeengine.domain.Operation;
 import org.jclouds.location.suppliers.ImplicitLocationSupplier;
 import org.jclouds.location.suppliers.implicit.FirstZone;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
 import com.google.common.base.Predicate;
@@ -134,7 +135,7 @@ public final class GoogleComputeEngineServiceContextModule
 
       bind(FirewallTagNamingConvention.Factory.class).in(Scopes.SINGLETON);
 
-      bind(new TypeLiteral<CacheLoader<URI, Image>>() {
+      bind(new TypeLiteral<CacheLoader<URI, Optional<Image>>>() {
       }).to(DiskURIToImage.class);
 
       bindHttpApi(binder(), Resources.class);
@@ -202,8 +203,8 @@ public final class GoogleComputeEngineServiceContextModule
 
    @Provides
    @Singleton
-   protected LoadingCache<URI, Image> diskURIToImageMap(
-         CacheLoader<URI, Image> in) {
+   protected LoadingCache<URI, Optional<Image>> diskURIToImageMap(
+         CacheLoader<URI, Optional<Image>> in) {
       return CacheBuilder.newBuilder().build(in);
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
index 7e7407e..c531f13 100644
--- 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
+++ 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java
@@ -17,6 +17,7 @@
 package org.jclouds.googlecomputeengine.compute.functions;
 
 import com.google.common.base.Function;
+import com.google.common.base.Optional;
 import com.google.common.base.Splitter;
 import com.google.common.base.Supplier;
 import com.google.common.cache.LoadingCache;
@@ -44,13 +45,13 @@ public final class InstanceToNodeMetadata implements 
Function<Instance, NodeMeta
 
    private final Map<Instance.Status, NodeMetadata.Status> 
toPortableNodeStatus;
    private final GroupNamingConvention nodeNamingConvention;
-   private final LoadingCache<URI, Image> diskURIToImage;
+   private final LoadingCache<URI, Optional<Image>> diskURIToImage;
    private final Supplier<Map<URI, Hardware>> hardwares;
    private final Supplier<Map<URI, Location>> locationsByUri;
 
    @Inject InstanceToNodeMetadata(Map<Instance.Status, NodeMetadata.Status> 
toPortableNodeStatus,
                                   GroupNamingConvention.Factory 
namingConvention,
-                                  LoadingCache<URI, Image> diskURIToImage,
+                                  LoadingCache<URI, Optional<Image>> 
diskURIToImage,
                                   @Memoized Supplier<Map<URI, Hardware>> 
hardwares,
                                   @Memoized Supplier<Map<URI, Location>> 
locationsByUri) {
       this.toPortableNodeStatus = toPortableNodeStatus;
@@ -74,7 +75,9 @@ public final class InstanceToNodeMetadata implements 
Function<Instance, NodeMeta
       //
       // Note: This will be present if we created the node. In the future we 
could choose to make diskToSourceImage
       // a loading cache. That would be more expensive, but could ensure this 
isn't null.
-      Image image = diskURIToImage.getUnchecked(input.disks().get(0).source());
+
+      URI diskSource = input.disks().get(0).source();
+      Optional<Image> image = diskURIToImage.getUnchecked(diskSource);
 
       Hardware hardware;
       if (isCustomMachineTypeURI(input.machineType())) {
@@ -89,7 +92,7 @@ public final class InstanceToNodeMetadata implements 
Function<Instance, NodeMeta
              .providerId(input.id())
              .hostname(input.name())
              .location(zone)
-             .imageId(image != null ? image.selfLink().toString() : null)
+             .imageId(image.isPresent() ? image.get().selfLink().toString() : 
null)
              .hardware(hardware)
              .status(input.status() != null ? 
toPortableNodeStatus.get(input.status()) : Status.UNRECOGNIZED)
              .tags(input.tags().items())

http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java
 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java
index 0dccaf4..0f98098 100644
--- 
a/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java
+++ 
b/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/loaders/DiskURIToImage.java
@@ -22,6 +22,7 @@ import javax.inject.Singleton;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
 
+import com.google.common.base.Optional;
 import com.google.common.cache.CacheLoader;
 import org.jclouds.googlecomputeengine.compute.functions.Resources;
 import org.jclouds.googlecomputeengine.domain.Disk;
@@ -30,7 +31,7 @@ import org.jclouds.logging.Logger;
 
 
 @Singleton
-public class DiskURIToImage extends CacheLoader<URI, Image> {
+public class DiskURIToImage extends CacheLoader<URI, Optional<Image>> {
    @Resource
    protected Logger logger = Logger.NULL;
 
@@ -42,10 +43,12 @@ public class DiskURIToImage extends CacheLoader<URI, Image> 
{
    }
 
    @Override
-   public Image load(URI key) throws ExecutionException {
+   public Optional<Image> load(URI key) throws ExecutionException {
       try {
          Disk disk = resources.disk(key);
-         return resources.image(disk.sourceImage());
+         URI sourceImage = disk.sourceImage();
+         Image image = sourceImage != null ? resources.image(sourceImage) : 
null;
+         return Optional.fromNullable(image);
       } catch (Exception e) {
          throw new ExecutionException(message(key, e), e);
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java
 
b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java
index 4eb7aef..279f09d 100644
--- 
a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java
+++ 
b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/GoogleComputeEngineServiceMockTest.java
@@ -148,6 +148,26 @@ public class GoogleComputeEngineServiceMockTest extends 
BaseGoogleComputeEngineA
       assertSent(server, "GET", "/projects/party/aggregated/machineTypes");
    }
 
+
+   public void listNodesWithSnapshotSource() throws Exception {
+      server.enqueue(aggregatedListWithInstanceNetworkAndStatus("test-0", 
"test-network", RUNNING));
+      server.enqueue(singleRegionSingleZoneResponse());
+      server.enqueue(jsonResponse("/disk_get_with_source_snapshot.json"));
+      server.enqueue(jsonResponse("/aggregated_machinetype_list.json"));
+
+      Set<? extends ComputeMetadata> nodes = computeService().listNodes();
+      assertEquals(nodes.size(), 1);
+      NodeMetadata node = (NodeMetadata) nodes.iterator().next();
+      String imageId = node.getImageId();
+      assertEquals(imageId, null);
+      assertSent(server, "GET", "/projects/party/aggregated/instances");
+      assertSent(server, "GET", "/projects/party/regions");
+      assertSent(server, "GET", 
"/projects/party/zones/us-central1-a/disks/test");
+      assertSent(server, "GET", "/projects/party/aggregated/machineTypes");
+   }
+
+
+
    public void createNodeWhenFirewallDoesNotExist() throws Exception {
       server.enqueue(singleRegionSingleZoneResponse());
       server.enqueue(jsonResponse("/image_list.json"));

http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java
 
b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java
index 93ee6c5..e2d679b 100644
--- 
a/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java
+++ 
b/providers/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadataTest.java
@@ -18,6 +18,7 @@ package org.jclouds.googlecomputeengine.compute.functions;
 
 import com.google.common.base.Function;
 import com.google.common.base.Functions;
+import com.google.common.base.Optional;
 import com.google.common.base.Predicate;
 import com.google.common.base.Supplier;
 import com.google.common.base.Suppliers;
@@ -176,8 +177,8 @@ public class InstanceToNodeMetadataTest {
             }
          };
 
-      Map<URI, Image> imageMap = 
ImmutableMap.of(instance.disks().get(0).source(),
-            new ParseImageTest().expected());
+      Map<URI, Optional<Image>> imageMap = 
ImmutableMap.of(instance.disks().get(0).source(),
+            Optional.of(new ParseImageTest().expected()));
 
       return new InstanceToNodeMetadata(
          ImmutableMap.<Instance.Status, NodeMetadata.Status>builder()

http://git-wip-us.apache.org/repos/asf/jclouds/blob/fdaa3fd7/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json
----------------------------------------------------------------------
diff --git 
a/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json
 
b/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json
new file mode 100644
index 0000000..cf5db84
--- /dev/null
+++ 
b/providers/google-compute-engine/src/test/resources/disk_get_with_source_snapshot.json
@@ -0,0 +1,12 @@
+{
+   "kind": "compute#disk",
+   "id": "13050421646334304115",
+   "creationTimestamp": "2012-11-25T01:38:48.306",
+   "selfLink": 
"https://www.googleapis.com/compute/v1/projects/party/zones/us-central1-a/disks/test";,
+   "name": "test",
+   "sizeGb": "1",
+   "zone": 
"https://www.googleapis.com/compute/v1/projects/party/zones/us-central1-a";,
+   "status": "READY",
+   "type": 
"https://www.googleapis.com/compute/v1/projects/studied-point-720/zones/us-central1-a/diskTypes/pd-standard";,
+   "sourceSnapshot": 
"https://www.googleapis.com/compute/v1/projects/party/global/snapshots/snapshot";
+}
\ No newline at end of file

Reply via email to