You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2013/10/19 00:30:55 UTC

[1/2] git commit: Introduce listing blobs with detailed metadata

Updated Branches:
  refs/heads/1.6.x 9e8d3b1c9 -> d344e52bf


Introduce listing blobs with detailed metadata

TODO: partial information returned already by list()?


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

Branch: refs/heads/1.6.x
Commit: 3000d85dfcd104fba24d7b058aa0c3cf5db4c849
Parents: 9e8d3b1
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Aug 1 11:22:35 2013 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Wed Sep 25 21:46:10 2013 -0700

----------------------------------------------------------------------
 .../commands/blobstore/BlobListCommand.java     | 34 ++++++++++++++++++--
 .../commands/blobstore/BlobMetadataCommand.java | 21 +-----------
 .../blobstore/BlobStoreCommandWithOptions.java  | 25 ++++++++++++++
 3 files changed, 57 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/3000d85d/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
index f541b60..c5c16eb 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
@@ -21,14 +21,19 @@ import java.io.PrintStream;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.Callable;
 
 import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
 
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
 import org.apache.felix.gogo.commands.CommandException;
 import org.apache.felix.gogo.commands.Option;
 import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.domain.BlobMetadata;
 import org.jclouds.blobstore.domain.PageSet;
 import org.jclouds.blobstore.domain.StorageMetadata;
 import org.jclouds.blobstore.options.ListContainerOptions;
