[infinispan-commits] Infinispan SVN: r1382 - in trunk/cachestore/cloud/src/main: scala/org/infinispan/loaders/cloud and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Sat Jan 16 11:09:11 EST 2010


Author: manik.surtani at jboss.com
Date: 2010-01-16 11:09:11 -0500 (Sat, 16 Jan 2010)
New Revision: 1382

Removed:
   trunk/cachestore/cloud/src/main/resources/jclouds.properties
Modified:
   trunk/cachestore/cloud/src/main/scala/org/infinispan/loaders/cloud/CloudCacheStore.scala
Log:
Fixing CloudCacheStore

Deleted: trunk/cachestore/cloud/src/main/resources/jclouds.properties
===================================================================
--- trunk/cachestore/cloud/src/main/resources/jclouds.properties	2010-01-16 15:18:18 UTC (rev 1381)
+++ trunk/cachestore/cloud/src/main/resources/jclouds.properties	2010-01-16 16:09:11 UTC (rev 1382)
@@ -1,16 +0,0 @@
-azureblob.contextbuilder=org.jclouds.azure.storage.blob.blobstore.AzureBlobStoreContextBuilder
-azureblob.propertiesbuilder=org.jclouds.azure.storage.blob.AzureBlobPropertiesBuilder
-cloudfiles.contextbuilder=org.jclouds.rackspace.cloudfiles.blobstore.CloudFilesBlobStoreContextBuilder
-cloudfiles.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesPropertiesBuilder
-s3.contextbuilder=org.jclouds.aws.s3.blobstore.S3BlobStoreContextBuilder
-s3.propertiesbuilder=org.jclouds.aws.s3.S3PropertiesBuilder
-
-#
-#jclouds.http.address=s3.amazonaws.com
-#jclouds.http.port=443
-#jclouds.http.secure=true
-#jclouds.http.pool.max_connection_reuse=75
-#jclouds.http.pool.max_session_failures=2
-#jclouds.http.pool.request_invoker_threads=1
-#jclouds.http.pool.io_worker_threads=2
-#jclouds.pool.max_connections=12

Modified: trunk/cachestore/cloud/src/main/scala/org/infinispan/loaders/cloud/CloudCacheStore.scala
===================================================================
--- trunk/cachestore/cloud/src/main/scala/org/infinispan/loaders/cloud/CloudCacheStore.scala	2010-01-16 15:18:18 UTC (rev 1381)
+++ trunk/cachestore/cloud/src/main/scala/org/infinispan/loaders/cloud/CloudCacheStore.scala	2010-01-16 16:09:11 UTC (rev 1382)
@@ -18,6 +18,7 @@
 import org.infinispan.loaders.{LockSupportCacheStoreConfig, CacheLoaderConfig, CacheLoaderException}
 import org.jclouds.blobstore._
 import org.scala_tools.javautils.Imports._
+import org.jclouds.concurrent.config.ExecutorServiceModule
 
 /**
  * The CloudCacheStore implementation that utilizes <a href="http://code.google.com/p/jclouds">JClouds</a> to communicate
@@ -70,39 +71,21 @@
       if (cfg.password == null) throw new ConfigurationException("Password must be set")
       if (cfg.bucketPrefix == null) throw new ConfigurationException("CloudBucket must be set")
       containerName = getThisContainerName
-      ctx = createBlobStoreContext(cfg)
+      ctx = new BlobStoreContextFactory().createContext(cfg.cloudService, cfg.identity, cfg.password).asInstanceOf[BlobStoreContext[Any, Any]]
       val bs = ctx.getBlobStore
-      if (!bs.containerExists(containerName)) bs.createContainer(containerName)
+      // the "location" is not currently used.
+      if (!bs.containerExists(containerName)) bs.createContainerInLocation(null, containerName)
       blobStore = ctx.getBlobStore
       asyncBlobStore = ctx.getAsyncBlobStore
       pollFutures = !(cfg.getAsyncStoreConfig.isEnabled.booleanValue)
    }
 
-   def createBlobStoreContext(cfg: CloudCacheStoreConfig) = {
-      val properties = new Properties()
-      val is = Util loadResourceAsStream "jclouds.properties"
-      if (is != null) {
-         try {
-            properties load is
-         } catch {
-            case e => log.error("Unable to load contents from jclouds.properties", e)
-         }
-      }
-      val factory = new BlobStoreContextFactory(properties)
-
-      // Need a URI in blobstore://account:key@service/container/path
-      // TODO find a better way to create this context!  Unnecessary construction of a URI only for it to be broken up again into components from within JClouds
-      factory.createContext(HttpUtils.createUri("blobstore://" + cfg.identity +
-            ":" + cfg.password +
-            "@" + cfg.cloudService + "/")).asInstanceOf[BlobStoreContext[Any, Any]]
-   }
-
    def loadAllLockSafe() = {
       val result = new HashSet[InternalCacheEntry]()
-      // TODO change this to use a blobStore
-      val values = ctx.createBlobMap(containerName).values
-      for (blob <- values) {
-         val bucket = readFromBlob(blob)
+//      val values = ctx.createBlobMap(containerName).values
+      val entries = ctx.createBlobMap(containerName).entrySet
+      for (entry <- entries) {
+         val bucket = readFromBlob(entry.getValue, entry.getKey)
          if (bucket.removeExpiredEntries) updateBucket(bucket)
          result addAll bucket.getStoredEntries
       }
@@ -150,17 +133,23 @@
       }
    }
 
-   def loadBucket(hash: String) = readFromBlob(blobStore.getBlob(containerName, hash))
+   def loadBucket(hash: String) = {
+      try {
+         readFromBlob(blobStore.getBlob(containerName, hash), hash)
+      } catch {
+         case e: KeyNotFoundException => null
+      }
+   }
 
    def purge(blobMap: BlobMap) {
-      for (blob <- blobMap.values) {
-         val bucket = readFromBlob(blob)
+      for (entry <- blobMap.entrySet) {
+         val bucket = readFromBlob(entry.getValue, entry.getKey)
          if (bucket.removeExpiredEntries) updateBucket(bucket)
       }
    }
 
    def purgeInternal() {
-      // TODO can expiry data be stored in a blob's metadata?  More efficient purging that way.
+      // TODO can expiry data be stored in a blob's metadata?  More efficient purging that way.  See https://jira.jboss.org/jira/browse/ISPN-334
       if (!cfg.lazyPurgingOnly) {
          acquireGlobalLock(false)
          try {
@@ -233,16 +222,19 @@
       }
    }
 
-   def readFromBlob(blob: Blob): Bucket = {
+   def readFromBlob(blob: Blob, bucketName: String): Bucket = {
       if (blob == null) return null
       try {
-         return marshaller.objectFromInputStream(blob.getContent).asInstanceOf[Bucket]
+         val bucket = marshaller.objectFromInputStream(blob.getContent).asInstanceOf[Bucket]
+         if (bucket != null) bucket setBucketName bucketName
+         bucket
       } catch {
          case e => throw new CacheLoaderException(e)
       }
    }
 
    def getBucketName(bucket: Bucket) = {
+      log.warn("Bucket is {0}", bucket)
       val bucketName = bucket.getBucketName
       if (bucketName startsWith "-")
          bucketName replace ("-", "A")



More information about the infinispan-commits mailing list