You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/10/21 22:36:20 UTC
[03/24] usergrid git commit: Cache now working with
ExpandingShardLocator and BucketScopedRowKey fun.
Cache now working with ExpandingShardLocator and BucketScopedRowKey fun.
Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6f5db808
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6f5db808
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6f5db808
Branch: refs/heads/master
Commit: 6f5db8082618ed0e1d5256fab779273640b0dc68
Parents: af5d260
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Sep 21 10:57:58 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Sep 21 10:57:58 2015 -0400
----------------------------------------------------------------------
stack/corepersistence/cache/pom.xml | 15 +-
.../persistence/cache/guice/CacheModule.java | 11 +-
.../cache/impl/CacheFactoryImpl.java | 34 ++-
.../persistence/cache/impl/ScopedCacheImpl.java | 12 +-
.../cache/impl/ScopedCacheSerialization.java | 5 +-
.../impl/ScopedCacheSerializationImpl.java | 260 ++++++++++++++++++-
.../persistence/cache/CacheTestModule.java | 34 +++
.../persistence/cache/ScopedCacheTest.java | 27 +-
.../persistence/map/guice/TestMapModule.java | 18 ++
stack/corepersistence/pom.xml | 12 -
10 files changed, 391 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/pom.xml b/stack/corepersistence/cache/pom.xml
index dc71284..f6aec2d 100644
--- a/stack/corepersistence/cache/pom.xml
+++ b/stack/corepersistence/cache/pom.xml
@@ -34,25 +34,27 @@ limitations under the License.
<dependencies>
<dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>${commons.lang.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- <version>${commons.lang.version}</version>
- </dependency>
+ <!-- test deps -->
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
- <scope>test</scope>
</dependency>
+ <!--
<dependency>
<groupId>org.apache.usergrid</groupId>
<artifactId>collection</artifactId>
@@ -60,6 +62,7 @@ limitations under the License.
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ -->
</dependencies>
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/guice/CacheModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/guice/CacheModule.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/guice/CacheModule.java
index 7646ad0..d744fcf 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/guice/CacheModule.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/guice/CacheModule.java
@@ -18,11 +18,14 @@
package org.apache.usergrid.persistence.cache.guice;
import com.google.inject.AbstractModule;
+import com.google.inject.Key;
import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.Multibinder;
import org.apache.usergrid.persistence.cache.CacheFactory;
import org.apache.usergrid.persistence.cache.impl.CacheFactoryImpl;
import org.apache.usergrid.persistence.cache.impl.ScopedCacheSerialization;
import org.apache.usergrid.persistence.cache.impl.ScopedCacheSerializationImpl;
+import org.apache.usergrid.persistence.core.migration.schema.Migration;
import java.util.Map;
@@ -39,7 +42,13 @@ public class CacheModule extends AbstractModule {
bind( ScopedCacheSerialization.class ).to( ScopedCacheSerializationImpl.class );
bind( new TypeLiteral<CacheFactory<String, Map<String, Object>>>() {} )
- .to( new TypeLiteral<CacheFactoryImpl<String, Map<String, Object>>>() {} );
+ .to(new TypeLiteral<CacheFactoryImpl<String, Map<String, Object>>>() {});
+
+ bind( new TypeLiteral<ScopedCacheSerialization<String, Map<String, Object>>>() {} )
+ .to(new TypeLiteral<ScopedCacheSerializationImpl<String, Map<String, Object>>>() {});
+
+ Multibinder<Migration> migrationBinding = Multibinder.newSetBinder( binder(), Migration.class );
+ migrationBinding.addBinding().to(Key.get(ScopedCacheSerialization.class));
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/CacheFactoryImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/CacheFactoryImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/CacheFactoryImpl.java
index 8d35321..11a1a4b 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/CacheFactoryImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/CacheFactoryImpl.java
@@ -17,17 +17,45 @@
package org.apache.usergrid.persistence.cache.impl;
+import com.google.common.base.Preconditions;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
import org.apache.usergrid.persistence.cache.CacheFactory;
import org.apache.usergrid.persistence.cache.CacheScope;
import org.apache.usergrid.persistence.cache.ScopedCache;
+import java.util.concurrent.ExecutionException;
+
/**
* Access to caches.
*/
-public class CacheFactoryImpl<K,V> implements CacheFactory<K,V> {
+@Singleton
+public class CacheFactoryImpl<K, V> implements CacheFactory<K, V> {
+
+ private LoadingCache<CacheScope, ScopedCache> cacheCache;
+
+ @Inject
+ public CacheFactoryImpl( final ScopedCacheSerialization serializer ) {
+
+ cacheCache = CacheBuilder.newBuilder().maximumSize(1000).build(
+ new CacheLoader<CacheScope, ScopedCache>() {
+ public ScopedCache load(CacheScope scope) {
+ return new ScopedCacheImpl(scope, serializer);
+ }
+ });
+ }
+
@Override
- public ScopedCache<K,V> getScopedCache( CacheScope scope ) {
- return new ScopedCacheImpl<K,V>(scope);
+ public ScopedCache<K, V> getScopedCache(CacheScope scope) {
+ Preconditions.checkNotNull(scope);
+ try{
+ return cacheCache.get(scope);
+ } catch (ExecutionException ee) {
+ throw new RuntimeException(ee);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheImpl.java
index ad5b7b4..4ed6150 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheImpl.java
@@ -16,6 +16,7 @@
*/
package org.apache.usergrid.persistence.cache.impl;
+import com.google.inject.Inject;
import org.apache.usergrid.persistence.cache.CacheScope;
import org.apache.usergrid.persistence.cache.ScopedCache;
@@ -27,22 +28,25 @@ public class ScopedCacheImpl<K,V> implements ScopedCache<K,V> {
CacheScope scope;
- public ScopedCacheImpl( CacheScope scope ) {
+ ScopedCacheSerialization<K,V> serializer;
+
+ public ScopedCacheImpl( CacheScope scope, ScopedCacheSerialization<K,V> serializer ) {
this.scope = scope;
+ this.serializer = serializer;
}
@Override
public void put(K key, V value, long ttl) {
-
+ serializer.writeValue( scope, key, value, ttl );
}
@Override
public V get(K key) {
- return null;
+ return serializer.readValue( scope, key );
}
@Override
public void invalidate() {
-
+ throw new UnsupportedOperationException( "TODO" ); // TODO
}
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerialization.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerialization.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerialization.java
index 02813aa..7829222 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerialization.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerialization.java
@@ -18,16 +18,17 @@ package org.apache.usergrid.persistence.cache.impl;
import org.apache.usergrid.persistence.cache.CacheScope;
+import org.apache.usergrid.persistence.core.migration.schema.Migration;
/**
* Serialize cache to/from Cassandra.
*/
-public interface ScopedCacheSerialization<K,V> {
+public interface ScopedCacheSerialization<K,V> extends Migration {
V readValue( CacheScope scope, K key );
- void writeValue( CacheScope scope, K key, V value );
+ void writeValue( CacheScope scope, K key, V value, long ttl );
void invalidate( CacheScope scope );
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
index 385c088..2f116d1 100644
--- a/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
+++ b/stack/corepersistence/cache/src/main/java/org/apache/usergrid/persistence/cache/impl/ScopedCacheSerializationImpl.java
@@ -16,7 +16,36 @@
*/
package org.apache.usergrid.persistence.cache.impl;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Preconditions;
+import com.google.common.hash.Funnel;
+import com.google.common.hash.PrimitiveSink;
+import com.google.inject.Inject;
+import com.netflix.astyanax.Keyspace;
+import com.netflix.astyanax.MutationBatch;
+import com.netflix.astyanax.Serializer;
+import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
+import com.netflix.astyanax.connectionpool.exceptions.NotFoundException;
+import com.netflix.astyanax.model.Column;
+import com.netflix.astyanax.model.ColumnList;
+import com.netflix.astyanax.model.CompositeBuilder;
+import com.netflix.astyanax.model.CompositeParser;
+import com.netflix.astyanax.serializers.ObjectSerializer;
+import com.netflix.astyanax.serializers.StringSerializer;
+import org.apache.cassandra.db.marshal.BytesType;
import org.apache.usergrid.persistence.cache.CacheScope;
+import org.apache.usergrid.persistence.core.astyanax.*;
+import org.apache.usergrid.persistence.core.shard.ExpandingShardLocator;
+import org.apache.usergrid.persistence.core.shard.StringHashUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
/**
@@ -24,19 +53,248 @@ import org.apache.usergrid.persistence.cache.CacheScope;
*/
public class ScopedCacheSerializationImpl<K,V> implements ScopedCacheSerialization<K,V> {
+ // row-keys are application ID + consistent hash key
+ // column names are K key toString()
+ // column values are serialization of V value
+
+ public static final Logger logger = LoggerFactory.getLogger(ScopedCacheSerializationImpl.class);
+
+
+ private static final CacheRowKeySerializer ROWKEY_SERIALIZER = new CacheRowKeySerializer();
+
+ private static final BucketScopedRowKeySerializer<String> BUCKET_ROWKEY_SERIALIZER =
+ new BucketScopedRowKeySerializer<>( ROWKEY_SERIALIZER );
+
+ private static final Serializer<String> COLUMN_NAME_SERIALIZER = StringSerializer.get();
+
+ private static final ObjectSerializer COLUMN_VALUE_SERIALIZER = ObjectSerializer.get();
+
+ public static final MultiTennantColumnFamily<BucketScopedRowKey<String>, String> SCOPED_CACHE
+ = new MultiTennantColumnFamily<>( "SCOPED_CACHE",
+ BUCKET_ROWKEY_SERIALIZER, COLUMN_NAME_SERIALIZER, COLUMN_VALUE_SERIALIZER );
+
+ /** Number of buckets to hash across */
+ private static final int[] NUM_BUCKETS = {20};
+
+ /** How to funnel keys for buckets */
+ private static final Funnel<String> MAP_KEY_FUNNEL = new Funnel<String>() {
+
+ @Override
+ public void funnel( final String key, final PrimitiveSink into ) {
+ into.putString(key, StringHashUtils.UTF8);
+ }
+ };
+
+ /**
+ * Locator to get us all buckets
+ */
+ private static final ExpandingShardLocator<String>
+ BUCKET_LOCATOR = new ExpandingShardLocator<>(MAP_KEY_FUNNEL, NUM_BUCKETS);
+
+ private final Keyspace keyspace;
+
+ private final JsonFactory JSON_FACTORY = new JsonFactory();
+
+ private final ObjectMapper MAPPER = new ObjectMapper( JSON_FACTORY );
+
+
+ //------------------------------------------------------------------------------------------
+
+ @Inject
+ public ScopedCacheSerializationImpl( final Keyspace keyspace ) {
+ this.keyspace = keyspace;
+ }
+
@Override
public V readValue(CacheScope scope, K key) {
+
+ Preconditions.checkNotNull(scope, "scope is required");
+ Preconditions.checkNotNull(key, "key is required");
+
+ // determine bucketed row-key based application UUID
+
+ String rowKeyString = scope.getApplication().getUuid().toString();
+ final int bucket = BUCKET_LOCATOR.getCurrentBucket(rowKeyString);
+
+ final BucketScopedRowKey<String> keyRowKey =
+ BucketScopedRowKey.fromKey(scope.getApplication(), rowKeyString, bucket);
+
+ // determine column name based on K key to string
+ String columnName = key.toString();
+
+ try {
+ try {
+ Column<String> result = keyspace.prepareQuery(SCOPED_CACHE)
+ .getKey(keyRowKey).getColumn( columnName ).execute().getResult();
+
+ result.getByteBufferValue();
+ V value = MAPPER.readValue(result.getByteArrayValue(), new TypeReference<V>() {});
+ return value;
+
+ } catch (NotFoundException nfe) {
+ logger.info("Value not found");
+ } catch (IOException ioe) {
+ logger.error("Error reading column value", ioe);
+ }
+
+ } catch (ConnectionException e) {
+ throw new RuntimeException("Unable to connect to cassandra", e);
+ }
return null;
}
+
@Override
- public void writeValue(CacheScope scope, K key, V value) {
+ public void writeValue(CacheScope scope, K key, V value, long ttl) {
+
+ Preconditions.checkNotNull( scope, "scope is required");
+ Preconditions.checkNotNull( key, "key is required" );
+ Preconditions.checkNotNull( value, "value is required");
+
+ // determine bucketed row-key based application UUID
+
+ String rowKeyString = scope.getApplication().getUuid().toString();
+ final int bucket = BUCKET_LOCATOR.getCurrentBucket(rowKeyString);
+
+ final BucketScopedRowKey<String> keyRowKey =
+ BucketScopedRowKey.fromKey( scope.getApplication(), rowKeyString, bucket);
+
+ // determine column name based on K key to string
+ String columnName = key.toString();
+
+ // serialize cache item
+ byte[] cacheBytes;
+ try {
+ cacheBytes = MAPPER.writeValueAsBytes(value);
+ } catch (JsonProcessingException jpe) {
+ throw new RuntimeException("Unable to serialize cache value", jpe);
+ }
+
+ // serialize to the entry
+ final MutationBatch batch = keyspace.prepareMutationBatch();
+ batch.withRow(SCOPED_CACHE, keyRowKey).putColumn(columnName, cacheBytes);
+ executeBatch(batch);
}
+
@Override
public void invalidate(CacheScope scope) {
}
+
+
+ private void executeBatch(MutationBatch batch) {
+ try {
+ batch.execute();
+ } catch (ConnectionException e) {
+ throw new RuntimeException("Unable to connect to cassandra", e);
+ }
+ }
+
+
+ //------------------------------------------------------------------------------------------
+
+ @Override
+ public Collection<MultiTennantColumnFamilyDefinition> getColumnFamilies() {
+ final MultiTennantColumnFamilyDefinition scopedCache =
+ new MultiTennantColumnFamilyDefinition( SCOPED_CACHE,
+ BytesType.class.getSimpleName(),
+ BytesType.class.getSimpleName(),
+ BytesType.class.getSimpleName(),
+ MultiTennantColumnFamilyDefinition.CacheOption.KEYS );
+
+ return Arrays.asList(scopedCache);
+ }
+
+
+ //------------------------------------------------------------------------------------------
+
+// /**
+// * Entries for serializing cache entries keys to a row
+// */
+// private static class CacheKey {
+// public final String key;
+//
+// private CacheKey( final String key ) {
+// this.key = key;
+// }
+//
+// /**
+// * Create a scoped row key from the key
+// */
+// public static ScopedRowKey<CacheKey> fromKey(
+// final CacheScope cacheScope, final String key ) {
+// return ScopedRowKey.fromKey( cacheScope.getApplication(), new CacheKey( key ) );
+// }
+// }
+
+ /**
+ * Inner class to serialize cache key
+ */
+ private static class CacheRowKeySerializer implements CompositeFieldSerializer<String> {
+
+ @Override
+ public void toComposite( final CompositeBuilder builder, final String key ) {
+ builder.addString(key);
+ }
+
+ @Override
+ public String fromComposite( final CompositeParser composite ) {
+ final String key = composite.readString();
+ return key;
+ }
+ }
+
+
+// /**
+// * Inner class to serialize cache value
+// */
+// private static class CacheEntitySerializer implements CompositeFieldSerializer {
+//
+// @Override
+// public void toComposite(CompositeBuilder builder, Object value) {
+//
+// }
+//
+// @Override
+// public Object fromComposite( final CompositeParser composite ) {
+// return null;
+// }
+// }
+
+
+// /**
+// * Build the results from the row keys
+// */
+// private static interface ResultsBuilder<T> {
+//
+// public T buildResults(final Rows<ScopedRowKey<CacheKey>, Boolean> rows);
+// }
+//
+// public static class StringResultsBuilder implements ResultsBuilder<Map<String, String>>{
+//
+// @Override
+// public Map<String, String> buildResults( final Rows<ScopedRowKey<CacheKey>, Boolean> rows ) {
+// final int size = rows.size();
+//
+// final Map<String, String> results = new HashMap<>(size);
+//
+// for(int i = 0; i < size; i ++){
+//
+// final Row<ScopedRowKey<CacheKey>, Boolean> row = rows.getRowByIndex( i );
+//
+// final String value = row.getColumns().getStringValue( true, null );
+//
+// if(value == null){
+// continue;
+// }
+//
+// results.put( row.getKey().getKey().key, value );
+// }
+//
+// return results;
+// }
+// }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/CacheTestModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/CacheTestModule.java b/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/CacheTestModule.java
new file mode 100644
index 0000000..47f6ccf
--- /dev/null
+++ b/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/CacheTestModule.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.usergrid.persistence.cache;
+
+
+import org.apache.usergrid.persistence.cache.guice.CacheModule;
+import org.apache.usergrid.persistence.core.guice.CommonModule;
+
+
+public class CacheTestModule extends org.apache.usergrid.persistence.core.guice.TestModule {
+
+ @Override
+ protected void configure() {
+ install( new CommonModule());
+ install( new CacheModule() );
+ }
+}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/ScopedCacheTest.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/ScopedCacheTest.java b/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/ScopedCacheTest.java
index 60f34c3..683e2e9 100644
--- a/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/ScopedCacheTest.java
+++ b/stack/corepersistence/cache/src/test/java/org/apache/usergrid/persistence/cache/ScopedCacheTest.java
@@ -21,28 +21,32 @@ package org.apache.usergrid.persistence.cache;
import com.google.inject.Inject;
-import org.apache.usergrid.persistence.cache.guice.CacheModule;
+import org.apache.usergrid.persistence.core.guice.MigrationManagerRule;
import org.apache.usergrid.persistence.core.test.ITRunner;
import org.apache.usergrid.persistence.core.test.UseModules;
import org.apache.usergrid.persistence.model.entity.SimpleId;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import java.util.HashMap;
import java.util.Map;
import static junit.framework.TestCase.assertNotNull;
+import static org.junit.Assert.assertEquals;
@RunWith( ITRunner.class )
-@UseModules( { CacheModule.class } )
+@UseModules( { CacheTestModule.class } )
public class ScopedCacheTest {
- @Inject
- protected CacheFactory<String, Map<String, Object>> cf;
+ // this ensures that SCOPED_CACHE column family is created
+ @Inject @Rule public MigrationManagerRule migrationManagerRule;
- protected CacheScope scope;
+ @Inject protected CacheFactory<String, Map<String, Object>> cf;
+ protected CacheScope scope;
@Before
public void mockApp(){
@@ -53,8 +57,15 @@ public class ScopedCacheTest {
@Test
public void testBasicOperation() {
- ScopedCache cache = cf.getScopedCache(scope);
- assertNotNull( cache );
- }
+ ScopedCache<String, Map<String, Object>> cache = cf.getScopedCache(scope);
+ assertNotNull("should get a cache", cache);
+ Map<String, Object> item = new HashMap<String, Object>() {{
+ put("field1", "value1");
+ }};
+ cache.put("item", item, 0);
+ Map<String, Object> retrievedItem = cache.get("item");
+ assertNotNull( "should get back item", retrievedItem );
+ assertEquals("value1", retrievedItem.get("field1"));
+ }
}
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/guice/TestMapModule.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/guice/TestMapModule.java b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/guice/TestMapModule.java
index 19700c6..ff622de 100644
--- a/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/guice/TestMapModule.java
+++ b/stack/corepersistence/map/src/test/java/org/apache/usergrid/persistence/map/guice/TestMapModule.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package org.apache.usergrid.persistence.map.guice;
http://git-wip-us.apache.org/repos/asf/usergrid/blob/6f5db808/stack/corepersistence/pom.xml
----------------------------------------------------------------------
diff --git a/stack/corepersistence/pom.xml b/stack/corepersistence/pom.xml
index 5af8dfd..e0e4024 100644
--- a/stack/corepersistence/pom.xml
+++ b/stack/corepersistence/pom.xml
@@ -21,18 +21,6 @@ limitations under the License.
<modelVersion>4.0.0</modelVersion>
<description>Prototype for refactoring persistence of usergrid</description>
- <dependencies>
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>common</artifactId>
- <version>2.1.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.usergrid</groupId>
- <artifactId>common</artifactId>
- <version>2.1.0-SNAPSHOT</version>
- </dependency>
- </dependencies>
<groupId>org.apache.usergrid</groupId>
<artifactId>persistence</artifactId>