[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