[jboss-user] [JBossCache] - Re: Problems with ReplQueue and RegionBasedMarshalling

carlabramsson do-not-reply at jboss.com
Thu Aug 17 15:01:35 EDT 2006


Upgraded to the SP1-release but no luck... Wrote a testcase on it wich only uses the jars from the lib in the 1.4.0 SP1 dist and a modified replAsync-service.xml (from the dist) that sets these props:

UseReplQueue=true
ReplQueueInterval=100
ReplQueueMaxElements=1


Here's the testcase:


  | 
  | package com.hm.caab.treecachestandalone;
  | 
  | import junit.framework.Test;
  | import junit.framework.TestCase;
  | import junit.framework.TestSuite;
  | import org.apache.log4j.BasicConfigurator;
  | import org.apache.log4j.Logger;
  | import org.jboss.cache.CacheException;
  | import org.jboss.cache.PropertyConfigurator;
  | import org.jboss.cache.TreeCache;
  | 
  | /**
  |  * Sets up two TreeCache and makes a put to the first and
  |  * then validates the put on the second one.
  |  * <p/>
  |  * Date: 2006-aug-17
  |  *
  |  * @author Carl Abramsson
  |  */
  | public class TestDualCache extends TestCase {
  | 
  |     protected static Logger log = Logger.getLogger(TestDualCache.class.getName());
  | 
  |     TreeCache treeCache1 = null;
  |     TreeCache treeCache2 = null;
  | 
  | 
  |     Exception ex;
  | 
  |     protected void setUp() throws Exception {
  |         super.setUp();
  |         BasicConfigurator.configure();
  | 
  |         // Cache 1
  |         treeCache1 = new TreeCache();
  |         PropertyConfigurator config1 = new PropertyConfigurator();
  |         config1.configure(treeCache1, "replAsync-replQue-service.xml"); // Load config file from classpath
  |         treeCache1.startService();
  |         sleepThread((long) 10000);
  |         treeCache1.registerClassLoader("/", Thread.currentThread().getContextClassLoader());
  |         treeCache1.activateRegion("/");
  |         sleepThread((long) 10000);
  | 
  |         // Cache 2
  |         treeCache2 = new TreeCache();
  | 
  |         PropertyConfigurator config2 = new PropertyConfigurator();
  |         config2.configure(treeCache2, "replAsync-replQue-service.xml"); // Load config file from classpath
  |         treeCache2.startService();
  |         sleepThread((long) 10000);
  |         treeCache2.registerClassLoader("/", Thread.currentThread().getContextClassLoader());
  |         treeCache2.activateRegion("/");
  | 
  |         sleepThread((long) 10000);
  |     }
  | 
  |     protected void tearDown() throws Exception {
  |         sleepThread((long) 10);
  |         super.tearDown();
  | 
  |         if (treeCache1 != null) {
  |             treeCache1.stopService();
  |             treeCache1.destroyService();
  |             treeCache1 = null;
  |         }
  |         if (treeCache2 != null) {
  |             treeCache2.stopService();
  |             treeCache2.destroyService();
  |             treeCache2 = null;
  |         }
  |         if (ex != null)
  |             throw ex;
  |     }
  | 
  |     public void testPut() throws CacheException {
  |         assertEquals(treeCache1.getMembers().size(), 2);
  |         treeCache1.put("/a/b/c", "age", new Integer(38));
  |         assertEquals(treeCache1.get("/a/b/c", "age"), new Integer(38));
  |         assertNotNull(treeCache1.get("/a/b/c"));
  |         assertEquals(0, treeCache1.getNumberOfLocksHeld());
  |         assertEquals(0, treeCache1.getLockTable().size());
  |         sleepThread((long) 10000);
  |         assertEquals(treeCache2.get("/a/b/c", "age"), new Integer(38));
  |         assertNotNull(treeCache2.get("/a/b/c"));
  |     }
  | 
  |     /**
  |      * Puts the current thread to sleep for the desired number of ms, suppressing
  |      * any exceptions.
  |      *
  |      * @param sleeptime number of ms to sleep
  |      */
  |     public static void sleepThread(long sleeptime) {
  |         log.info("Sleeping for " + sleeptime + " millis...");
  |         try {
  |             Thread.sleep(sleeptime);
  |         }
  |         catch (InterruptedException ie) {
  |         }
  |         log.info("Exiting sleep....");
  |     }
  | 
  |     public static Test suite() {
  |         return new TestSuite(TestDualCache.class);
  |     }
  | 
  | 
  | }
  | 
  | 



