[infinispan-commits] Infinispan SVN: r123 - in trunk/cachestore/s3: src/main/java/org/infinispan/loader/s3 and 2 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Wed Apr 15 10:18:15 EDT 2009
Author: adriancole
Date: 2009-04-15 10:18:06 -0400 (Wed, 15 Apr 2009)
New Revision: 123
Added:
trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Bucket.java
trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3ConnectionException.java
trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Bucket.java
Removed:
trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/Jets3tS3Connection.java
trunk/cachestore/s3/src/test/java/org/infinispan/s3/
Modified:
trunk/cachestore/s3/pom.xml
trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStore.java
trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStoreConfig.java
trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Connection.java
trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Connection.java
Log:
ISPN-28 created mock implementation so that all tests can pass
Modified: trunk/cachestore/s3/pom.xml
===================================================================
--- trunk/cachestore/s3/pom.xml 2009-04-15 08:57:14 UTC (rev 122)
+++ trunk/cachestore/s3/pom.xml 2009-04-15 14:18:06 UTC (rev 123)
@@ -2,53 +2,39 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.infinispan</groupId>
- <artifactId>infinispan-parent</artifactId>
- <version>4.0.0-SNAPSHOT</version>
- <relativePath>../../parent/pom.xml</relativePath>
- </parent>
- <groupId>org.infinispan</groupId>
- <artifactId>infinispan-cachestore-s3</artifactId>
- <name>Infinispan Amazon S3 CacheStore</name>
- <description>Infinispan Amazon S3 CacheStore module</description>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-parent</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ <relativePath>../../parent/pom.xml</relativePath>
+ </parent>
+ <groupId>org.infinispan</groupId>
+ <artifactId>infinispan-cachestore-s3</artifactId>
+ <name>Infinispan Amazon S3 CacheStore</name>
+ <description>Infinispan Amazon S3 CacheStore module</description>
- <dependencies>
- <dependency>
- <groupId>${project-package}</groupId>
- <artifactId>infinispan-core</artifactId>
- <version>${project-version}</version>
- </dependency>
+ <dependencies>
+ <dependency>
+ <groupId>${project-package}</groupId>
+ <artifactId>infinispan-core</artifactId>
+ <version>${project-version}</version>
+ </dependency>
- <dependency>
- <groupId>${project-package}</groupId>
- <artifactId>infinispan-core</artifactId>
- <version>${project-version}</version>
- <type>test-jar</type>
- <scope>test</scope>
- </dependency>
+ <dependency>
+ <groupId>${project-package}</groupId>
+ <artifactId>infinispan-core</artifactId>
+ <version>${project-version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
- <dependency>
- <groupId>net.java.dev.jets3t</groupId>
- <artifactId>jets3t</artifactId>
- <version>0.7.0</version>
- </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.4</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>1.4</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
- <repositories>
- <!-- Repository for Amazon S3 artifacts -->
- <repository>
- <name>jets3t</name>
- <id>jets3t</id>
- <url>http://jets3t.s3.amazonaws.com/maven2</url>
- </repository>
- </repositories>
</project>
Deleted: trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/Jets3tS3Connection.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/Jets3tS3Connection.java 2009-04-15 08:57:14 UTC (rev 122)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/Jets3tS3Connection.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -1,133 +0,0 @@
-package org.infinispan.loader.s3;
-
-import org.jets3t.service.S3Service;
-import org.jets3t.service.S3ServiceException;
-import org.jets3t.service.impl.rest.httpclient.RestS3Service;
-import org.jets3t.service.model.S3Bucket;
-import org.jets3t.service.model.S3Object;
-import org.jets3t.service.multithread.S3ServiceSimpleMulti;
-import org.jets3t.service.security.AWSCredentials;
-
-/**
- * A {@link org.jets3t.service.S3Service jets3t} implementation of {@link S3Connection}.
- * <p/>
- * Tuning and configuration parameters can be overridden by creating <tt>jets3t.properties</tt> and adding it to your
- * classpath.
- *
- * @author Adrian Cole
- * @link http://jets3t.s3.amazonaws.com/toolkit/configuration.html
- * @since 4.0
- */
-public class Jets3tS3Connection implements S3Connection {
- private S3Service s3Service;
- private S3ServiceSimpleMulti s3MultiService;
-
- /**
- * {@inheritDoc}
- *
- * @see RestS3Service#RestS3Service(org.jets3t.service.security.AWSCredentials)
- * @see S3ServiceSimpleMulti#S3ServiceSimpleMulti(org.jets3t.service.S3Service)
- */
- public void connect(String awsAccessKey, String awsSecretKey) throws S3ServiceException {
- AWSCredentials awsCredentials =
- new AWSCredentials(awsAccessKey, awsSecretKey);
- s3Service = new RestS3Service(awsCredentials);
- s3MultiService = new S3ServiceSimpleMulti(s3Service);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see S3Object#S3Object(String)
- */
- public S3Object createObject(String key) {
- return new S3Object(key);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.jets3t.service.S3Service#deleteObject(org.jets3t.service.model.S3Bucket, String)
- */
- public void removeObjectFromBucket(String objectKey, S3Bucket bucket) throws S3ServiceException {
- s3Service.deleteObject(bucket, objectKey);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.jets3t.service.S3Service#getBucket(String)
- * @see org.jets3t.service.S3Service#createBucket(String)
- */
- public S3Bucket getOrCreateBucket(String bucketName) throws S3ServiceException {
- return s3Service.getOrCreateBucket(bucketName);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.jets3t.service.S3Service#listObjects(org.jets3t.service.model.S3Bucket)
- */
- public S3Object[] getAllObjectsInBucketWithoutTheirData(S3Bucket bucket) throws S3ServiceException {
- return s3Service.listObjects(bucket);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see S3ServiceSimpleMulti#copyObjects(String, String, String[], org.jets3t.service.model.S3Object[], boolean)
- */
- public void copyObjectsFromOneBucketToAnother(String[] keys, String sourceBucketName, String destinationBucketName) throws S3ServiceException {
- S3Object[] destinationObjects = new S3Object[keys.length];
- int i = 0;
- for (String key : keys) {
- destinationObjects[i++] = createObject(key);
- }
- s3MultiService.copyObjects(sourceBucketName, destinationBucketName, keys, destinationObjects, false);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see Jets3tS3Connection#getAllObjectsInBucketWithoutTheirData(org.jets3t.service.model.S3Bucket)
- * @see S3ServiceSimpleMulti#deleteObjects(org.jets3t.service.model.S3Bucket, org.jets3t.service.model.S3Object[])
- */
- public void removeAllObjectsFromBucket(S3Bucket bucket) throws S3ServiceException {
- S3Object[] objects = getAllObjectsInBucketWithoutTheirData(bucket);
- s3MultiService.deleteObjects(bucket, objects);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see S3Service#deleteBucket(S3Bucket)
- */
- public void removeBucketIfEmpty(S3Bucket bucket) throws S3ServiceException {
- s3Service.deleteBucket(bucket);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see S3Service#getObject(org.jets3t.service.model.S3Bucket, String)
- */
- public S3Object getObjectInBucket(String objectKey, S3Bucket bucket) throws S3ServiceException {
- try {
- return s3Service.getObject(bucket, objectKey);
- } catch (S3ServiceException e) {
- if (e.getS3ErrorCode() != null && e.getS3ErrorCode().equals("NoSuchKey")) {
- return null;
- }
- throw e;
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * @see S3Service#putObject(org.jets3t.service.model.S3Bucket, org.jets3t.service.model.S3Object)
- */
- public S3Object putObjectIntoBucket(S3Object object, S3Bucket bucket) throws S3ServiceException {
- return s3Service.putObject(bucket, object);
- }
-}
\ No newline at end of file
Added: trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Bucket.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Bucket.java (rev 0)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Bucket.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -0,0 +1,33 @@
+package org.infinispan.loader.s3;
+
+import org.infinispan.loader.bucket.Bucket;
+
+import java.util.Set;
+
+/**
+ * // TODO: Adrian: Document this!
+ * <p/>
+ * This interface defines the interactons between the {@link S3CacheStore} and Amazon S3.
+ *
+ * @author Adrian Cole
+ * @since 4.0
+ */
+public interface S3Bucket<B, C extends S3Connection> {
+
+ void init(C connection, B bucket);
+
+ String getName();
+
+ void insert(Bucket object) throws S3ConnectionException;
+
+ Bucket get(String key) throws S3ConnectionException;
+
+ Set<String> keySet() throws S3ConnectionException;
+
+ Set<Bucket> values() throws S3ConnectionException;
+
+ public void remove(String key) throws S3ConnectionException;
+
+ void clear() throws S3ConnectionException;
+
+}
\ No newline at end of file
Modified: trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStore.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStore.java 2009-04-15 08:57:14 UTC (rev 122)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStore.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -6,207 +6,138 @@
import org.infinispan.loader.CacheLoaderException;
import org.infinispan.loader.bucket.Bucket;
import org.infinispan.loader.bucket.BucketBasedCacheStore;
-import org.infinispan.loader.file.FileCacheStore;
import org.infinispan.logging.Log;
import org.infinispan.logging.LogFactory;
import org.infinispan.marshall.Marshaller;
-import org.jets3t.service.S3ServiceException;
-import org.jets3t.service.model.S3Bucket;
-import org.jets3t.service.model.S3Object;
-import org.jets3t.service.utils.ServiceUtils;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.ObjectInput;
-import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.util.HashSet;
import java.util.Set;
/**
- * A {@link org.jets3t.service.S3Service jets3t} implementation of a {@link org.infinispan.loader.bucket.BucketBasedCacheStore}.
+ * A TODO link implementation of a {@link org.infinispan.loader.bucket.BucketBasedCacheStore}.
* This file store stores stuff in the following format: <tt>http://s3.amazon.com/{bucket}/bucket_number.bucket</tt>
* <p/>
- * Tuning and configuration parameters can be overridden by creating <tt>jets3t.properties</tt> and adding it to your
- * classpath.
*
* @author Adrian Cole
- * @link http://jets3t.s3.amazonaws.com/toolkit/configuration.html
* @since 4.0
*/
public class S3CacheStore extends BucketBasedCacheStore {
- private static final Log log = LogFactory.getLog(FileCacheStore.class);
+ private static final Log log = LogFactory.getLog(S3CacheStore.class);
- private S3CacheStoreConfig config;
- private S3Bucket rootS3Bucket;
+ private S3CacheStoreConfig config;
- Cache cache;
- Marshaller marshaller;
+ Cache cache;
+ Marshaller marshaller;
- private S3Connection s3Connection;
+ private S3Connection connection;
+ private S3Bucket s3Bucket;
- public Class<? extends CacheLoaderConfig> getConfigurationClass() {
- return S3CacheStoreConfig.class;
- }
+ public Class<? extends CacheLoaderConfig> getConfigurationClass() {
+ return S3CacheStoreConfig.class;
+ }
- /**
- * {@inheritDoc} This initializes the internal <tt>s3Connection</tt> as an implementation of {@link
- * Jets3tS3Connection}
- */
- public void init(CacheLoaderConfig config, Cache cache, Marshaller m) {
- init(config, cache, m, new Jets3tS3Connection());
- }
+ /**
+ * {@inheritDoc} This initializes the internal <tt>s3Connection</tt> to a default implementation
+ */
+ public void init(CacheLoaderConfig config, Cache cache, Marshaller m) {
+ throw new UnsupportedOperationException("no default implementation, yet");
+// init(config, cache, m, null, null);
+ }
- public void init(CacheLoaderConfig config, Cache cache, Marshaller m, S3Connection s3Connection) {
- super.init(config, cache, m);
- this.config = (S3CacheStoreConfig) config;
- this.cache = cache;
- this.marshaller = m;
- this.s3Connection = s3Connection;
- }
+ @Override
+ public void stop() throws CacheLoaderException {
+ super.stop();
+ this.connection.disconnect();
+ }
+ public void init(CacheLoaderConfig config, Cache cache, Marshaller m, S3Connection connection, S3Bucket bucket) {
+ super.init(config, cache, m);
+ this.config = (S3CacheStoreConfig) config;
+ this.cache = cache;
+ this.marshaller = m;
+ this.connection = connection;
+ this.s3Bucket = bucket;
+ }
- public void start() throws CacheLoaderException {
- super.start();
- String awsAccessKey = config.getAwsAccessKey();
- if (awsAccessKey == null)
- throw new IllegalArgumentException("awsAccessKey must be set");
- String awsSecretKey = config.getAwsSecretKey();
- if (awsSecretKey == null)
- throw new IllegalArgumentException("awsSecretKey must be set");
- String s3Bucket = config.getBucket();
- if (s3Bucket == null)
- throw new IllegalArgumentException("s3Bucket must be set");
+ public void start() throws CacheLoaderException {
+ super.start();
- try {
- s3Connection.connect(awsAccessKey, awsSecretKey);
- rootS3Bucket = s3Connection.getOrCreateBucket(s3Bucket);
- } catch (S3ServiceException e) {
- throw convertToCacheLoaderException("error opening s3 service", e);
- }
- }
+ if (config.getAwsAccessKey() == null)
+ throw new IllegalArgumentException("awsAccessKey must be set");
+ if (config.getAwsSecretKey() == null)
+ throw new IllegalArgumentException("awsSecretKey must be set");
+ this.connection.connect(config, marshaller);
+ String s3Bucket = config.getBucket();
+ if (s3Bucket == null)
+ throw new IllegalArgumentException("s3Bucket must be set");
+ this.s3Bucket.init(this.connection, connection.verifyOrCreateBucket(s3Bucket));
+ }
- protected Set<InternalCacheEntry> loadAllLockSafe() throws CacheLoaderException {
- Set<InternalCacheEntry> result = new HashSet<InternalCacheEntry>();
- try {
- for (S3Object s3Object : s3Connection.getAllObjectsInBucketWithoutTheirData(rootS3Bucket)) {
- Bucket bucket = loadBucket(s3Object);
- if (bucket != null) {
- if (bucket.removeExpiredEntries()) {
- saveBucket(bucket);
- }
- result.addAll(bucket.getStoredEntries());
+ protected Set<InternalCacheEntry> loadAllLockSafe() throws CacheLoaderException {
+ Set<InternalCacheEntry> result = new HashSet<InternalCacheEntry>();
+ // TODO I don't know why this returns objects at the moment
+ for (Bucket bucket : (Set<Bucket>) s3Bucket.values()) {
+ if (bucket.removeExpiredEntries()) {
+ saveBucket(bucket);
}
- }
- } catch (S3ServiceException e) {
- throw convertToCacheLoaderException("Error while loading entries", e);
- }
- return result;
- }
+ result.addAll(bucket.getStoredEntries());
+ }
+ return result;
+ }
- protected void fromStreamLockSafe(ObjectInput objectInput) throws CacheLoaderException {
- try {
- S3Bucket source = (S3Bucket) objectInput.readObject();
- if (rootS3Bucket.getName().equals(source.getName())) {
+ protected void fromStreamLockSafe(ObjectInput objectInput) throws CacheLoaderException {
+ String source;
+ try {
+ source = (String) objectInput.readObject();
+
+ } catch (Exception e) {
+ throw convertToCacheLoaderException("Error while reading from stream", e);
+ }
+ if (config.getBucket().equals(source)) {
log.info("Attempt to load the same s3 bucket ignored");
- } else {
- S3Object[] sourceObjects = s3Connection.getAllObjectsInBucketWithoutTheirData(source);
- String[] sourceKeys = new String[sourceObjects.length];
+ } else {
+ connection.copyBucket(source, config.getBucket());
+ }
+ }
- int i = 0;
- for (S3Object sourceObject : sourceObjects) {
- sourceKeys[i++] = sourceObject.getKey();
- }
- s3Connection.copyObjectsFromOneBucketToAnother(sourceKeys, source.getName(), rootS3Bucket.getName());
- }
- loadAll();
- } catch (Exception e) {
- throw convertToCacheLoaderException("Error while reading from stream", e);
- }
- }
+ protected void toStreamLockSafe(ObjectOutput objectOutput) throws CacheLoaderException {
+ try {
+ objectOutput.writeObject(config.getBucket());
+ } catch (IOException e) {
+ throw convertToCacheLoaderException("Error while writing to stream", e);
+ }
+ }
- protected void toStreamLockSafe(ObjectOutput objectOutput) throws CacheLoaderException {
- try {
- objectOutput.writeObject(rootS3Bucket);
- } catch (IOException e) {
- throw convertToCacheLoaderException("Error while writing to stream", e);
- }
- }
+ protected void clearLockSafe() throws CacheLoaderException {
+ s3Bucket.clear();
+ }
- protected void clearLockSafe() throws CacheLoaderException {
- try {
- s3Connection.removeAllObjectsFromBucket(rootS3Bucket);
- } catch (S3ServiceException caught) {
- throw convertToCacheLoaderException("error recreating bucket " + config.getBucket(), caught);
- }
- }
+ CacheLoaderException convertToCacheLoaderException(String message, Exception caught) {
+ return (caught instanceof CacheLoaderException) ? (CacheLoaderException) caught :
+ new CacheLoaderException(message, caught);
+ }
- CacheLoaderException convertToCacheLoaderException(String message, Exception caught) {
- return (caught instanceof CacheLoaderException) ? (CacheLoaderException) caught :
- new CacheLoaderException(message, caught);
- }
+ protected void purgeInternal() throws CacheLoaderException {
+ loadAll();
+ }
- protected void purgeInternal() throws CacheLoaderException {
- loadAll();
- }
+ protected Bucket loadBucket(String bucketName) throws CacheLoaderException {
+ return s3Bucket.get(bucketName);
+ }
- protected Bucket loadBucket(String bucketName) throws CacheLoaderException {
- return loadBucket(s3Connection.createObject(bucketName));
- }
- protected Bucket loadBucket(S3Object s3Object) throws CacheLoaderException {
- Bucket bucket = null;
- InputStream is = null;
- ObjectInputStream ois = null;
- String key = s3Object.getKey();
- try {
- // it is possible that the S3Object above only holds details. Try to fetch, if this is the case
- if (s3Object.getDataInputStream() == null) {
- s3Object = s3Connection.getObjectInBucket(key, rootS3Bucket);
- }
+ protected void insertBucket(Bucket bucket) throws CacheLoaderException {
+ s3Bucket.insert(bucket);
+ }
- // it is possible that the object never existed. in this case, fall out.
- if (s3Object != null && s3Object.getDataInputStream() != null) {
- is = s3Object.getDataInputStream();
- ois = new ObjectInputStream(is);
- bucket = (Bucket) ois.readObject();
- s3Object.closeDataInputStream();
- bucket.setBucketName(s3Object.getKey());
- }
- } catch (Exception e) {
- throw convertToCacheLoaderException("Error while reading from object: " + key, e);
- } finally {
- safeClose(ois);
- safeClose(is);
- }
- return bucket;
- }
+ protected void saveBucket(Bucket bucket) throws CacheLoaderException {
+ s3Bucket.insert(bucket);
+ }
- protected void insertBucket(Bucket bucket) throws CacheLoaderException {
- saveBucket(bucket);
- }
- public final void saveBucket(Bucket b) throws CacheLoaderException {
- try {
- if (b.getEntries().isEmpty()) {
- s3Connection.removeObjectFromBucket(b.getBucketName(), rootS3Bucket);
- } else {
- ByteArrayInputStream dataIS = new ByteArrayInputStream(
- marshaller.objectToByteBuffer(b));
- byte[] md5Hash = ServiceUtils.computeMD5Hash(dataIS);
- dataIS.reset();
- S3Object s3Object = s3Connection.createObject(b.getBucketName());
- s3Object.setDataInputStream(dataIS);
- s3Object.setContentLength(dataIS.available());
- s3Object.setMd5Hash(md5Hash);
- s3Connection.putObjectIntoBucket(s3Object, rootS3Bucket);
- }
- } catch (Exception ex) {
- throw convertToCacheLoaderException("Exception while saving bucket " + b, ex);
- }
- }
-
}
Modified: trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStoreConfig.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStoreConfig.java 2009-04-15 08:57:14 UTC (rev 122)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3CacheStoreConfig.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -18,7 +18,29 @@
private String awsAccessKey;
private String awsSecretKey;
private String bucket;
+ private String proxyHost;
+ private int proxyPort;
+ public int getMaxConnections() {
+ return maxConnections;
+ }
+
+ public void setMaxConnections(int maxConnections) {
+ this.maxConnections = maxConnections;
+ }
+
+ private int maxConnections = 3;
+ private boolean secure = true;
+
+ public boolean isSecure() {
+ return secure;
+ }
+
+ public void setSecure(boolean secure) {
+ this.secure = secure;
+ }
+
+
public S3CacheStoreConfig() {
setCacheLoaderClassName(S3CacheStore.class.getName());
}
@@ -47,5 +69,21 @@
this.bucket = bucket;
}
+ public String getProxyHost() {
+ return proxyHost;
+ }
-}
+ public void setProxyHost(String proxyHost) {
+ this.proxyHost = proxyHost;
+ }
+
+ public int getProxyPort() {
+ return proxyPort;
+ }
+
+ public void setProxyPort(int proxyPort) {
+ this.proxyPort = proxyPort;
+ }
+
+
+}
\ No newline at end of file
Modified: trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Connection.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Connection.java 2009-04-15 08:57:14 UTC (rev 122)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3Connection.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -1,35 +1,23 @@
package org.infinispan.loader.s3;
-import org.jets3t.service.S3ServiceException;
-import org.jets3t.service.model.S3Bucket;
-import org.jets3t.service.model.S3Object;
+import org.infinispan.marshall.Marshaller;
/**
- * This interface defines the interactons between the {@link S3CacheStore} and Amazon S3.
+ * // TODO: Adrian: Document this!
*
* @author Adrian Cole
* @since 4.0
*/
-public interface S3Connection {
+public interface S3Connection<C, B> {
+ void connect(S3CacheStoreConfig config, Marshaller m) throws S3ConnectionException;
- void connect(String awsAccessKey, String awsSecretKey) throws S3ServiceException;
+ C getConnection() throws S3ConnectionException;
- S3Bucket getOrCreateBucket(String bucketName) throws S3ServiceException;
+ B verifyOrCreateBucket(String bucketName) throws S3ConnectionException;
- void removeBucketIfEmpty(S3Bucket bucket) throws S3ServiceException;
+ void destroyBucket(String name) throws S3ConnectionException;
- S3Object createObject(String key);
+ void copyBucket(String sourceBucket, String destinationBucket) throws S3ConnectionException;
- S3Object putObjectIntoBucket(S3Object object, S3Bucket bucket) throws S3ServiceException;
-
- S3Object getObjectInBucket(String objectKey, S3Bucket bucket) throws S3ServiceException;
-
- S3Object[] getAllObjectsInBucketWithoutTheirData(S3Bucket bucket) throws S3ServiceException;
-
- public void removeObjectFromBucket(String objectKey, S3Bucket bucket) throws S3ServiceException;
-
- void removeAllObjectsFromBucket(S3Bucket rootS3Bucket) throws S3ServiceException;
-
- void copyObjectsFromOneBucketToAnother(String[] keys, String sourceBucketName, String destinationBucketName) throws S3ServiceException;
-
+ void disconnect();
}
\ No newline at end of file
Added: trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3ConnectionException.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3ConnectionException.java (rev 0)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loader/s3/S3ConnectionException.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -0,0 +1,26 @@
+package org.infinispan.loader.s3;
+
+import org.infinispan.loader.CacheLoaderException;
+
+/**
+ * An exception thrown by a {@link S3Bucket} implementation if there are problems reading from S3.
+ *
+ * @author Adrian Cole
+ * @since 4.0
+ */
+public class S3ConnectionException extends CacheLoaderException {
+ public S3ConnectionException() {
+ }
+
+ public S3ConnectionException(String message) {
+ super(message);
+ }
+
+ public S3ConnectionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public S3ConnectionException(Throwable cause) {
+ super(cause);
+ }
+}
\ No newline at end of file
Added: trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Bucket.java
===================================================================
--- trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Bucket.java (rev 0)
+++ trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Bucket.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -0,0 +1,58 @@
+package org.infinispan.loader.s3;
+
+import org.infinispan.loader.bucket.Bucket;
+import org.infinispan.marshall.Marshaller;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Stores Infinispan Buckets in a map instead of a live S3 Bucket.
+ *
+ * @author Adrian Cole
+ * @version $Id: $
+ * @since 4.0
+ */
+public class MockS3Bucket implements S3Bucket<Map<String, Bucket>, org.infinispan.loader.s3.MockS3Connection> {
+ private String name;
+ private Map<String, Bucket> s3Bucket;
+
+ public void init(String name, String awsAccessKey, String awsSecretKey, Marshaller m) throws S3ConnectionException {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Set<Bucket> values() throws S3ConnectionException {
+ return new HashSet<Bucket>(s3Bucket.values());
+ }
+
+ public void init(org.infinispan.loader.s3.MockS3Connection connection, Map<String, Bucket> bucket) {
+ this.s3Bucket = bucket;
+ }
+
+ public void insert(Bucket object) throws S3ConnectionException {
+ s3Bucket.put(object.getBucketName(), object);
+ }
+
+ public Bucket get(String key) throws S3ConnectionException {
+ return s3Bucket.get(key);
+ }
+
+ public Set<String> keySet() throws S3ConnectionException {
+ return s3Bucket.keySet();
+ }
+
+ public void remove(String key) throws S3ConnectionException {
+ s3Bucket.remove(key);
+ }
+
+ public void clear() throws S3ConnectionException {
+ s3Bucket.clear();
+ }
+
+}
+
Modified: trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Connection.java
===================================================================
--- trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Connection.java 2009-04-15 08:57:14 UTC (rev 122)
+++ trunk/cachestore/s3/src/test/java/org/infinispan/loader/s3/MockS3Connection.java 2009-04-15 14:18:06 UTC (rev 123)
@@ -1,104 +1,48 @@
package org.infinispan.loader.s3;
-import org.apache.commons.io.IOUtils;
-import org.jets3t.service.S3ServiceException;
-import org.jets3t.service.model.S3Bucket;
-import org.jets3t.service.model.S3Object;
+import org.infinispan.loader.bucket.Bucket;
+import org.infinispan.marshall.Marshaller;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
- * @author Adrian Cole
- * @version $Id$
+ * Stores S3 Buckets in a map instead of connecting to a live server.
+ *
* @since 4.0
+ * @author Adrian Cole
*/
-public class MockS3Connection implements S3Connection {
- private Map<String, S3Bucket> nameToS3Bucket = new ConcurrentHashMap<String, S3Bucket>();
- private Map<String, Map<String, S3Object>> bucketToContents = new ConcurrentHashMap<String, Map<String, S3Object>>();
+public class MockS3Connection implements S3Connection<MockS3Connection, Map<String, Bucket>> {
+ private static Map<String, Map<String, Bucket>> bucketToContents = new ConcurrentHashMap<String, Map<String, Bucket>>();
- public synchronized S3Bucket getOrCreateBucket(String bucketName) throws S3ServiceException {
- S3Bucket bucket = nameToS3Bucket.get(bucketName);
- if (bucket == null) {
- bucket = new S3Bucket(bucketName);
- nameToS3Bucket.put(bucketName, bucket);
- bucketToContents.put(bucketName, new ConcurrentHashMap<String, S3Object>());
- }
- return bucket;
- }
+ public void connect(S3CacheStoreConfig config, Marshaller m) throws S3ConnectionException {
+ // Do nothing
+ }
- public S3Object[] getAllObjectsInBucketWithoutTheirData(S3Bucket bucket) throws S3ServiceException {
- Map<String, S3Object> contents = bucketToContents.get(bucket.getName());
- return contents.values().toArray(new S3Object[]{});
- }
+ public MockS3Connection getConnection() throws S3ConnectionException {
+ return this;
+ }
- public void copyObjectsFromOneBucketToAnother(String[] keys, String sourceBucketName, String destinationBucketName) throws S3ServiceException {
- Map<String, S3Object> source = bucketToContents.get(sourceBucketName);
- Map<String, S3Object> destination = bucketToContents.get(destinationBucketName);
- for (int i = 0; i < keys.length; i++) {
- destination.put(keys[i], source.get(keys[i]));
- }
- }
+ public Map<String, Bucket> verifyOrCreateBucket(String bucketName) throws S3ConnectionException {
+ if (!bucketToContents.containsKey(bucketName)) {
+ bucketToContents.put(bucketName, new ConcurrentHashMap<String, Bucket>());
+ }
+ return bucketToContents.get(bucketName);
+ }
- public void removeBucketIfEmpty(S3Bucket bucket) throws S3ServiceException {
- nameToS3Bucket.remove(bucket.getName());
- bucketToContents.remove(bucket.getName());
- }
+ public void destroyBucket(String name) throws S3ConnectionException {
+ bucketToContents.remove(name);
+ }
- public S3Object getObjectInBucket(String objectKey, S3Bucket bucket) throws S3ServiceException {
- Map<String, S3Object> contents = bucketToContents.get(bucket.getName());
- return contents.get(objectKey);
- }
+ public void disconnect() {
+ // na
+ }
- public S3Object putObjectIntoBucket(S3Object object, S3Bucket bucket) throws S3ServiceException {
- Map<String, S3Object> contents = bucketToContents.get(bucket.getName());
- contents.put(object.getKey(), object);
- return object;
- }
-
- public void connect(String awsAccessKey, String awsSecretKey) throws S3ServiceException {
- // ignore
- }
-
- public S3Object createObject(String key) {
- return new MockS3Object(key);
- }
-
- public void removeObjectFromBucket(String objectKey, S3Bucket bucket) throws S3ServiceException {
- Map<String, S3Object> contents = bucketToContents.get(bucket.getName());
- contents.remove(objectKey);
- }
-
- public void removeAllObjectsFromBucket(S3Bucket bucket) throws S3ServiceException {
- Map<String, S3Object> contents = bucketToContents.get(bucket.getName());
- contents.clear();
- }
-
- class MockS3Object extends S3Object {
-
- byte[] buff;
-
- public MockS3Object(String key) {
- super(key);
- }
-
- @Override
- public void setDataInputStream(InputStream inputStream) {
- try {
- buff = IOUtils.toByteArray(inputStream);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public InputStream getDataInputStream() throws S3ServiceException {
- return (buff != null) ? new ByteArrayInputStream(buff) : null;
- }
- }
-
+ public void copyBucket(String sourceBucket, String destinationBucket) throws S3ConnectionException {
+ Map<String, Bucket> source = bucketToContents.get(sourceBucket);
+ Map<String, Bucket> dest = bucketToContents.get(destinationBucket);
+ for (Bucket bucket : source.values()) {
+ dest.put(bucket.getBucketName(), bucket);
+ }
+ }
}
-
More information about the infinispan-commits
mailing list