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

Siyao Meng reassigned HDDS-16165:
---------------------------------

    Assignee: Siyao Meng

> Intermittent failure in 
> TestOzoneClientRetriesOnExceptions#testMaxRetriesByOzoneClient
> --------------------------------------------------------------------------------------
>
>                 Key: HDDS-16165
>                 URL: https://issues.apache.org/jira/browse/HDDS-16165
>             Project: Apache Ozone
>          Issue Type: Sub-task
>          Components: Ozone Client, test
>            Reporter: Siyao Meng
>            Assignee: Siyao Meng
>            Priority: Major
>              Labels: pull-request-available
>
> {code}
> [ERROR] Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 54.04 
> s <<< FAILURE! -- in 
> org.apache.hadoop.ozone.client.rpc.TestOzoneClientRetriesOnExceptions
> [ERROR] 
> org.apache.hadoop.ozone.client.rpc.TestOzoneClientRetriesOnExceptions.testMaxRetriesByOzoneClient
>  -- Time elapsed: 16.51 s <<< ERROR!
> java.io.IOException: Failed to execute command cmdType: CreateContainer 
> containerID: 1 ... createContainer { state: OPEN }
>       at 
> org.apache.hadoop.hdds.scm.XceiverClientSpi.getIOExceptionForSendCommand(XceiverClientSpi.java:178)
>       at 
> org.apache.hadoop.hdds.scm.XceiverClientSpi.sendCommand(XceiverClientSpi.java:131)
>       at 
> org.apache.hadoop.ozone.client.rpc.TestOzoneClientRetriesOnExceptions.testMaxRetriesByOzoneClient(TestOzoneClientRetriesOnExceptions.java:206)
> {code}
> The datanode log for the same run shows the underlying cause:
> {code}
> Operation: CreateContainer , Message: Container creation failed because key 
> value container already exists , Result: CONTAINER_ALREADY_EXISTS
> {code}
> h3. Root cause
> {{testMaxRetriesByOzoneClient}} writes a key spanning {{MAX_RETRIES + 1}} 
> block entries, expects each entry to land on a distinct container, and issues 
> a CreateContainer for each so the write can be retried across N+1 different 
> blocks. It guards the distinct-container premise, but that guard was neutered:
> {code}
> // 
> hadoop-ozone/integration-test/.../client/rpc/TestOzoneClientRetriesOnExceptions.java:204
> assertThat(containerList.contains(containerID));   // AssertJ boolean assert 
> with no terminal, a no-op
> {code}
> {{assertThat(boolean)}} without a terminal (such as {{isFalse()}}) checks 
> nothing. When block allocation reuses a container the loop proceeds to 
> CreateContainer on an already created container, which fails with 
> {{CONTAINER_ALREADY_EXISTS}} and surfaces as the IOException above. The line 
> was changed from 
> {{Assumptions.assumeFalse(containerList.contains(containerID))}} to this 
> no-op form in HDDS-11020, which also introduced 
> RoundRobinPipelineChoosePolicy (making container reuse more likely). The test 
> is not tagged {{@Flaky}}, so it runs in the gating {{integration (client)}} 
> split.
> h3. Fix
> Restore the assumption so the test skips (aborts) the inconclusive case 
> instead of double-creating a container:
> {code}
> Assumptions.assumeFalse(containerList.contains(containerID));
> {code}
> - https://github.com/apache/ozone/actions/runs/31581614789/job/94114425679



--
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