[infinispan-commits] Infinispan SVN: r1748 - in trunk/core/src: test/java/org/infinispan/atomic and 1 other directories.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Thu May 6 10:30:47 EDT 2010


Author: galder.zamarreno at jboss.com
Date: 2010-05-06 10:30:46 -0400 (Thu, 06 May 2010)
New Revision: 1748

Modified:
   trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java
   trunk/core/src/main/java/org/infinispan/atomic/AtomicMapLookup.java
   trunk/core/src/test/java/org/infinispan/atomic/AtomicHashMapConcurrencyTest.java
   trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java
Log:
[ISPN-419] (Transactional AtomicHashMap modifications are lost when persisting) Tree module relies on the logic that getting a new atomic hash map will put it in the cache, so restore it to avoid introducing regressions.

Modified: trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java	2010-05-06 13:50:34 UTC (rev 1747)
+++ trunk/core/src/main/java/org/infinispan/atomic/AtomicHashMap.java	2010-05-06 14:30:46 UTC (rev 1748)
@@ -58,11 +58,14 @@
     * 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.AtomicMapLookup#getAtomicMap(Cache, Object)}.
     */
-   public static AtomicHashMap newInstance() {
-      return new AtomicHashMap();
+   public static AtomicHashMap newInstance(Cache cache, Object cacheKey) {
+      AtomicHashMap value = new AtomicHashMap();
+      Object oldValue = cache.putIfAbsent(cacheKey, value);
+      if (oldValue != null) value = (AtomicHashMap) oldValue;
+      return value;
    }
 
-   AtomicHashMap() {
+   public AtomicHashMap() {
       delegate = new FastCopyHashMap<K, V>();
    }
 

Modified: trunk/core/src/main/java/org/infinispan/atomic/AtomicMapLookup.java
===================================================================
--- trunk/core/src/main/java/org/infinispan/atomic/AtomicMapLookup.java	2010-05-06 13:50:34 UTC (rev 1747)
+++ trunk/core/src/main/java/org/infinispan/atomic/AtomicMapLookup.java	2010-05-06 14:30:46 UTC (rev 1748)
@@ -21,7 +21,7 @@
    @SuppressWarnings("unchecked")
    public static <MK, K, V> AtomicMap<K, V> getAtomicMap(Cache<?, ?> cache, MK key) {
       Object value = cache.get(key);
-      if (value == null) value = AtomicHashMap.newInstance();
+      if (value == null) value = AtomicHashMap.newInstance(cache, key);
       AtomicHashMap<K, V> castValue = (AtomicHashMap<K, V>) value;
       return castValue.getProxy(cache, key, cache.getAdvancedCache().getBatchContainer(), cache.getAdvancedCache().getInvocationContextContainer());
    }

Modified: trunk/core/src/test/java/org/infinispan/atomic/AtomicHashMapConcurrencyTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/atomic/AtomicHashMapConcurrencyTest.java	2010-05-06 13:50:34 UTC (rev 1747)
+++ trunk/core/src/test/java/org/infinispan/atomic/AtomicHashMapConcurrencyTest.java	2010-05-06 14:30:46 UTC (rev 1748)
@@ -57,8 +57,7 @@
 
    public void testConcurrentCreate() throws Exception {
       tm.begin();
-      AtomicMap<String, String> map = AtomicMapLookup.getAtomicMap(cache, KEY);
-      map.put("blah", "blah");
+      AtomicMapLookup.getAtomicMap(cache, KEY);
       OtherThread ot = new OtherThread();
       ot.start();
       Object response = ot.response.take();
@@ -78,7 +77,6 @@
 
    public void testReadAfterTxStarted() throws Exception {
       AtomicMap<Integer, String> atomicMap = AtomicMapLookup.getAtomicMap(cache, KEY);
-      cache.putIfAbsent(KEY, AtomicHashMap.newInstance());
       atomicMap.put(1, "existing");
       tm.begin();
       atomicMap.put(1, "newVal");
@@ -109,7 +107,6 @@
          try {
             tm.begin();
             AtomicMap<Integer, String> atomicMap = AtomicMapLookup.getAtomicMap(cache, KEY);
-            if (cache.get(KEY) == null) cache.putIfAbsent(KEY, AtomicHashMap.newInstance());
             boolean notCommited = true;
             while (notCommited) {
                Operation op = toExecute.take();

Modified: trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java
===================================================================
--- trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java	2010-05-06 13:50:34 UTC (rev 1747)
+++ trunk/core/src/test/java/org/infinispan/marshall/VersionAwareMarshallerTest.java	2010-05-06 14:30:46 UTC (rev 1748)
@@ -346,7 +346,7 @@
    }
 
    public void testAtomicHashMap() throws Exception {
-      AtomicHashMap<String, String> m = AtomicHashMap.newInstance();
+      AtomicHashMap<String, String> m = new AtomicHashMap<String, String>();
       m.initForWriting();
       m.put("k1", "v1");
       m.put("k1", "v2");
@@ -359,13 +359,13 @@
       }
       assert m.size() == 1;
       
-      m = AtomicHashMap.newInstance();
+      m = new AtomicHashMap<String, String>();
       assert m.isEmpty();
       bytes = marshaller.objectToByteBuffer(m);
       m = (AtomicHashMap<String, String>) marshaller.objectFromByteBuffer(bytes);
       assert m.isEmpty();
       
-      m = AtomicHashMap.newInstance();
+      m = new AtomicHashMap<String, String>();
       m.initForWriting();
       m.put("k1", "v1");
       m.put("k2", "v2");
@@ -379,7 +379,7 @@
       }
       assert m.size() == 2;
       
-      m = AtomicHashMap.newInstance();
+      m = new AtomicHashMap<String, String>();
       m.initForWriting();
       m.put("k5", "v1");
       m.put("k5", "v2");



More information about the infinispan-commits mailing list