Hi,

I can't seem to find any post about this, so i'm sure i'm doing something 
wrong. If anyone can tell me what, it would be greatly appreciated.

Even with REPEATABLE_READ and writeSkewCheck="true" i can easily determine that 
data versioning isn't working. I'm using 3.2.1GA with the following 
configuration (copied from the samples with only locking values changed):

    <locking
  |             isolationLevel="REPEATABLE_READ"
  |             lockParentForChildInsertRemove="false"
  |             lockAcquisitionTimeout="20000"
  |             nodeLockingScheme="mvcc"
  |             writeSkewCheck="true"
  |             concurrencyLevel="500"/>
  | 
  |    <!-- Configure the TransactionManager -->
  |    <transaction 
transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup"/>
  | 
  |    <clustering mode="replication">
  |       <!-- JGroups protocol stack properties. -->
  |       <jgroupsConfig>
  |          <UDP discard_incompatible_packets="true" enable_bundling="false" 
enable_diagnostics="false" ip_ttl="2"
  |               loopback="false" max_bundle_size="64000" 
max_bundle_timeout="30" mcast_addr="228.10.10.10"
  |               mcast_port="45588" mcast_recv_buf_size="25000000" 
mcast_send_buf_size="640000"
  |               oob_thread_pool.enabled="true" 
oob_thread_pool.keep_alive_time="10000" oob_thread_pool.max_threads="4"
  |               oob_thread_pool.min_threads="1" 
oob_thread_pool.queue_enabled="true" oob_thread_pool.queue_max_size="10"
  |               oob_thread_pool.rejection_policy="Run" 
thread_naming_pattern="pl" thread_pool.enabled="true"
  |               thread_pool.keep_alive_time="30000" 
thread_pool.max_threads="25" thread_pool.min_threads="1"
  |               thread_pool.queue_enabled="true" 
thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run"
  |               tos="8" ucast_recv_buf_size="20000000" 
ucast_send_buf_size="640000" use_concurrent_stack="true"
  |               use_incoming_packet_handler="true"/>
  |          <PING num_initial_members="3" timeout="2000"/>
  |          <MERGE2 max_interval="30000" min_interval="10000"/>
  |          <FD_SOCK/>
  |          <FD max_tries="5" shun="true" timeout="10000"/>
  |          <VERIFY_SUSPECT timeout="1500"/>
  |          <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" 
retransmit_timeout="300,600,1200,2400,4800"
  |                         use_mcast_xmit="false"/>
  |          <UNICAST timeout="300,600,1200,2400,3600"/>
  |          <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" 
stability_delay="1000"/>
  |          <pbcast.GMS join_timeout="5000" print_local_addr="true" 
shun="false" view_ack_collection_timeout="5000"
  |                      view_bundling="true"/>
  |          <FRAG2 frag_size="60000"/>
  |          <pbcast.STREAMING_STATE_TRANSFER/>
  |          <pbcast.FLUSH timeout="0"/>
  | 
  |       </jgroupsConfig>
  | 
  |       <sync />
  |       <!-- Alternatively, to use async replication, comment out the element 
above and uncomment the element below.  -->
  |       <!-- <async /> -->
  | 
  |    </clustering>
  | 

This is the test code:

    public static void main(String[] args) throws Exception {
  |         CacheFactory<String, Integer> factory = new 
DefaultCacheFactory<String, Integer>();
  |         Cache<String, Integer> cache = 
factory.createCache("conf/cache.xml");
  |         
  |         Node<String, Integer> root = cache.getRoot();
  |         Fqn<String> test1Fqn = Fqn.fromElements("test", "test-1");
  |         Node<String, Integer> test1Counts = root.addChild(test1Fqn);
  |         
  |         for (int i=0; i<10000; i++)
  |             updateCount(test1Counts, "key1");
  |         
  |         boolean run = true;
  |         while (run) {
  |             System.out.println("Members: "+ cache.getMembers().size());
  |             System.out.println("Sum: "+ test1Counts.get("key1"));
  |             Thread.sleep(4000);
  |         }
  |             
  |         cache.stop();
  |         cache.destroy();
  |     }
  |     
  |     private static void updateCount(Node<String, Integer> map, String key) {
  |         while (true) {
  |             try {
  |                 Integer count = map.get(key);
  |                 if (count == null)
  |                     count = 0;
  |                 count++;
  |                 while (true) {
  |                     try {
  |                         map.put(key, count);
  |                         break;
  |                     }
  |                     catch (TimeoutException e) {
  |                         System.out.println(e.getMessage());
  |                     }
  |                     catch (SuspectException e) {
  |                         System.out.println(e.getMessage());
  |                     }
  |                 }
  |                 break;
  |             }
  |             catch (DataVersioningException e) {
  |                 // Retry
  |                 System.out.println(e.getMessage());
  |             }
  |         }
  |         
  |         System.out.println("Updated map: "+ map.getData());
  |     }
  | 

I run two instances on the same machine and set a breakpoint at the "map.get" 
method. I step past the get in both instances, and then let the first instance 
run. Then i step in the second instance, expecting the map.put to fail, but it 
doesn't. I know the cluster works because the get will read the latest value 
put by either instance.

The funny thing is that, when i remove the breakpoint and let both instances 
run, i will occasionally get a DataVersioningException, which suggests that i 
did something right, but not enough. Typically, in the end the total in the 
counter will be around 15K, when it should be exactly 20K.

Can anyone help me out?

Kind regards,
m@


View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4260364#4260364

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4260364
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to