allow cdn lookup to fail while in beta

This commit is contained in:
Adrian Cole 2011-12-19 17:49:28 -08:00
parent 8d517f9f51
commit 075c0c8e5e
2 changed files with 36 additions and 10 deletions

View File

@ -36,6 +36,7 @@ import com.google.common.cache.LoadingCache;
*/ */
@Singleton @Singleton
public class PublicUriForObjectInfo implements Function<ObjectInfo, URI> { public class PublicUriForObjectInfo implements Function<ObjectInfo, URI> {
private final LoadingCache<String, URI> cdnContainer; private final LoadingCache<String, URI> cdnContainer;
private final Provider<UriBuilder> uriBuilders; private final Provider<UriBuilder> uriBuilders;

View File

@ -21,6 +21,8 @@ package org.jclouds.hpcloud.object.storage.blobstore.config;
import java.net.URI; import java.net.URI;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.hpcloud.object.storage.HPCloudObjectStorageClient; import org.jclouds.hpcloud.object.storage.HPCloudObjectStorageClient;
@ -28,11 +30,14 @@ import org.jclouds.hpcloud.object.storage.blobstore.HPCloudObjectStorageAsyncBlo
import org.jclouds.hpcloud.object.storage.blobstore.HPCloudObjectStorageBlobStore; import org.jclouds.hpcloud.object.storage.blobstore.HPCloudObjectStorageBlobStore;
import org.jclouds.hpcloud.object.storage.blobstore.functions.HPCloudObjectStorageObjectToBlobMetadata; import org.jclouds.hpcloud.object.storage.blobstore.functions.HPCloudObjectStorageObjectToBlobMetadata;
import org.jclouds.hpcloud.object.storage.domain.ContainerCDNMetadata; import org.jclouds.hpcloud.object.storage.domain.ContainerCDNMetadata;
import org.jclouds.http.HttpResponseException;
import org.jclouds.logging.Logger;
import org.jclouds.openstack.swift.blobstore.SwiftAsyncBlobStore; import org.jclouds.openstack.swift.blobstore.SwiftAsyncBlobStore;
import org.jclouds.openstack.swift.blobstore.SwiftBlobStore; import org.jclouds.openstack.swift.blobstore.SwiftBlobStore;
import org.jclouds.openstack.swift.blobstore.config.SwiftBlobStoreContextModule; import org.jclouds.openstack.swift.blobstore.config.SwiftBlobStoreContextModule;
import org.jclouds.openstack.swift.blobstore.functions.ObjectToBlobMetadata; import org.jclouds.openstack.swift.blobstore.functions.ObjectToBlobMetadata;
import com.google.common.annotations.Beta;
import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader; import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache; import com.google.common.cache.LoadingCache;
@ -44,21 +49,41 @@ import com.google.inject.Provides;
*/ */
public class HPCloudObjectStorageBlobStoreContextModule extends SwiftBlobStoreContextModule { public class HPCloudObjectStorageBlobStoreContextModule extends SwiftBlobStoreContextModule {
@Provides @Beta
@Singleton @Singleton
protected LoadingCache<String, URI> cdnContainer(final HPCloudObjectStorageClient client) { public static final class GetCDNMetadata extends CacheLoader<String, URI> {
return CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build(new CacheLoader<String, URI>() { @Resource
protected Logger logger = Logger.NULL;
private final HPCloudObjectStorageClient client;
@Inject
public GetCDNMetadata(HPCloudObjectStorageClient client) {
this.client = client;
}
@Override @Override
public URI load(String container) { public URI load(String container) {
try {
ContainerCDNMetadata md = client.getCDNMetadata(container); ContainerCDNMetadata md = client.getCDNMetadata(container);
return md != null ? md.getCDNUri() : null; return md != null ? md.getCDNUri() : null;
} catch (HttpResponseException e) {
// TODO: this is due to beta status
logger.trace("couldn't get cdn metadata for %s: %s", container, e.getMessage());
return null;
}
} }
@Override @Override
public String toString() { public String toString() {
return "getCDNMetadata()"; return "getCDNMetadata()";
} }
}); }
@Provides
@Singleton
protected LoadingCache<String, URI> cdnContainer(GetCDNMetadata loader) {
return CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.SECONDS).build(loader);
} }
@Override @Override