The cause of OptionalDataException that was messing up state transfers
is now fixed. However, "Initial state transfer failed" error was still
popping up in some tests. The cause of this error is incorrect logic in
TreeCache.startService related to fetching of in memory state. JBC can
not fetch in memory state based only on FetchInMemoryState element but
should rather use JBC 1.4 logic?
protected boolean shouldFetchStateOnStartup() {
return !configuration.isInactiveOnStartup() && buddyManager == null
&&
(configuration.isFetchInMemoryState() || (cacheLoaderManager
!= null &&
cacheLoaderManager.isFetchPersistentState()));
}
When I use this approach "Initial state transfer failed" errors go away.
State transfer tests now fail on:
1) Region exceptions
org.jboss.cache.RegionNotEmptyException: Node / already exists and is
not empty at
org.jboss.cache.TreeCache.activateRegion(TreeCache.java:954) at
2) Activators
Activator A caught an exception
junit.framework.AssertionFailedError: Activator A caught an exception at
org.jboss.cache.statetransfer.VersionedTestBase.concurrentActivationTest
(VersionedTestBase.java:427) at
org.jboss.cache.statetransfer.VersionedTestBase.testConcurrentActivation
Sync(VersionedTestBase.java:353)
3) Buddy integration
node /a/d not found (gtx=null, caller=Thread[main,5,main])
org.jboss.cache.NodeNotExistsException: node /a/d not found (gtx=null,
caller=Thread[main,5,main]) at
org.jboss.cache.TreeCache._put(TreeCache.java:2783) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)