[infinispan-commits] Infinispan SVN: r1737 - in trunk/core/src: test/java/org/infinispan/loaders and 1 other directories.
infinispan-commits at lists.jboss.org
infinispan-commits at lists.jboss.org
Tue May 4 11:58:44 EDT 2010
Author: galder.zamarreno at jboss.com
Date: 2010-05-04 11:58:43 -0400 (Tue, 04 May 2010)
New Revision: 1737
Modified:
trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java
trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreFunctionalTest.java
trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java
Log:
[ISPN-417] (AtomicHashMap Externalizer returns delta and not hash map on deserialization) Of course AtomicHashMap's Externalizer should return an atomic hash map and not a delta, what was I thinking at the time?
Modified: trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java 2010-05-04 13:41:39 UTC (rev 1736)
+++ trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java 2010-05-04 15:58:43 UTC (rev 1737)
@@ -56,7 +56,7 @@
/**
* Construction only allowed through this factory method. This factory is intended for use internally by the
- * CacheDelegate. User code should use {@link org.infinispan.atomic.AtomicMapCache#getAtomicMap(Object)}.
+ * CacheDelegate. User code should use {@link org.infinispan.atomic.AtomicMapLookup#getAtomicMap(Cache, Object)}.
*/
public static AtomicHashMap newInstance(Cache cache, Object cacheKey) {
AtomicHashMap value = new AtomicHashMap();
@@ -192,11 +192,14 @@
public static class Externalizer implements org.infinispan.marshall.Externalizer {
public void writeObject(ObjectOutput output, Object subject) throws IOException {
DeltaAware dw = (DeltaAware) subject;
- output.writeObject(dw.delta());
+ output.writeObject(dw.delta());
}
public Object readObject(ObjectInput input) throws IOException, ClassNotFoundException {
- return input.readObject();
+ Delta d = (Delta) input.readObject();
+ DeltaAware dw = new AtomicHashMap();
+ dw = d.merge(dw);
+ return dw;
}
}
}
Modified: trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreFunctionalTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreFunctionalTest.java 2010-05-04 13:41:39 UTC (rev 1736)
+++ trunk/core/src/test/java/org/infinispan/loaders/BaseCacheStoreFunctionalTest.java 2010-05-04 15:58:43 UTC (rev 1737)
@@ -22,6 +22,8 @@
package org.infinispan.loaders;
import org.infinispan.Cache;
+import org.infinispan.atomic.AtomicMap;
+import org.infinispan.atomic.AtomicMapLookup;
import org.infinispan.config.CacheLoaderManagerConfig;
import org.infinispan.config.Configuration;
import org.infinispan.config.GlobalConfiguration;
@@ -35,6 +37,8 @@
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
+import javax.transaction.TransactionManager;
+import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.concurrent.TimeUnit;
@@ -123,6 +127,47 @@
}
}
+ public void testRestoreAtomicMap(Method m) {
+ Configuration cfg = new Configuration();
+ cfg.getCacheLoaderManagerConfig().addCacheLoaderConfig(csConfig);
+ CacheManager localCacheManager = TestCacheManagerFactory.createCacheManager(cfg, true);
+ try {
+ Cache<String, Object> cache = localCacheManager.getCache();
+ AtomicMap<String, String> map = AtomicMapLookup.getAtomicMap(cache, m.getName());
+ map.put("a", "b");
+
+ //evict from memory
+ cache.evict(m.getName());
+
+ // now re-retrieve the map
+ assert AtomicMapLookup.getAtomicMap(cache, m.getName()).get("a").equals("b");
+ } finally {
+ TestingUtil.killCacheManagers(localCacheManager);
+ }
+ }
+
+// public void testRestoreTransactionalAtomicMap(Method m) throws Exception{
+// Configuration cfg = new Configuration();
+// cfg.getCacheLoaderManagerConfig().addCacheLoaderConfig(csConfig);
+// CacheManager localCacheManager = TestCacheManagerFactory.createCacheManager(cfg, true);
+// try {
+// Cache<String, Object> cache = localCacheManager.getCache();
+// TransactionManager tm = cache.getAdvancedCache().getTransactionManager();
+// tm.begin();
+// final AtomicMap<String, String> map = AtomicMapLookup.getAtomicMap(cache, m.getName());
+// map.put("a", "b");
+// tm.commit();
+//
+// //evict from memory
+// cache.evict(m.getName());
+//
+// // now re-retrieve the map and make sure we see the diffs
+// assert AtomicMapLookup.getAtomicMap(cache, m.getName()).get("a").equals("b");
+// } finally {
+// TestingUtil.killCacheManagers(localCacheManager);
+// }
+// }
+
private void assertCacheEntry(Cache cache, String key, String value, long lifespanMillis, long maxIdleMillis) {
DataContainer dc = cache.getAdvancedCache().getDataContainer();
InternalCacheEntry ice = dc.get(key);
Modified: trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java 2010-05-04 13:41:39 UTC (rev 1736)
+++ trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java 2010-05-04 15:58:43 UTC (rev 1737)
@@ -356,20 +356,17 @@
m.put("k1", "v3");
assert m.size() == 1;
byte[] bytes = marshaller.objectToByteBuffer(m);
- AtomicHashMapDelta d = (AtomicHashMapDelta) marshaller.objectFromByteBuffer(bytes);
- assert d.getChangeLogSize() == 3;
- AtomicHashMap<String, String> merged = new AtomicHashMap<String, String>();
- merged = (AtomicHashMap) d.merge(merged);
- for (Map.Entry<String, String> entry : merged.entrySet()) {
+ m = (AtomicHashMap<String, String>) marshaller.objectFromByteBuffer(bytes);
+ for (Map.Entry<String, String> entry : m.entrySet()) {
assert m.get(entry.getKey()).equals(entry.getValue());
}
- assert merged.size() == 1;
+ assert m.size() == 1;
m = new AtomicHashMap();
assert m.isEmpty();
bytes = marshaller.objectToByteBuffer(m);
- NullDelta nulld = (NullDelta) marshaller.objectFromByteBuffer(bytes);
- assert nulld == NullDelta.INSTANCE;
+ m = (AtomicHashMap<String, String>) marshaller.objectFromByteBuffer(bytes);
+ assert m.isEmpty();
m = new AtomicHashMap<String, String>();
m.initForWriting();
@@ -379,14 +376,11 @@
m.remove("k1");
assert m.size() == 2;
bytes = marshaller.objectToByteBuffer(m);
- d = (AtomicHashMapDelta) marshaller.objectFromByteBuffer(bytes);
- assert d.getChangeLogSize() == 4;
- merged = new AtomicHashMap<String, String>();
- merged = (AtomicHashMap) d.merge(merged);
- for (Map.Entry<String, String> entry : merged.entrySet()) {
+ m = (AtomicHashMap<String, String>) marshaller.objectFromByteBuffer(bytes);
+ for (Map.Entry<String, String> entry : m.entrySet()) {
assert m.get(entry.getKey()).equals(entry.getValue());
}
- assert merged.size() == 2;
+ assert m.size() == 2;
m = new AtomicHashMap<String, String>();
m.initForWriting();
@@ -396,14 +390,11 @@
m.clear();
assert m.isEmpty();
bytes = marshaller.objectToByteBuffer(m);
- d = (AtomicHashMapDelta) marshaller.objectFromByteBuffer(bytes);
- assert d.getChangeLogSize() == 4;
- merged = new AtomicHashMap<String, String>();
- merged = (AtomicHashMap) d.merge(merged);
- for (Map.Entry<String, String> entry : merged.entrySet()) {
+ m = (AtomicHashMap<String, String>) marshaller.objectFromByteBuffer(bytes);
+ for (Map.Entry<String, String> entry : m.entrySet()) {
assert m.get(entry.getKey()).equals(entry.getValue());
}
- assert merged.isEmpty();
+ assert m.isEmpty();
}
public void testMarshallObjectThatContainsACustomReadObjectMethod() throws Exception {
More information about the infinispan-commits
mailing list