Uma Maheswara Rao G created HDDS-6341:
-----------------------------------------

             Summary: EC: Fix the race condition in 
TestECBlockReconstructedStripeInputStream
                 Key: HDDS-6341
                 URL: https://issues.apache.org/jira/browse/HDDS-6341
             Project: Apache Ozone
          Issue Type: Sub-task
            Reporter: Uma Maheswara Rao G
            Assignee: Uma Maheswara Rao G


I see this failure in
{code:java}
java.lang.NullPointerException
2022-02-16T17:54:53.5848386Z  at 
org.apache.hadoop.ozone.client.rpc.read.TestECBlockReconstructedStripeInputStream.testReadFullStripesWithPartial(TestECBlockReconstructedStripeInputStream.java:177)
2022-02-16T17:54:53.5849272Z  at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2022-02-16T17:54:53.5849806Z  at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2022-02-16T17:54:53.5850416Z  at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2022-02-16T17:54:53.5850938Z  at 
java.lang.reflect.Method.invoke(Method.java:498)
2022-02-16T17:54:53.5851434Z  at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2022-02-16T17:54:53.5852010Z  at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2022-02-16T17:54:53.5852613Z  at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2022-02-16T17:54:53.5853224Z  at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2022-02-16T17:54:53.5853816Z  at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2022-02-16T17:54:53.5854322Z  at 
org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2022-02-16T17:54:53.5854827Z  at 
org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2022-02-16T17:54:53.5855335Z  at 
org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2022-02-16T17:54:53.5855868Z  at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2022-02-16T17:54:53.5856439Z  at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2022-02-16T17:54:53.5856947Z  at 
org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2022-02-16T17:54:53.5857395Z  at 
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2022-02-16T17:54:53.5857876Z  at 
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2022-02-16T17:54:53.5858345Z  at 
org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2022-02-16T17:54:53.5858808Z  at 
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2022-02-16T17:54:53.5859261Z  at 
org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2022-02-16T17:54:53.5859710Z  at 
org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2022-02-16T17:54:53.5860121Z  at 
org.junit.runner.JUnitCore.run(JUnitCore.java:137)
2022-02-16T17:54:53.5860532Z  at 
org.junit.runner.JUnitCore.run(JUnitCore.java:115)
2022-02-16T17:54:53.5861053Z  at 
org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:43)
2022-02-16T17:54:53.5861773Z  at 
java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
2022-02-16T17:54:53.5862251Z  at 
java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
2022-02-16T17:54:53.5862721Z  at 
java.util.Iterator.forEachRemaining(Iterator.java:116)
2022-02-16T17:54:53.5863217Z  at 
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
2022-02-16T17:54:53.5863752Z  at 
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
2022-02-16T17:54:53.5864295Z  at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
2022-02-16T17:54:53.5864822Z  at 
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
2022-02-16T17:54:53.5865338Z  at 
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
2022-02-16T17:54:53.5865940Z  at 
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
2022-02-16T17:54:53.5866462Z  at 
java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485)
2022-02-16T17:54:53.5867034Z  at 
org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:82)
2022-02-16T17:54:53.5867641Z  at 
org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:73)
2022-02-16T17:54:53.5868430Z  at 
org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
2022-02-16T17:54:53.5869848Z  at 
org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
2022-02-16T17:54:53.5870531Z  at 
org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
2022-02-16T17:54:53.5871303Z  at 
org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
2022-02-16T17:54:53.5872059Z  at 
org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
2022-02-16T17:54:53.5872667Z  at 
org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
2022-02-16T17:54:53.5873183Z  at 
org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
2022-02-16T17:54:53.5873816Z  at 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:142)
2022-02-16T17:54:53.5874519Z  at 
org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:113)
2022-02-16T17:54:53.5875201Z  at 
org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2022-02-16T17:54:53.5875820Z  at 
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2022-02-16T17:54:53.5876356Z  at 
org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2022-02-16T17:54:53.5876848Z  at 
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418){code}
 

First time I saw this failure in CI, but I tried this test to run in tight loop 
and very randomly couple of times failed. It quite hard to track this, but 
after adding couple of debug traces, multiple thread trying to add streams to 
arrayList in parallel. If we add elements in ArrayList from multiple threads, 
there is a possibility that elements can be nulls in arrayList. So, looking at 
the code where we are adding streams into the arrayList, only possibility is 
the race condition and turning elements into null.
{code:java}
TestBlockInputStream stream = new TestBlockInputStream(
blockInfo.getBlockID(), blockInfo.getLength(),
blockStreamData.get(repInd - 1), repInd);
if (failIndexes.contains(repInd)) {
stream.setShouldError(true);
}

blockStreams.add(stream);
return stream;
{code}
 



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to