@@ -47,11 +52,14 @@ public class BlobListCommand extends BlobStoreCommandWithOptions {
    @Argument(index = 1, name = "directoryPath", description = "List blobs only in this directory path", required = false)
    String directoryPath;
 
+   @Option(name = "-d", aliases = "--details", description = "Display blob details", required = false, multiValued = false)
+   boolean details;
+
    private static final PrintStream out = System.out;
 
    @Override
    protected Object doExecute() throws Exception {
-      BlobStore blobStore = getBlobStore();
+      final BlobStore blobStore = getBlobStore();
 
       ListContainerOptions options = ListContainerOptions.Builder.recursive();
       if (directoryPath != null) {
@@ -69,8 +77,28 @@ public class BlobListCommand extends BlobStoreCommandWithOptions {
          }
 
          Collections.sort(blobNames);
-         for (String blobName : blobNames) {
-            out.println(blobName);
+         if (details) {
+            ListeningExecutorService executor = blobStore.getContext().utils().userExecutor();
+            Collection<ListenableFuture<BlobMetadata>> futures = Lists.newArrayList();
+            for (final String blobName : blobNames) {
+               futures.add(executor.submit(new Callable<BlobMetadata>() {
+                  @Override
+                  public BlobMetadata call() {
+                     return blobStore.blobMetadata(containerName, blobName);
+                  }
+               }));
+            }
+            Collection<BlobMetadata> metadatas = Futures.allAsList(futures).get();
+
+            for (BlobMetadata metadata : metadatas) {
+                out.println(metadata.getName() + ":");
+                BlobStoreCommandWithOptions.printMetadata(out, metadata.getContentMetadata());
+                out.println();
+            }
+         } else {
+            for (String blobName : blobNames) {
+               out.println(blobName);
+            }
          }
 
          String marker = blobStoreMetadatas.getNextMarker();

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/3000d85d/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
index 0549e6b..915b531 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobMetadataCommand.java
@@ -22,7 +22,6 @@ import java.util.Date;
 import java.util.List;
 
 import com.google.common.collect.Lists;
-import com.google.common.io.BaseEncoding;
 
 import org.apache.felix.gogo.commands.Argument;
 import org.apache.felix.gogo.commands.Command;
@@ -57,29 +56,11 @@ public class BlobMetadataCommand extends BlobStoreCommandWithOptions {
             throw new KeyNotFoundException(containerName, blobName, "while getting metadata");
          }
 
-         ContentMetadata contentMetdata = blobMetadata.getContentMetadata();
          out.println(blobName + ":");
-
-         printMetadata("Content-Disposition", contentMetdata.getContentDisposition());
-         printMetadata("Content-Encoding", contentMetdata.getContentEncoding());
-         printMetadata("Content-Language", contentMetdata.getContentLanguage());
-         byte[] contentMD5 = contentMetdata.getContentMD5();
-         if (contentMD5 != null) {
-            printMetadata("Content-MD5",
-                  BaseEncoding.base16().lowerCase().encode(contentMD5));
-         }
-         printMetadata("Content-Type", contentMetdata.getContentType());
-         printMetadata("Expires", contentMetdata.getExpires());
-         printMetadata("Length", contentMetdata.getContentLength());
+         BlobStoreCommandWithOptions.printMetadata(out, blobMetadata.getContentMetadata());
 
          out.println("");
       }
       return null;
    }
-
-   private static void printMetadata(String key, Object value) {
-      if (value != null) {
-         out.println(String.format("    %s: %s", key, value));
-      }
-   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/3000d85d/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
index 28d104e..3bd5026 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandWithOptions.java
@@ -19,6 +19,7 @@ package org.jclouds.karaf.commands.blobstore;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.io.BaseEncoding;
 import com.google.inject.Module;
 import org.apache.felix.gogo.commands.Option;
 import org.apache.felix.service.command.CommandSession;
@@ -26,12 +27,14 @@ import org.jclouds.Constants;
 import org.jclouds.ContextBuilder;
 import org.jclouds.blobstore.BlobStore;
 import org.jclouds.blobstore.BlobStoreContext;
+import org.jclouds.io.ContentMetadata;
 import org.jclouds.karaf.utils.EnvHelper;
 import org.jclouds.karaf.utils.ServiceHelper;
 import org.jclouds.logging.log4j.config.Log4JLoggingModule;
 
 import java.io.IOException;
 import java.io.File;
+import java.io.PrintStream;
 import java.util.Collections;
 import java.util.List;
 
@@ -150,4 +153,26 @@ public abstract class BlobStoreCommandWithOptions extends BlobStoreCommandBase {
       }
       return blobStore;
    }
+
+
+   static void printMetadata(PrintStream out, ContentMetadata metadata) {
+      printMetadata(out, "Content-Disposition", metadata.getContentDisposition());
+      printMetadata(out, "Content-Encoding", metadata.getContentEncoding());
+      printMetadata(out, "Content-Language", metadata.getContentLanguage());
+      byte[] contentMD5 = metadata.getContentMD5();
+      if (contentMD5 != null) {
+         printMetadata(out, "Content-MD5",
+               BaseEncoding.base16().lowerCase().encode(contentMD5));
+      }
+      printMetadata(out, "Content-Type", metadata.getContentType());
+      printMetadata(out, "Expires", metadata.getExpires());
+      printMetadata(out, "Length", metadata.getContentLength());
+   }
+
+   static void printMetadata(PrintStream out, String key, Object value) {
+      if (value != null) {
+         out.println(String.format("    %s: %s", key, value));
+      }
+   }
+
 }


[2/2] git commit: JCLOUDS-301: work around OOM with blobstore list

Posted by ga...@apache.org.
JCLOUDS-301: work around OOM with blobstore list


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

Branch: refs/heads/1.6.x
Commit: d344e52bf447b7b367c1f596c60be74e600163bd
Parents: 3000d85
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Sep 30 13:29:36 2013 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Oct 18 15:30:40 2013 -0700

----------------------------------------------------------------------
 .../java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/d344e52b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
index c5c16eb..4b24fb5 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobListCommand.java
@@ -72,7 +72,7 @@ public class BlobListCommand extends BlobStoreCommandWithOptions {
 
          for (StorageMetadata blobMetadata : blobStoreMetadatas) {
             String blobName = blobMetadata.getName();
-            cacheProvider.getProviderCacheForType("blob").put(blobMetadata.getProviderId(), blobName);
+            // do not add to cacheProvider since long lists will cause OutOfMemoryError
             blobNames.add(blobName);
          }