And here's the replAsync-replQue-service.xml config: 


  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <!-- ===================================================================== -->
  | <!--                                                                       -->
  | <!--  Sample TreeCache Service Configuration                               -->
  | <!--                                                                       -->
  | <!-- ===================================================================== -->
  | 
  | <server>
  | 
  |     <classpath codebase="./lib" archives="jboss-cache.jar, jgroups.jar"/>
  | 
  | 
  |     <!-- ==================================================================== -->
  |     <!-- Defines TreeCache configuration                                      -->
  |     <!-- ==================================================================== -->
  | 
  |     <mbean code="org.jboss.cache.TreeCache"
  |         name="jboss.cache:service=TreeCache">
  | 
  |         <depends>jboss:service=Naming</depends>
  |         <depends>jboss:service=TransactionManager</depends>
  | 
  |         <!--
  |         Configure the TransactionManager
  |     -->
  |         <attribute name="TransactionManagerLookupClass">org.jboss.cache.DummyTransactionManagerLookup</attribute>
  | 
  |         <!--
  |             Isolation level : SERIALIZABLE
  |                               REPEATABLE_READ (default)
  |                               READ_COMMITTED
  |                               READ_UNCOMMITTED
  |                               NONE
  |         -->
  |         <attribute name="IsolationLevel">REPEATABLE_READ</attribute>
  | 
  |         <!--
  |              Valid modes are LOCAL
  |                              REPL_ASYNC
  |                              REPL_SYNC
  |                              INVALIDATION_ASYNC
  |                              INVALIDATION_SYNC
  |         -->
  |         <attribute name="CacheMode">REPL_ASYNC</attribute>
  | 
  |         <!--
  |         Just used for async repl: use a replication queue
  |         -->
  |         <attribute name="UseReplQueue">true</attribute>
  | 
  |         <!--
  |             Replication interval for replication queue (in ms)
  |         -->
  |         <attribute name="ReplQueueInterval">100</attribute>
  | 
  |         <!--
  |             Max number of elements which trigger replication
  |         -->
  |         <attribute name="ReplQueueMaxElements">1</attribute>
  | 
  |         <!-- Name of cluster. Needs to be the same for all clusters, in order
  |              to find each other
  |         -->
  |         <attribute name="ClusterName">TreeCache-Cluster</attribute>
  | 
  |         <!-- JGroups protocol stack properties. Can also be a URL,
  |              e.g. file:/home/bela/default.xml
  |            <attribute name="ClusterProperties"></attribute>
  |         -->
  | 
  |         <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="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="true"/>
  |                 <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" />-->
  |                 <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"/>
  |                 <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/>
  |             </config>
  |         </attribute>
  | 
  |         <!--
  |          Whether or not to fetch state on joining a cluster
  |          NOTE this used to be called FetchStateOnStartup and has been renamed to be more descriptive.
  |         -->
  |         <attribute name="FetchInMemoryState">true</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="InitialStateRetrievalTimeout">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>
  | 
  | 
  |         <!-- Name of the eviction policy class. -->
  |         <attribute name="EvictionPolicyClass"></attribute>
  | 
  |        <!--
  |           Indicate whether to use region based marshalling or not. Set this to true if you are running under a scoped
  |           class loader, e.g., inside an application server. Default is "false".
  |        -->
  |         <attribute name="UseRegionBasedMarshalling">true</attribute>
  |         <attribute name="InactiveOnStartup">true</attribute>
  | 
  |     </mbean>
  | 
  | 
  |    <!--  Uncomment to get a graphical view of the TreeCache MBean above -->
  |    <!--   <mbean code="org.jboss.cache.TreeCacheView" name="jboss.cache:service=TreeCacheView">-->
  |    <!--      <depends>jboss.cache:service=TreeCache</depends>-->
  |    <!--      <attribute name="CacheService">jboss.cache:service=TreeCache</attribute>-->
  |    <!--   </mbean>-->
  | 
  | 
  | </server>
  | 
  | 
  | 


