[
https://issues.apache.org/jira/browse/GEODE-538?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15007632#comment-15007632
]
Dan Smith commented on GEODE-538:
---------------------------------
I was working with Jinmei when we noticed this.
I think the basic problem that we are allowing operations to proceed on a
region that is not really initialized.
What's going on is that a member is restarting a member with two persistent
colocated regions. After it creates the parent region, we return a region
object from the RegionFactory.create method. However, geode hasn't actually
recovered the parent region from disk because it's waiting waiting for the
child region to also be created.
Unfortunately if someone calls region.get on the parent at this point it looks
like geode returns null, rather than throwing some sort of exception. That's
bad because it looks like a key is missing when if fact geode hasn't actually
recovered the region yet.
> PersistentColocatedPartitionedRegionDUnitTest.testRebalanceWithOfflineChildRegion
> failed if do not wait on getResult
> --------------------------------------------------------------------------------------------------------------------
>
> Key: GEODE-538
> URL: https://issues.apache.org/jira/browse/GEODE-538
> Project: Geode
> Issue Type: Bug
> Components: persistence
> Reporter: Jinmei Liao
> Assignee: Dan Smith
> Attachments: logs.zip
>
>
> While attempting to work on GEODE-506, I commented out line s1538-1540 like
> the following
> async1 = vm1.invokeAsync(createChildPR);
> async0 = vm0.invokeAsync(createChildPR);
> AsyncInvocation async2 = vm2.invokeAsync(createChildPR);
> //async0.getResult(MAX_WAIT); -- line 1538
> //async1.getResult(MAX_WAIT); -- line 1539
> //async2.getResult(MAX_WAIT); -- line 1540
> This will reproduce the error similar to the one reported in GEODE506, but it
> failed on checking the data on parent region instead of the child region. Log
> files attached.
> dunit.RMIException: While invoking
> com.gemstone.gemfire.internal.cache.partitioned.PersistentPartitionedRegionTestBase$5.run
> in VM 0 running on Host localhost with 4 VMs
> at dunit.VM.invoke(VM.java:368)
> at dunit.VM.invoke(VM.java:312)
> at dunit.VM.invoke(VM.java:266)
> at
> com.gemstone.gemfire.internal.cache.partitioned.PersistentPartitionedRegionTestBase.checkData(PersistentPartitionedRegionTestBase.java:182)
> at
> com.gemstone.gemfire.internal.cache.partitioned.PersistentPartitionedRegionTestBase.checkData(PersistentPartitionedRegionTestBase.java:165)
> at
> com.gemstone.gemfire.internal.cache.partitioned.PersistentColocatedPartitionedRegionDUnitTest.rebalanceWithOfflineChildRegion(PersistentColocatedPartitionedRegionDUnitTest.java:1543)
> at
> com.gemstone.gemfire.internal.cache.partitioned.PersistentColocatedPartitionedRegionDUnitTest.testRebalanceWithOfflineChildRegion(PersistentColocatedPartitionedRegionDUnitTest.java:1223)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at junit.framework.TestCase.runTest(TestCase.java:176)
> at junit.framework.TestCase.runBare(TestCase.java:141)
> at junit.framework.TestResult$1.protect(TestResult.java:122)
> at junit.framework.TestResult.runProtected(TestResult.java:142)
> at junit.framework.TestResult.run(TestResult.java:125)
> at junit.framework.TestCase.run(TestCase.java:129)
> at junit.framework.TestSuite.runTest(TestSuite.java:252)
> at junit.framework.TestSuite.run(TestSuite.java:247)
> at
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:86)
> at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
> at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
> at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
> Caused by: junit.framework.AssertionFailedError: For key 1 expected:<a> but
> was:<null>
> at junit.framework.Assert.fail(Assert.java:57)
> at junit.framework.Assert.failNotEquals(Assert.java:329)
> at junit.framework.Assert.assertEquals(Assert.java:78)
> at junit.framework.TestCase.assertEquals(TestCase.java:244)
> at
> com.gemstone.gemfire.internal.cache.partitioned.PersistentPartitionedRegionTestBase$5.run(PersistentPartitionedRegionTestBase.java:177)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at hydra.MethExecutor.executeObject(MethExecutor.java:267)
> at
> dunit.standalone.RemoteDUnitVM.executeMethodOnObject(RemoteDUnitVM.java:77)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
> at sun.rmi.transport.Transport$1.run(Transport.java:200)
> at sun.rmi.transport.Transport$1.run(Transport.java:197)
> at java.security.AccessController.doPrivileged(Native Method)
> at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
> at
> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)