0 Replies Latest reply on Dec 23, 2008 4:54 AM by Vincent Sevel

    Node.replaceAll and Node.getData do not work in an atomic wa

    Vincent Sevel Newbie

      Hi, I am trying to use jbosscache in the simplest way, having readers and writers working at the same time, with no transaction, just using the atomicity of operations replaceAll (writers) and getData (readers) on Node.

      In my test case, 100 writers replace each second (or less) the complete data of a node using its own. Each second (or less) as well, 100 readers read that data, and verify its consistency (each value in the map is equal to the map size).

      replaceAll and getData being atomic, I shouldn't have any reader complaining about consistencies, which is not what I found.

      Here is my test case:

      package mytest;
      
      import java.util.HashMap;
      import java.util.Map;
      import java.util.Random;
      
      import junit.framework.TestCase;
      
      import org.jboss.cache.Cache;
      import org.jboss.cache.CacheFactory;
      import org.jboss.cache.DefaultCacheFactory;
      import org.jboss.cache.Fqn;
      import org.jboss.cache.Node;
      
      public class MyCacheTest extends TestCase {
      
       CacheFactory<Integer, Integer> factory;
      
       Cache<Integer, Integer> cache;
      
       Node<Integer, Integer> populations;
      
       int errors = 0;
      
       public void testCache() throws Exception {
       factory = new DefaultCacheFactory<Integer, Integer>();
       cache = factory.createCache();
       populations = cache.getRoot().addChild(Fqn.fromString("populations"));
      
       final Random r = new Random();
      
       for (int i = 0; i < 100; i++) {
       final Map<Integer, Integer> map = new HashMap<Integer, Integer>();
      
       for (int j = 0; j < i; j++) {
       map.put(j, i);
       }
      
       new Thread() {
       @Override
       public void run() {
       while (true) {
       populations.replaceAll(map);
       // System.out.println("replaceAll " + map.size());
       sleepRandom(r);
       }
       }
       }.start();
       }
      
       for (int i = 0; i < 100; i++) {
      
       new Thread() {
       @Override
       public void run() {
       while (true) {
       Map<Integer, Integer> map = populations.getData();
       int size = map.size();
      
       for (Integer value : map.values()) {
       if (value != size) {
       System.out.println("inconsistency in " + map);
      
       synchronized (MyCacheTest.this) {
       errors++;
       }
      
       break;
       }
       }
      
       sleepRandom(r);
       }
       }
       }.start();
       }
      
       Thread.sleep(10000);
       System.out.println("errors: " + errors);
       assertEquals(0, errors);
       }
      
       void sleepRandom(final Random r) {
       long sleep = 0;
       synchronized (r) {
       sleep = (long) (1000 * r.nextFloat());
       }
       try {
       Thread.sleep(sleep);
       } catch (InterruptedException e) {
       e.printStackTrace();
       }
       }
      }
      


      Some runs do exhibit some inconsistencies, like the following, and some don't:


      <10:52:57,469> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.invocation.InvocationContextContainer that may have been injected from an external source.>
      <10:52:57,547> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.factories.context.ContextFactory that may have been injected from an external source.>
      <10:52:57,547> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.interceptors.InterceptorChain that may have been injected from an external source.>
      <10:52:57,625> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.transaction.TransactionTable that may have been injected from an external source.>
      <10:52:57,625> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,625> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.RPCManager that may have been injected from an external source.>
      <10:52:57,672> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.remoting.jgroups.ChannelMessageListener that may have been injected from an external source.>
      <10:52:57,672> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.statetransfer.StateTransferManager that may have been injected from an external source.>
      <10:52:57,688> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.marshall.Marshaller that may have been injected from an external source.>
      <10:52:57,688> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.RegionManager that may have been injected from an external source.>
      <10:52:57,719> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.lock.LockManager that may have been injected from an external source.>
      <10:52:57,719> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.DataContainer that may have been injected from an external source.>
      <10:52:57,734> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.NodeFactory that may have been injected from an external source.>
      <10:52:57,750> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.interceptors.InterceptorChain that may have been injected from an external source.>
      <10:52:57,766> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,766> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.notifications.Notifier that may have been injected from an external source.>
      <10:52:57,797> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.commands.CommandsFactory that may have been injected from an external source.>
      <10:52:57,797> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.buddyreplication.BuddyManager that may have been injected from an external source.>
      <10:52:57,812> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,812> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.buddyreplication.BuddyFqnTransformer that may have been injected from an external source.>
      <10:52:57,844> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,859> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.mvcc.MVCCNodeHelper that may have been injected from an external source.>
      <10:52:57,875> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,875> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.RegionRegistry that may have been injected from an external source.>
      <10:52:57,891> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.loader.CacheLoaderManager that may have been injected from an external source.>
      <10:52:57,891> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.statetransfer.StateTransferIntegrator that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.statetransfer.StateTransferGenerator that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.buddyreplication.BuddyManager that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.batch.BatchContainer that may have been injected from an external source.>
      <10:52:57,906> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,938> <DEBUG> <App.CacheStatus> < org.jboss.cache.CacheStatus.needCreateBeforeStart(CacheStatus.java:138) - start() called while current state is INSTANTIATED -- call create() first>
      <10:52:57,938> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.statetransfer.StateTransferManager that may have been injected from an external source.>
      <10:52:57,938> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.marshall.Marshaller that may have been injected from an external source.>
      <10:52:57,938> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.RegionManager that may have been injected from an external source.>
      <10:52:57,938> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.RPCManager that may have been injected from an external source.>
      <10:52:57,938> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,938> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.interceptors.InterceptorChain that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.factories.context.ContextFactory that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.commands.CommandsFactory that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.buddyreplication.BuddyManager that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.buddyreplication.BuddyFqnTransformer that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.lock.LockManager that may have been injected from an external source.>
      <10:52:57,953> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.loader.CacheLoaderManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.statetransfer.StateTransferIntegrator that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.statetransfer.StateTransferGenerator that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface org.jboss.cache.NodeFactory that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.buddyreplication.BuddyManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of class org.jboss.cache.batch.BatchContainer that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.getFromConfiguration(ComponentRegistry.java:420) - Looking in configuration for an instance of interface javax.transaction.TransactionManager that may have been injected from an external source.>
      <10:52:57,969> <DEBUG> <App.DataContainerImpl> < org.jboss.cache.DataContainerImpl.setRoot(DataContainerImpl.java:161) - Setting rootInternal to NodeReference{delegate=UnversionedNode[ /]}>
      <10:52:58,016> <DEBUG> <App.InterceptorChain> < org.jboss.cache.interceptors.InterceptorChain.printChainInfo(InterceptorChain.java:78) - Interceptor chain is: InterceptorChain{
      >> org.jboss.cache.interceptors.CallInterceptor
      >> org.jboss.cache.interceptors.MVCCLockingInterceptor
      >> org.jboss.cache.interceptors.NotificationInterceptor
      >> org.jboss.cache.interceptors.TxInterceptor
      >> org.jboss.cache.interceptors.CacheMgmtInterceptor
      >> org.jboss.cache.interceptors.InvocationContextInterceptor
      }>
      <10:52:58,016> <DEBUG> <App.RegionManagerImpl> < org.jboss.cache.RegionManagerImpl.start(RegionManagerImpl.java:138) - Not using an EvictionPolicy>
      <10:52:58,062> <DEBUG> <App.VersionAwareMarshaller> < org.jboss.cache.marshall.VersionAwareMarshaller.initReplicationVersions(VersionAwareMarshaller.java:116) - Started with version 3.0.1 and versionInt 30>
      <10:52:58,062> <DEBUG> <App.VersionAwareMarshaller> < org.jboss.cache.marshall.VersionAwareMarshaller.initReplicationVersions(VersionAwareMarshaller.java:117) - Using default marshaller class class org.jboss.cache.marshall.CacheMarshaller300>
      <10:52:58,062> <DEBUG> <App.DataContainerImpl> < org.jboss.cache.DataContainerImpl.setRoot(DataContainerImpl.java:161) - Setting rootInternal to UnversionedNode[ /]>
      <10:52:58,328> <INFO > <App.PlatformMBeanServerRegistration> < org.jboss.cache.jmx.PlatformMBeanServerRegistration.registerToPlatformMBeanServer(PlatformMBeanServerRegistration.java:71) - JBossCache MBeans were successfully registered to the platform mbean server.>
      <10:52:58,328> <DEBUG> <App.RPCManagerImpl> < org.jboss.cache.RPCManagerImpl.start(RPCManagerImpl.java:154) - cache mode is local, will not create the channel>
      <10:52:58,344> <INFO > <App.ComponentRegistry> < org.jboss.cache.factories.ComponentRegistry.internalStart(ComponentRegistry.java:750) - JBoss Cache version: JBossCache 'Naga' 3.0.1.GA>
      inconsistency in {0=3, 1=3, 2=3, 3=92, 4=92, 5=92, 6=92, 7=92, 8=92, 9=92, 10=92, 11=92, 12=92, 13=92, 14=92, 15=92, 17=92, 16=92, 19=92, 18=92, 21=92, 20=92, 23=92, 22=92, 25=92, 24=92, 27=92, 26=92, 29=92, 28=92, 31=92, 30=92, 34=92, 35=92, 32=92, 33=92, 38=92, 39=92, 36=92, 37=92, 42=92, 43=92, 40=92, 41=92, 46=92, 47=92, 44=92, 45=92, 51=92, 50=92, 49=92, 48=92, 55=92, 54=92, 53=92, 52=92, 59=92, 58=92, 57=92, 56=92, 63=92, 62=92, 61=92, 60=92, 68=92, 69=92, 70=92, 71=92, 64=92, 65=92, 66=92, 67=92, 76=92, 77=92, 78=92, 79=92, 72=92, 73=92, 74=92, 75=92, 85=92, 84=92, 87=92, 86=92, 81=92, 80=92, 83=92, 82=92, 89=92, 88=92, 91=92, 90=92}
      inconsistency in {0=3, 1=3, 2=3, 3=92, 4=92, 5=92, 6=92, 7=92, 8=92, 9=92, 10=92, 11=92, 12=92, 13=92, 14=92, 15=92, 17=92, 16=92, 19=92, 18=92, 21=92, 20=92, 23=92, 22=92, 25=92, 24=92, 27=92, 26=92, 29=92, 28=92, 31=92, 30=92, 34=92, 35=92, 32=92, 33=92, 38=92, 39=92, 36=92, 37=92, 42=92, 43=92, 40=92, 41=92, 46=92, 47=92, 44=92, 45=92, 51=92, 50=92, 49=92, 48=92, 55=92, 54=92, 53=92, 52=92, 59=92, 58=92, 57=92, 56=92, 63=92, 62=92, 61=92, 60=92, 68=92, 69=92, 70=92, 71=92, 64=92, 65=92, 66=92, 67=92, 76=92, 77=92, 78=92, 79=92, 72=92, 73=92, 74=92, 75=92, 85=92, 84=92, 87=92, 86=92, 81=92, 80=92, 83=92, 82=92, 89=92, 88=92, 91=92, 90=92}
      inconsistency in {0=13, 1=13, 2=13, 3=13, 4=13, 5=13, 6=13, 7=13, 8=13, 9=13, 10=13, 11=13, 12=13, 13=75, 14=75, 15=75, 17=75, 16=75, 19=75, 18=75, 21=75, 20=75, 23=75, 22=75, 25=75, 24=75, 27=75, 26=75, 29=75, 28=75, 31=75, 30=75, 34=75, 35=75, 32=75, 33=75, 38=75, 39=75, 36=75, 37=75, 42=75, 43=75, 40=75, 41=75, 46=75, 47=75, 44=75, 45=75, 51=75, 50=75, 49=75, 48=75, 55=75, 54=75, 53=75, 52=75, 59=75, 58=75, 57=75, 56=75, 63=75, 62=75, 61=75, 60=75, 68=75, 69=75, 70=75, 71=75, 64=75, 65=75, 66=75, 67=75, 72=75, 73=75, 74=75}
      inconsistency in {0=13, 1=13, 2=13, 3=13, 4=13, 5=13, 6=13, 7=13, 8=13, 9=13, 10=13, 11=13, 12=13, 13=75, 14=75, 15=75, 17=75, 16=75, 19=75, 18=75, 21=75, 20=75, 23=75, 22=75, 25=75, 24=75, 27=75, 26=75, 29=75, 28=75, 31=75, 30=75, 34=75, 35=75, 32=75, 33=75, 38=75, 39=75, 36=75, 37=75, 42=75, 43=75, 40=75, 41=75, 46=75, 47=75, 44=75, 45=75, 51=75, 50=75, 49=75, 48=75, 55=75, 54=75, 53=75, 52=75, 59=75, 58=75, 57=75, 56=75, 63=75, 62=75, 61=75, 60=75, 68=75, 69=75, 70=75, 71=75, 64=75, 65=75, 66=75, 67=75, 72=75, 73=75, 74=75}
      errors: 4


      Did I misunderstand the atomicity of operations replaceAll and getData? Is that only limited to a context where JTA is being used?

      Thanks,
      vs