And the errors are still there:

60231 [Timer-1] ERROR org.jgroups.blocks.RpcDispatcher  - exception=java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
60231 [Timer-1] ERROR org.jboss.cache.ReplicationQueue  - failed replicating 0 elements in replication queue
java.io.NotSerializableException: RpcDispatcher returned a null.  This is most often caused by args for _replicate([]) not being serializable.
	at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:4167)
	at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:4114)
	at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:4222)
	at org.jboss.cache.ReplicationQueue.flush(ReplicationQueue.java:149)
	at org.jboss.cache.ReplicationQueue$MyTask.run(ReplicationQueue.java:158)
	at java.util.TimerThread.mainLoop(Timer.java:512)
	at java.util.TimerThread.run(Timer.java:462)



And the other one:

45185 [main] ERROR org.jgroups.blocks.RpcDispatcher  - exception=java.lang.IllegalArgumentException: Marshaller.extractFqn(): Unknown method call id: -1
45185 [main] ERROR org.jboss.cache.ReplicationQueue  - failed replicating 1 elements in replication queue
java.io.NotSerializableException: RpcDispatcher returned a null.  This is most often caused by args for _replicate([_replicate(_put(null, /a/b/c, age, 38, true))]) not being serializable.
	at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:4167)
	at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:4114)
	at org.jboss.cache.TreeCache.callRemoteMethods(TreeCache.java:4222)
	at org.jboss.cache.ReplicationQueue.flush(ReplicationQueue.java:149)
	at org.jboss.cache.ReplicationQueue.add(ReplicationQueue.java:131)
	at org.jboss.cache.interceptors.BaseRpcInterceptor.putCallOnAsyncReplicationQueue(BaseRpcInterceptor.java:130)
	at org.jboss.cache.interceptors.BaseRpcInterceptor.replicateCall(BaseRpcInterceptor.java:98)
	at org.jboss.cache.interceptors.BaseRpcInterceptor.replicateCall(BaseRpcInterceptor.java:88)
	at org.jboss.cache.interceptors.ReplicationInterceptor.handleReplicatedMethod(ReplicationInterceptor.java:114)
	at org.jboss.cache.interceptors.ReplicationInterceptor.invoke(ReplicationInterceptor.java:83)
	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
	at org.jboss.cache.interceptors.TxInterceptor.handleNonTxMethod(TxInterceptor.java:345)
	at org.jboss.cache.interceptors.TxInterceptor.invoke(TxInterceptor.java:156)
	at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
	at org.jboss.cache.interceptors.CacheMgmtInterceptor.invoke(CacheMgmtInterceptor.java:157)
	at org.jboss.cache.TreeCache.invokeMethod(TreeCache.java:5520)
	at org.jboss.cache.TreeCache.put(TreeCache.java:3678)
	at org.jboss.cache.TreeCache.put(TreeCache.java:3616)
	at com.hm.caab.treecachestandalone.TestDualCache.testPut(TestDualCache.java:76)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at junit.textui.TestRunner.doRun(TestRunner.java:116)
	at com.intellij.rt.execution.junit2.IdeaJUnitAgent.doRun(IdeaJUnitAgent.java:58)
	at junit.textui.TestRunner.start(TestRunner.java:172)
	at com.intellij.rt.execution.junit.TextTestRunner2.startRunnerWithArgs(TextTestRunner2.java:23)
	at com.intellij.rt.execution.junit2.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:98)
	at com.intellij.rt.execution.junit2.JUnitStarter.main(JUnitStarter.java:32)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)

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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3965860



More information about the jboss-user mailing list