[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