workaround to walrus not having NextMarker in bucket listing

This commit is contained in:
Adrian Cole 2011-01-30 02:32:00 -08:00
parent 672db20eb1
commit b62a6309be
5 changed files with 28 additions and 12 deletions

View File

@ -19,7 +19,7 @@
package org.jclouds.s3.domain.internal; package org.jclouds.s3.domain.internal;
import java.util.HashSet; import java.util.LinkedHashSet;
import java.util.Set; import java.util.Set;
import org.jclouds.s3.domain.ListBucketResponse; import org.jclouds.s3.domain.ListBucketResponse;
@ -32,8 +32,7 @@ import com.google.common.collect.Iterables;
* @author Adrian Cole * @author Adrian Cole
* *
*/ */
public class ListBucketResponseImpl extends HashSet<ObjectMetadata> implements public class ListBucketResponseImpl extends LinkedHashSet<ObjectMetadata> implements ListBucketResponse {
ListBucketResponse {
/** The serialVersionUID */ /** The serialVersionUID */
private static final long serialVersionUID = -4475709781001190244L; private static final long serialVersionUID = -4475709781001190244L;
protected final String name; protected final String name;
@ -45,9 +44,8 @@ public class ListBucketResponseImpl extends HashSet<ObjectMetadata> implements
protected final Set<String> commonPrefixes; protected final Set<String> commonPrefixes;
protected final boolean truncated; protected final boolean truncated;
public ListBucketResponseImpl(String name, Iterable<ObjectMetadata> contents, String prefix, public ListBucketResponseImpl(String name, Iterable<ObjectMetadata> contents, String prefix, String marker,
String marker, String nextMarker, int maxKeys, String delimiter, boolean isTruncated, String nextMarker, int maxKeys, String delimiter, boolean isTruncated, Set<String> commonPrefixes) {
Set<String> commonPrefixes) {
Iterables.addAll(this, contents); Iterables.addAll(this, contents);
this.name = name; this.name = name;
this.prefix = prefix; this.prefix = prefix;

View File

@ -71,8 +71,9 @@ public class ListBucketHandler extends ParseSax.HandlerWithResult<ListBucketResp
} }
public ListBucketResponse getResult() { public ListBucketResponse getResult() {
return new ListBucketResponseImpl(bucketName, contents, prefix, marker, nextMarker, maxResults, delimiter, return new ListBucketResponseImpl(bucketName, contents, prefix, marker,
isTruncated, commonPrefixes); (isTruncated && nextMarker == null) ? currentKey : nextMarker, maxResults, delimiter, isTruncated,
commonPrefixes);
} }
private boolean inCommonPrefixes; private boolean inCommonPrefixes;

View File

@ -63,7 +63,7 @@ public class ParseObjectInfoListFromJsonResponseTest {
public void testApplyInputStream() { public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/test_list_container.json"); InputStream is = getClass().getResourceAsStream("/test_list_container.json");
Set<ObjectInfo> expects = Sets.newHashSet(); Set<ObjectInfo> expects = Sets.newLinkedHashSet();
ObjectInfoImpl one = i.getInstance(ObjectInfoImpl.class); ObjectInfoImpl one = i.getInstance(ObjectInfoImpl.class);
one.name = "test_obj_1"; one.name = "test_obj_1";
one.hash = CryptoStreams.hex("4281c348eaf83e70ddce0e07221c3d28"); one.hash = CryptoStreams.hex("4281c348eaf83e70ddce0e07221c3d28");

View File

@ -19,7 +19,7 @@
package org.jclouds.blobstore.domain.internal; package org.jclouds.blobstore.domain.internal;
import java.util.HashSet; import java.util.LinkedHashSet;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -27,7 +27,7 @@ import org.jclouds.blobstore.domain.PageSet;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
public class PageSetImpl<T> extends HashSet<T> implements PageSet<T> { public class PageSetImpl<T> extends LinkedHashSet<T> implements PageSet<T> {
/** The serialVersionUID */ /** The serialVersionUID */
private static final long serialVersionUID = -7133632087734650835L; private static final long serialVersionUID = -7133632087734650835L;

View File

@ -93,7 +93,8 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
BlobMetadata metadata = BlobMetadata.class.cast(get(container, 0)); BlobMetadata metadata = BlobMetadata.class.cast(get(container, 0));
assert metadata.getContentMetadata().getContentType().startsWith("text/plain") : metadata.getContentMetadata().getContentType(); assert metadata.getContentMetadata().getContentType().startsWith("text/plain") : metadata.getContentMetadata()
.getContentType();
assertEquals(metadata.getContentMetadata().getContentLength(), new Long(TEST_STRING.length())); assertEquals(metadata.getContentMetadata().getContentLength(), new Long(TEST_STRING.length()));
assertEquals(metadata.getUserMetadata().get("adrian"), "powderpuff"); assertEquals(metadata.getUserMetadata().get("adrian"), "powderpuff");
checkMD5(metadata); checkMD5(metadata);
@ -123,6 +124,7 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
String containerName = getContainerName(); String containerName = getContainerName();
try { try {
addAlphabetUnderRoot(containerName); addAlphabetUnderRoot(containerName);
PageSet<? extends StorageMetadata> container = context.getBlobStore().list(containerName, maxResults(1)); PageSet<? extends StorageMetadata> container = context.getBlobStore().list(containerName, maxResults(1));
assert container.getNextMarker() != null; assert container.getNextMarker() != null;
@ -255,6 +257,7 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
String containerName = getContainerName(); String containerName = getContainerName();
try { try {
addAlphabetUnderRoot(containerName); addAlphabetUnderRoot(containerName);
PageSet<? extends StorageMetadata> container = context.getBlobStore().list(containerName, maxResults(5)); PageSet<? extends StorageMetadata> container = context.getBlobStore().list(containerName, maxResults(5));
assertEquals(container.size(), 5); assertEquals(container.size(), 5);
assert container.getNextMarker() != null; assert container.getNextMarker() != null;
@ -330,6 +333,20 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
blob.setPayload(letter + "content"); blob.setPayload(letter + "content");
context.getBlobStore().putBlob(containerName, blob); context.getBlobStore().putBlob(containerName, blob);
} }
assertContainerSize(containerName, 26);
}
protected void assertContainerSize(final String containerName, final int size) throws InterruptedException {
assertConsistencyAware(new Runnable() {
public void run() {
try {
assertEquals(context.getBlobStore().countBlobs(containerName), size);
} catch (Exception e) {
propagateIfPossible(e);
}
}
});
} }
protected void add15UnderRoot(String containerName) throws InterruptedException { protected void add15UnderRoot(String containerName) throws InterruptedException {