Repository: jclouds Updated Branches: refs/heads/master 0960ea496 -> af05e24ae
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/af05e24a Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/af05e24a Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/af05e24a Branch: refs/heads/master Commit: af05e24ae9bd05d4f359bc3eea34f8b52646b10b Parents: 0960ea4 Author: Andrew Gaul <[email protected]> Authored: Mon Oct 30 12:44:25 2017 -0700 Committer: Andrew Gaul <[email protected]> Committed: Mon Oct 30 17:51:35 2017 -0700 ---------------------------------------------------------------------- .../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/af05e24a/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 c999743..a8d6439 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/af05e24a/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/af05e24a/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 {
