[infinispan-commits] Infinispan SVN: r1282 - trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Thu Dec 10 12:28:23 EST 2009
Author: manik.surtani at jboss.com
Date: 2009-12-10 12:28:23 -0500 (Thu, 10 Dec 2009)
New Revision: 1282
Modified:
trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStore.java
trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStoreConfig.java
Log:
Better purging
Modified: trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStore.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStore.java 2009-12-10 17:27:50 UTC (rev 1281)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStore.java 2009-12-10 17:28:23 UTC (rev 1282)
@@ -49,7 +49,7 @@
S3Connection cloudsConnection;
try {
cloudsConnection = config.getConnectionClass() != null ? (S3Connection) Util.getInstance(config.getConnectionClass()) : new JCloudsConnection();
- cloudsBucket = config.getBucketClass()!=null ? (S3Bucket) Util.getInstance(config.getBucketClass()) : new JCloudsBucket();
+ cloudsBucket = config.getBucketClass() != null ? (S3Bucket) Util.getInstance(config.getBucketClass()) : new JCloudsBucket();
} catch (Exception e) {
throw new CacheLoaderException(e);
}
@@ -90,7 +90,7 @@
private String getThisBucketName() {
if (log.isTraceEnabled()) {
- log.trace("Bucket prefix is " + config.getBucketPrefix() + " and cache name is " + cache.getName());
+ log.trace("Bucket prefix is " + config.getBucketPrefix() + " and cache name is " + cache.getName());
}
return config.getBucketPrefix() + "-" + cache.getName().toLowerCase();
}
@@ -123,6 +123,11 @@
}
}
+ @Override
+ protected boolean supportsMultiThreadedPurge() {
+ return true;
+ }
+
protected void toStreamLockSafe(ObjectOutput objectOutput) throws CacheLoaderException {
try {
objectOutput.writeObject(getThisBucketName());
@@ -140,8 +145,29 @@
new CacheLoaderException(message, caught);
}
+ @SuppressWarnings("unchecked")
protected void purgeInternal() throws CacheLoaderException {
- loadAll();
+ if (!config.isLazyPurgingOnly()) {
+ acquireGlobalLock(false);
+ try {
+ if (multiThreadedPurge) {
+ purgerService.execute(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ for (Bucket bucket : (Set<Bucket>) s3Bucket.values()) if (bucket.removeExpiredEntries()) saveBucket(bucket);
+ } catch (CacheLoaderException e) {
+ log.warn("Problems purging bucket", e);
+ }
+ }
+ });
+ } else {
+ for (Bucket bucket : (Set<Bucket>) s3Bucket.values()) if (bucket.removeExpiredEntries()) saveBucket(bucket);
+ }
+ } finally {
+ releaseGlobalLock(false);
+ }
+ }
}
protected Bucket loadBucket(String bucketName) throws CacheLoaderException {
Modified: trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStoreConfig.java
===================================================================
--- trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStoreConfig.java 2009-12-10 17:27:50 UTC (rev 1281)
+++ trunk/cachestore/s3/src/main/java/org/infinispan/loaders/s3/S3CacheStoreConfig.java 2009-12-10 17:28:23 UTC (rev 1282)
@@ -10,7 +10,9 @@
* is no default.</li> <li><tt>awsSecretKey</tt> - used to authenticate you as the owner of <tt>awsAccessKey</tt>. This
* is required and there is no default.</li> <li><tt>bucket</tt> - the name of the s3 bucket used to store cache data.
* This is required and there is no default.</li> <li><tt>requestTimeout</tt> - The maximum amount of milliseconds a
- * single S3 request can take before throwing an exception. Default is 10000</li></ul>
+ * single S3 request can take before throwing an exception. Default is 10000</li><li><tt>lazyPurgingOnly</tt> - Causes
+ * {@link org.infinispan.loaders.CacheStore#purgeExpired()} to be a no-op, and only removes expired entries lazily, on a
+ * {@link org.infinispan.loaders.CacheLoader#load(Object)}. Defaults to <tt>true</tt>.</li></ul>
*
* @author Adrian Cole
* @since 4.0
@@ -22,11 +24,19 @@
private String proxyHost;
private int proxyPort;
private long requestTimeout = 10000;
-
private String bucketClass;
private String connectionClass;
+ private Boolean lazyPurgingOnly = true;
+ public Boolean isLazyPurgingOnly() {
+ return lazyPurgingOnly;
+ }
+
+ public void setLazyPurgingOnly(Boolean lazyPurgingOnly) {
+ this.lazyPurgingOnly = lazyPurgingOnly;
+ }
+
public long getRequestTimeout() {
return requestTimeout;
}
More information about the infinispan-commits
mailing list