[ 
https://issues.apache.org/jira/browse/HDDS-17257?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HDDS-17257:
----------------------------------
    Labels: pull-request-available  (was: )

> Intermittent failure in TestBlockDeletingService#testBlockDeletion
> ------------------------------------------------------------------
>
>                 Key: HDDS-17257
>                 URL: https://issues.apache.org/jira/browse/HDDS-17257
>             Project: Apache Ozone
>          Issue Type: Sub-task
>          Components: test
>            Reporter: Huang Kuan Hao
>            Assignee: Huang Kuan Hao
>            Priority: Major
>              Labels: pull-request-available
>
> {code}
> [ERROR] Tests run: 73, Failures: 1, Errors: 0, Skipped: 4, Time elapsed: 
> 27.20 s <<< FAILURE! -- in 
> org.apache.hadoop.ozone.container.common.TestBlockDeletingService
> [ERROR] 
> org.apache.hadoop.ozone.container.common.TestBlockDeletingService.testBlockDeletion(ContainerTestVersionInfo)[4]
>  -- Time elapsed: 0.362 s <<< FAILURE!
> org.opentest4j.AssertionFailedError: Failed to read container checksum tree 
> file: 
> /tmp/junit-11171629283323802431/hdds/eca15dd6-87ff-4680-9d35-46d58ca44679/current/containerDir1/117454920117519356/metadata/117454920117519356.tree
>       at org.junit.jupiter.api.AssertionUtils.fail(AssertionUtils.java:38)
>       at org.junit.jupiter.api.Assertions.fail(Assertions.java:138)
>       at 
> org.apache.hadoop.ozone.container.common.TestBlockDeletingService.assertDeletionsInChecksumFile(TestBlockDeletingService.java:1311)
>       at 
> org.apache.hadoop.ozone.container.common.TestBlockDeletingService.lambda$testBlockDeletion$0(TestBlockDeletingService.java:628)
>       at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
>       at 
> org.apache.hadoop.ozone.container.common.TestBlockDeletingService.testBlockDeletion(TestBlockDeletingService.java:628)
> {code}
> h3. Root cause
> {{deleteAndWait(service, n)}} waits until 
> {{BlockDeletingServiceTestImpl#getTimesOfProcessed()}} reaches {{n}}. The 
> counter is incremented when {{BackgroundService.PeriodicalTask#run()}} 
> returns, but {{run()}} only submits each {{BlockDeletingTask}} with 
> {{CompletableFuture.runAsync}} and does not wait for it, so the task may 
> still be running when {{deleteAndWait}} returns.
> {{assertDeletionsInChecksumFile}} reads the container checksum file right 
> after {{deleteAndWait}}, without waiting. If 
> {{ContainerChecksumTreeManager#addDeletedBlocks}} has not written the file 
> yet, the read fails as above. The other checks in {{testBlockDeletion}} 
> already wait for the state they read, e.g. {{waitFor(() -> getBytesUsed() == 
> containerSpace / 3)}}. {{testChecksumFileUpdatedWhenDeleteRetried}} calls the 
> same assertion right after {{deleteAndWait}}.
> A 500 ms sleep at the start of 
> {{ContainerChecksumTreeManager#addDeletedBlocks}} reproduces it: 
> {{testBlockDeletion}} and {{testChecksumFileUpdatedWhenDeleteRetried}} fail 
> in all 8 parameterizations with the same error, and pass with the fix.
> h3. Fix
> Make {{assertDeletionsInChecksumFile}} wait until the checksum file records 
> the expected number of deleted blocks.
> {{deleteAndWait}} could instead wait for the submitted tasks to finish (via 
> {{BackgroundService#getFuture}}). That would also cover the success count 
> check in {{testBlockDeletion}}, which is incremented a few statements after 
> {{bytesUsed}}, but it changes the timing of every {{deleteAndWait}} caller, 
> so it is left out here.
> Seen in:
> - https://github.com/apache/ozone/actions/runs/39010100374/job/117333028016



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to