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 2017/11/25 05:17:10 UTC

[08/11] jclouds git commit: Implement partial prefix support for Atmos

Implement partial prefix support for Atmos

Atmos only supports listing by directories while other blobstores
allow listing via arbitrary prefixes.  Allow requests which list
directories via both prefix and delimiter = "/" to succeed instead of
failing all requests.  Also change a test which specified recursive to
instead be delimiter = "/".  Fixes gaul/s3proxy#244.


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

Branch: refs/heads/2.0.x
Commit: c61e8bc28b75687375c503de080498633e999856
Parents: b958090
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Oct 30 12:44:25 2017 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri Nov 24 19:25:35 2017 -0800

----------------------------------------------------------------------
 .../java/org/jclouds/atmos/blobstore/AtmosBlobStore.java    | 9 ++++++++-
 .../integration/AtmosContainerIntegrationLiveTest.java      | 7 +------
 .../integration/internal/BaseContainerIntegrationTest.java  | 2 +-
 3 files changed, 10 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/c61e8bc2/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
index 1550932..ca84fe8 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
@@ -220,8 +220,15 @@ public class AtmosBlobStore extends BaseBlobStore {
    @Override
    public PageSet<? extends StorageMetadata> list(String container,
             org.jclouds.blobstore.options.ListContainerOptions options) {
-      checkArgument(Strings.isNullOrEmpty(options.getPrefix()), "does not support prefixes");
+      // TODO: recursive?
+      if (!Strings.nullToEmpty(options.getDelimiter()).equals("/") && !Strings.isNullOrEmpty(options.getPrefix())) {
+         throw new IllegalArgumentException("Atmos can only list via prefix if delimiter is / and the prefix matches an existing directory");
+      }
       container = AtmosUtils.adjustContainerIfDirOptionPresent(container, options);
+      if (!Strings.isNullOrEmpty(options.getPrefix())) {
+         // this only works when the prefix exactly matches a directory, the common usage
+         container += "/" + options.getPrefix();
+      }
       ListOptions nativeOptions = container2ContainerListOptions.apply(options);
       // until includeMeta() option works for namespace interface
       PageSet<? extends StorageMetadata> list = container2ResourceList.apply(sync.listDirectory(container,

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c61e8bc2/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java
index c29f80c..4814918 100644
--- a/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java
+++ b/apis/atmos/src/test/java/org/jclouds/atmos/blobstore/integration/AtmosContainerIntegrationLiveTest.java
@@ -58,16 +58,11 @@ public class AtmosContainerIntegrationLiveTest extends BaseContainerIntegrationT
 
    @Override
    public void testContainerListWithPrefix() {
-      throw new SkipException("Prefix option has not been plumbed down to Atmos");
+      throw new SkipException("Atmos can only list prefix which matches an existing directory");
    }
 
    @Override
    public void testDelimiterList() {
       throw new SkipException("Delimiter support is not yet implemented");
    }
-
-   @Override
-   public void testListContainerPrefix() throws InterruptedException {
-      throw new SkipException("Prefix support is not yet implemented");
-   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/c61e8bc2/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
index e6cb0ae..554c75a 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
@@ -310,7 +310,7 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
          add15UnderRoot(containerName);
          awaitConsistency();
          PageSet<? extends StorageMetadata> container = view.getBlobStore().list(
-               containerName, new ListContainerOptions().recursive().prefix(prefix));
+               containerName, new ListContainerOptions().prefix(prefix).delimiter("/"));
          assert container.getNextMarker() == null;
          assertEquals(container.size(), 10);
       } finally {