[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