1 Reply Latest reply on Feb 21, 2007 11:50 AM by Brian Stansberry

    INVALIDATION_SYNC cache with STATE_TRANSFER NOT enabled

    Ionut Rusu Newbie

      Hi there,

      I'm using JBossCache 1.4.1 SP1 with the TreeCache implementation as distributed cache in a clustered environment. All nodes are running on WAS6.1.03 on Windows XP Professional SP 2.Here you have the cache configuration I'm using :

       NodeLockingScheme=PESSIMISTIC
       IsolationLevel=REPEATABLE_READ
       CacheMode=INVALIDATION_SYNC
       UseReplQueue=false
       ReplQueueInterval=0
       ReplQueueMaxElements=0
       ClusterName=ads-cluster
       ClusterProperties=
       <config>
       <UDP mcast_addr="228.1.2.3" mcast_port="48866"
       ip_ttl="64" ip_mcast="true"
       mcast_send_buf_size="150000" mcast_recv_buf_size="80000"
       ucast_send_buf_size="150000" ucast_recv_buf_size="80000"
       loopback="false"/>
       <PING timeout="2000" num_initial_members="3"
       up_thread="false" down_thread="false"/>
       <MERGE2 min_interval="10000" max_interval="20000"/>
       <FD_SOCK/>
       <VERIFY_SUSPECT timeout="1500"
       up_thread="false" down_thread="false"/>
       <pbcast.NAKACK gc_lag="50" retransmit_timeout="600,1200,2400,4800"
       max_xmit_size="8192" up_thread="false" down_thread="false"/>
       <UNICAST timeout="600,1200,2400" window_size="100" min_threshold="10"
       down_thread="false"/>
       <pbcast.STABLE desired_avg_gossip="20000"
       up_thread="false" down_thread="false"/>
       <FRAG frag_size="8192"
       down_thread="false" up_thread="false"/>
       <pbcast.GMS join_timeout="5000" join_retry_timeout="2000"
       shun="true" print_local_addr="true"/>
       </config>
      
       FetchInMemoryState=false
       InitialStateRetrievalTimeout=15000
       SyncReplTimeout=15000
       LockAcquisitionTimeout=15000
       EvictionPolicyClass=
       UseRegionBasedMarshalling=true
      

      Each entry in the cache is a separate node. Part of the state of the TreeCache entries are kept in sync by using a javax.jms.Topic from which all nodes read. The other part of the node state should be synchronized through JBossCache in a sync manner.

      Whenever new entries are read ( and nodes in cache modified) from the javax.jms.Topic I don't want want them to be sync through automated STATE_TRANSFER that is why I disabled this service.

      The initial state of the topic is read from the DB - not by using a CacheLoader.

      I have the following situation when a NEW entry is added to the cache. The scenario is with 2 nodes in a cluster (N1 and N2) when adding a value V under a key K. One cache entry is one node in the TreeCache.

      in N1 :

      read (K) not found ( OK ) fetched from DB and
      PUT (K,K,V)
      send EVICT message to N2 for (K,V)

      in N2 :

      read (K) , not found ( OK ) fetched from DB and
      PUT (K,K,V)
      send EVICT message to N1 for (K,V)

      ....... and keeps going on like this not (K,K,V) never ending in both nodes at the same time.

      Question:

      How ca I suppress the evict message to the nodes if the entry is newly added and not modifies an existing one ?

      Thanks,
      Ionut