2 Replies Latest reply on Nov 17, 2008 9:55 AM by mattdz

    Node is not valid.  Perhaps it has been moved or removed.

    mattdz

      Hi guys. When we upgraded to JBoss Cache 2.2.0, we started noticing something weird. After a certain amount of time, it looks like JBoss Cache completely removes the roots under which we store items. For example, after a period of no use, we start getting these errors:

      [16:56:49.045] {http--20300-10} org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.jboss.cache.NodeNotValidException: Node /dzone/avatars is not valid. Perhaps it has been moved or removed.

      Where /dzone/avatars is a cache node and we store avatars as children under that. In prior versions, it just removed everything under that, not that node itself. The same thing happens when calling Node.removeChild(Fqn.ROOT); where Node is /dzone/avatars. Is there a way to get back to the previous behavior? I'd really appreciate the help here :)

      When there is activity on the caches, this error doesn't happen unless we explicitly call the clear functions. Our configuration is below, we're using local caching only although that will likely change.

      -Matt

      ========

      <?xml version="1.0" encoding="UTF-8"?>
      
      <server>
       <!-- Note the value of the 'code' attribute has changed since JBC 1.x -->
       <mbean code="org.jboss.cache.jmx.CacheJmxWrapper" name="jboss.cache:service=Cache">
      
       <!-- Ensure JNDI and the TransactionManager are started before the
      cache. Only works inside JBoss AS; ignored otherwise -->
       <depends>jboss:service=Naming</depends>
       <depends>jboss:service=TransactionManager</depends>
      
       <!-- Configure the TransactionManager -->
       <attribute name="TransactionManagerLookupClass">
       org.jboss.cache.transaction.GenericTransactionManagerLookup
       </attribute>
      
       <!-- Node locking level : SERIALIZABLE
      REPEATABLE_READ (default)
      READ_COMMITTED
      READ_UNCOMMITTED
      NONE -->
       <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
      
       <!-- Lock parent before doing node additions/removes -->
       <attribute name="LockParentForChildInsertRemove">true</attribute>
      
       <!--
       Valid modes are LOCAL
       REPL_ASYNC
       REPL_SYNC
       INVALIDATION_ASYNC
       INVALIDATION_SYNC
       -->
       <attribute name="CacheMode">LOCAL</attribute>
      
       <!-- Name of cluster. Needs to be the same for all JBoss Cache nodes in a
       cluster in order to find each other. -->
       <attribute name="ClusterName">DZone-Cluster</attribute>
      
       <!--Uncomment next three statements to enable JGroups multiplexer.
      This configuration is dependent on the JGroups multiplexer being
      registered in an MBean server such as JBossAS. -->
       <!--
       <depends>jgroups.mux:name=Multiplexer</depends>
       <attribute name="MultiplexerService">jgroups.mux:name=Multiplexer</attribute>
       <attribute name="MultiplexerStack">fc-fast-minimalthreads</attribute>
       -->
      
       <!-- JGroups protocol stack properties.
       ClusterConfig isn't used if the multiplexer is enabled and successfully initialized.
       -->
       <attribute name="ClusterConfig">
       <config>
       <!-- UDP: if you have a multihomed machine,
       set the bind_addr attribute to the appropriate NIC IP address -->
       <!-- UDP: On Windows machines, because of the media sense feature
       being broken with multicast (even after disabling media sense)
       set the loopback attribute to true -->
       <UDP mcast_addr="228.1.2.3" mcast_port="49000"
       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 shun="true" up_thread="true" down_thread="true"/>
       <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" 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"/>
       <pbcast.STATE_TRANSFER up_thread="false" down_thread="false"/>
       </config>
       </attribute>
      
      
       <!--
       The max amount of time (in milliseconds) we wait until the
       initial state (ie. the contents of the cache) are retrieved from
       existing members in a clustered environment
       -->
       <attribute name="StateRetrievalTimeout">20000</attribute>
      
       <!--
       Number of milliseconds to wait until all responses for a
       synchronous call have been received.
       -->
       <attribute name="SyncReplTimeout">20000</attribute>
      
       <!-- Max number of milliseconds to wait for a lock acquisition -->
       <attribute name="LockAcquisitionTimeout">15000</attribute>
      
       <!-- Specific eviction policy configurations. This is LRU -->
       <attribute name="EvictionPolicyConfig">
       <config>
       <attribute name="wakeUpIntervalSeconds">5</attribute>
       <!-- This defaults to 200000 if not specified -->
       <attribute name="eventQueueSize">200000</attribute>
       <attribute name="policyClass">org.jboss.cache.eviction.LRUPolicy</attribute>
      
       <!-- Cache wide default -->
       <region name="/_default_">
       <attribute name="maxNodes">50</attribute>
       <attribute name="timeToLiveSeconds">60</attribute>
       <attribute name="maxAgeSeconds">60</attribute>
       </region>
      
       <!-- Preferences can live forever -->
       <region name="/dzone/preferences">
       <attribute name="maxNodes">100</attribute>
       <attribute name="timeToLiveSeconds">86400</attribute>
       <attribute name="maxAgeSeconds">86400</attribute>
       </region>
      
       <region name="/dzone/linkIdByPlug">
       <attribute name="maxNodes">1000</attribute>
       <attribute name="timeToLiveSeconds">1000</attribute>
       <attribute name="maxAgeSeconds">3600</attribute>
       </region>
      
      
       <region name="/dzone/thumbnails">
       <attribute name="maxNodes">2000</attribute>
       <attribute name="timeToLiveSeconds">1000</attribute>
       <attribute name="maxAgeSeconds">3600</attribute>
       </region>
      
       <region name="/dzone/links">
       <attribute name="maxNodes">5000</attribute>
       <attribute name="timeToLiveSeconds">1000</attribute>
       <attribute name="maxAgeSeconds">3600</attribute>
       </region>
      
       <region name="/dzone/avatars">
       <attribute name="maxNodes">5000</attribute>
       <attribute name="timeToLiveSeconds">1000</attribute>
       <attribute name="maxAgeSeconds">1800</attribute>
       </region>
      
       <region name="/dzone/linkWithCurrentUser">
       <attribute name="maxNodes">1000</attribute>
       <attribute name="timeToLiveSeconds">1000</attribute>
       <attribute name="maxAgeSeconds">3600</attribute>
       </region>
       </config>
       </attribute>
       </mbean>
      </server>