7 Replies Latest reply on May 5, 2010 10:47 AM by Alexander Gavrilov

    AtomicHashMap can't be restored from storage

    Alexander Gavrilov Newbie

      Hello. I have probles using  AtomicHashMap as cache value in caches with enapled storage. There is testcase that reproduce problem

       

       

      package org.infinispan.atomic;
       
      import org.infinispan.Cache;
      import org.infinispan.config.Configuration;
      import org.infinispan.loaders.file.FileCacheStoreConfig;
      import org.infinispan.manager.CacheManager;
      import org.infinispan.test.AbstractInfinispanTest;
      import org.infinispan.test.TestingUtil;
      import org.infinispan.test.fwk.TestCacheManagerFactory;
      import org.testng.annotations.AfterMethod;
      import org.testng.annotations.BeforeMethod;
      import org.testng.annotations.Test;
      import javax.transaction.TransactionManager;
      import java.io.File;
      import java.io.IOException;
       
      @Test(groups = "functional", testName = "atomic.AtomicMapFunctionalTest")
      public class AtomicMapStorageTest extends AbstractInfinispanTest {
          private int id;
          private Cache<String, Object> cache;
          private TransactionManager tm;
          private CacheManager cm;
          @BeforeMethod
          public void setUp() throws IOException {
              final FileCacheStoreConfig storeConfig = new FileCacheStoreConfig();
              storeConfig.setLocation(getTmpDirName());
              final Configuration cfg = new Configuration();
              cfg.getCacheLoaderManagerConfig().addCacheLoaderConfig(storeConfig);
       
              // these 2 need to be set to use the AtomicMapCache
              cfg.setInvocationBatchingEnabled(true);
              cm = TestCacheManagerFactory.createCacheManager(cfg, true);
              cache = cm.getCache();
              tm = TestingUtil.getTransactionManager(cache);
          }
       
          @AfterMethod
          public void tearDown() {
              TestingUtil.killCacheManagers(cm);
              cache = null;
              tm = null;
          }
          public void testRestoreAtomicMap() {
              final AtomicMap<String, String> map = AtomicMapLookup.getAtomicMap(cache, "key");
              map.put("a", "b");
              //evict from memory
              cache.evict("key");
              // now re-retrieve the map
              assert AtomicMapLookup.getAtomicMap(cache, "key").get("a").equals("b");
          }
       
          public void testRestoreTransactionalAtomicMap() throws Exception{
              tm.begin();
              final AtomicMap<String, String> map = AtomicMapLookup.getAtomicMap(cache, "key");
              map.put("a", "b");
              tm.commit();
             
              //evict from memory
              cache.evict("key");
       
              // now re-retrieve the map and make sure we see the diffs
              assert AtomicMapLookup.getAtomicMap(cache, "key").get("a").equals("b");
          }
       
          private String getTmpDirName() throws IOException {
              final File location = File.createTempFile(getClass().getSimpleName(), "" + id++);
              location.delete();
              location.mkdir();
              location.deleteOnExit();
              return location.getAbsolutePath();
          }
      }
      

       

      and there is errors


      java.lang.ClassCastException: org.infinispan.atomic.AtomicHashMapDelta cannot be cast to org.infinispan.atomic.AtomicHashMap
           at org.infinispan.atomic.AtomicMapLookup.getAtomicMap(AtomicMapLookup.java:25)
           at org.infinispan.atomic.AtomicMapStorageTest.testRestoreAtomicMap(AtomicMapStorageTest.java:57)
      
      ===============================================
      
      java.lang.ClassCastException: org.infinispan.atomic.NullDelta cannot be cast to org.infinispan.atomic.AtomicHashMap
           at org.infinispan.atomic.AtomicMapLookup.getAtomicMap(AtomicMapLookup.java:25)
           at org.infinispan.atomic.AtomicMapStorageTest.testRestoreTransactionalAtomicMap(AtomicMapStorageTest.java:70)