Handle missing containers in LocalBlobStore.list

Also fix FilesystemStorageStrategyImpl.getContainerMetadata to return
null on missing container as jdbc and transient already do.
This commit is contained in:
Andrew Gaul 2016-05-06 21:22:44 -07:00
parent a4c40e15cd
commit 62410d31ae
3 changed files with 13 additions and 4 deletions

View File

@ -35,6 +35,7 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes; import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermission;
@ -269,6 +270,8 @@ public class FilesystemStorageStrategyImpl implements LocalStorageStrategy {
BasicFileAttributes attr; BasicFileAttributes attr;
try { try {
attr = readAttributes(path, BasicFileAttributes.class); attr = readAttributes(path, BasicFileAttributes.class);
} catch (NoSuchFileException nsfe) {
return null;
} catch (IOException e) { } catch (IOException e) {
throw Throwables.propagate(e); throw Throwables.propagate(e);
} }

View File

@ -81,7 +81,7 @@ public interface LocalStorageStrategy {
*/ */
void clearContainer(String container, ListContainerOptions options); void clearContainer(String container, ListContainerOptions options);
/** @return StorageMetadata associated with a container name, e.g., creation date and location */ /** @return StorageMetadata associated with a container name, e.g., creation date and location, or null if container does not exist */
StorageMetadata getContainerMetadata(String container); StorageMetadata getContainerMetadata(String container);
/** /**

View File

@ -88,8 +88,10 @@ import org.jclouds.util.Closeables2;
import com.google.common.base.Function; import com.google.common.base.Function;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators; import com.google.common.collect.Iterators;
@ -429,12 +431,16 @@ public final class LocalBlobStore implements BlobStore {
ArrayList<String> containers = new ArrayList<String>(storageStrategy.getAllContainerNames()); ArrayList<String> containers = new ArrayList<String>(storageStrategy.getAllContainerNames());
Collections.sort(containers); Collections.sort(containers);
return new PageSetImpl<StorageMetadata>(transform( return new PageSetImpl<StorageMetadata>(FluentIterable
containers, new Function<String, StorageMetadata>() { .from(containers)
.transform(new Function<String, StorageMetadata>() {
@Override
public StorageMetadata apply(String name) { public StorageMetadata apply(String name) {
return storageStrategy.getContainerMetadata(name); return storageStrategy.getContainerMetadata(name);
} }
}), null); })
.filter(Predicates.<StorageMetadata>notNull()),
null);
} }
@Override @Override