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 2015/08/20 21:42:38 UTC
[2/7] jclouds git commit: JCLOUDS-992: LocalBlobStore - use FOLDER
for DIR.
JCLOUDS-992: LocalBlobStore - use FOLDER for DIR.
Changed the LocalBlobStore to use FOLDER, as opposed to RELATIVE_PATH
when creating directories. Changed the delete keys strategy to treat
FOLDER blobs as regular blobs.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/3757a64a
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/3757a64a
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/3757a64a
Branch: refs/heads/master
Commit: 3757a64abf7b93ca1d97b73b10cba42cb590455f
Parents: 0c5a3db
Author: Timur Alperovich <ti...@gmail.com>
Authored: Wed Aug 19 14:07:27 2015 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Aug 20 12:42:11 2015 -0700
----------------------------------------------------------------------
.../blobstore/config/LocalBlobStore.java | 4 +--
.../strategy/internal/DeleteAllKeysInList.java | 6 ++--
.../internal/MarkerFileMkdirStrategy.java | 2 +-
.../internal/BaseContainerIntegrationTest.java | 2 +-
.../strategy/internal/ListContainerTest.java | 33 ++++++++++++++++++--
5 files changed, 36 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/3757a64a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index 4a86087..1f0cca5 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -477,8 +477,8 @@ public final class LocalBlobStore implements BlobStore {
if (name.startsWith(prefix)) {
String unprefixedName = name.replaceFirst(prefix, "");
if (unprefixedName.equals("")) {
- // we are the prefix in this case, return false
- return false;
+ // a blob that matches the prefix should also be returned
+ return true;
}
return unprefixedName.indexOf(delimiter) == -1;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/3757a64a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/DeleteAllKeysInList.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/DeleteAllKeysInList.java b/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/DeleteAllKeysInList.java
index 7bd75e4..49cfe20 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/DeleteAllKeysInList.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/DeleteAllKeysInList.java
@@ -241,6 +241,7 @@ public class DeleteAllKeysInList implements ClearListStrategy, ClearContainerStr
final ListenableFuture<Void> blobDelFuture;
switch (md.getType()) {
+ case FOLDER:
case BLOB:
blobDelFuture = executorService.submit(new Callable<Void>() {
@Override
@@ -250,9 +251,6 @@ public class DeleteAllKeysInList implements ClearListStrategy, ClearContainerStr
}
});
break;
- case FOLDER:
- blobDelFuture = deleteDirectory(options, containerName, fullPath);
- break;
case RELATIVE_PATH:
blobDelFuture = deleteDirectory(options, containerName,
md.getName());
@@ -415,7 +413,7 @@ public class DeleteAllKeysInList implements ClearListStrategy, ClearContainerStr
// TODO: Remove this retry loop.
while (retries > 0) {
deleteFailure.set(false);
- executeOneIteration(containerName, listOptions.clone(), semaphore,
+ executeOneIteration(containerName, listOptions, semaphore,
outstandingFutures, deleteFailure, /*blocking=*/ false);
waitForCompletion(semaphore, outstandingFutures);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/3757a64a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MarkerFileMkdirStrategy.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MarkerFileMkdirStrategy.java b/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MarkerFileMkdirStrategy.java
index d3e56a0..cbb8cfe 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MarkerFileMkdirStrategy.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/strategy/internal/MarkerFileMkdirStrategy.java
@@ -49,7 +49,7 @@ public class MarkerFileMkdirStrategy implements MkdirStrategy {
public void execute(String containerName, String directory) {
blobStore.putBlob(
containerName,
- blobStore.blobBuilder(directory + directorySuffix).type(StorageType.RELATIVE_PATH)
+ blobStore.blobBuilder(directory + directorySuffix).type(StorageType.FOLDER)
.payload(newByteArrayPayload(new byte[] {})).contentType("application/directory").build());
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/3757a64a/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 fda30a4..ce719e0 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
@@ -261,7 +261,7 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
// should have only the 2 level-deep directory above
container = view.getBlobStore().list(containerName, inDirectory(directory));
assert container.getNextMarker() == null;
- assert container.size() == 1 : container;
+ assertThat(container).hasSize(0);
view.getBlobStore().createDirectory(containerName, directory + "/" + directory);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/3757a64a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java b/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java
index 3a87d37..421cb2d 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/strategy/internal/ListContainerTest.java
@@ -18,9 +18,6 @@ package org.jclouds.blobstore.strategy.internal;
import static org.assertj.core.api.Assertions.assertThat;
-import com.google.common.collect.Iterables;
-import com.google.inject.Injector;
-
import org.jclouds.ContextBuilder;
import org.jclouds.blobstore.BlobStore;
import org.jclouds.blobstore.domain.PageSet;
@@ -32,6 +29,10 @@ import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import com.google.common.collect.Iterables;
+import com.google.common.io.ByteSource;
+import com.google.inject.Injector;
+
@Test(testName = "PrefixTest", singleThreaded = true)
public class ListContainerTest {
private BlobStore blobStore;
@@ -51,6 +52,16 @@ public class ListContainerTest {
}
}
+ public void testListBlobWithPrefixAndDelimiter() {
+ String containerName = "test";
+ String name = "asdf/";
+ blobStore.createContainerInLocation(null, containerName);
+ blobStore.putBlob(containerName, blobStore.blobBuilder(name).payload("").build());
+ Iterable<? extends StorageMetadata> results = concatter.execute(containerName,
+ ListContainerOptions.Builder.prefix(name).delimiter(name));
+ assertThat(results).hasSize(1);
+ }
+
public void testListWithPrefix() {
String containerName = "prefix";
String prefix = "foo";
@@ -125,7 +136,9 @@ public class ListContainerTest {
Iterable<? extends StorageMetadata> results = concatter.execute(containerName, ListContainerOptions.NONE);
assertThat(results).hasSize(2);
assertThat(Iterables.get(results, 0).getName()).isEqualTo(directory);
+ assertThat(Iterables.get(results, 0).getType()).isEqualTo(StorageType.FOLDER);
assertThat(Iterables.get(results, 1).getName()).isEqualTo(directory + '/');
+ assertThat(Iterables.get(results, 1).getType()).isEqualTo(StorageType.RELATIVE_PATH);
}
public void testListMarkers() {
@@ -147,6 +160,17 @@ public class ListContainerTest {
assertThat(results.getNextMarker()).isEqualTo(null);
}
+ public void testListBlobEndsWithDelimiter() {
+ String containerName = "testListBlobEndsWithDelimiter";
+ blobStore.createContainerInLocation(null, containerName);
+ blobStore.putBlob(containerName, blobStore.blobBuilder("foo/").payload(ByteSource.empty()).build());
+ PageSet<? extends StorageMetadata> results = blobStore.list(containerName,
+ ListContainerOptions.Builder.prefix("foo/"));
+ assertThat(results.size()).isEqualTo(1);
+ assertThat(Iterables.get(results, 0).getName()).isEqualTo("foo/");
+ assertThat(Iterables.get(results, 0).getType()).isNotEqualTo(StorageType.RELATIVE_PATH);
+ }
+
public void testDirectoryListing() {
String containerName = "testDirectoryListing";
blobStore.createContainerInLocation(null, containerName);
@@ -161,11 +185,14 @@ public class ListContainerTest {
results = blobStore.list(containerName, ListContainerOptions.Builder.inDirectory("dir"));
assertThat(results.size()).isEqualTo(1);
assertThat(Iterables.get(results, 0).getName()).isEqualTo("dir/dir");
+ assertThat(Iterables.get(results, 0).getType()).isEqualTo(StorageType.FOLDER);
blobStore.putBlob(containerName, blobStore.blobBuilder("dir/dir/blob").payload("").build());
results = blobStore.list(containerName, ListContainerOptions.Builder.inDirectory("dir"));
assertThat(results.size()).isEqualTo(2);
assertThat(Iterables.get(results, 0).getName()).isEqualTo("dir/dir");
+ assertThat(Iterables.get(results, 0).getType()).isEqualTo(StorageType.FOLDER);
assertThat(Iterables.get(results, 1).getName()).isEqualTo("dir/dir/");
+ assertThat(Iterables.get(results, 1).getType()).isEqualTo(StorageType.RELATIVE_PATH);
}
}