You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Jon Cavallie Mester (Jira)" <ji...@apache.org> on 2025/09/26 14:27:00 UTC

[jira] [Commented] (FLINK-31244) OffHeapUnsafeMemorySegmentTest.testCallCleanerOnceOnConcurrentFree prints IllegalStateException

    [ https://issues.apache.org/jira/browse/FLINK-31244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18023127#comment-18023127 ] 

Jon Cavallie Mester commented on FLINK-31244:
---------------------------------------------

Hi, I’d like to take this issue.

I can reproduce the problem locally by enabling
`-Dflink.tests.check-segment-multiple-free=true`, which matches how CI runs. In that mode, `testCallCleanerOnceOnConcurrentFree` prints `IllegalStateException` stack traces from the losing `free()` call, even though the test itself still passes.

Proposed fix (test-only):
Wrap the two `segment.free()` calls in try/catch, swallow the expected `IllegalStateException`, and record any other unexpected `Throwable`. The existing assertion that the cleaner runs exactly once remains unchanged. This removes the noisy stack traces without changing production code.

If there are no objections, please assign this ticket to me and I’ll open a PR.

> OffHeapUnsafeMemorySegmentTest.testCallCleanerOnceOnConcurrentFree prints IllegalStateException
> -----------------------------------------------------------------------------------------------
>
>                 Key: FLINK-31244
>                 URL: https://issues.apache.org/jira/browse/FLINK-31244
>             Project: Flink
>          Issue Type: Bug
>          Components: Runtime / Network, Tests
>    Affects Versions: 1.17.0, 1.15.3, 1.16.1
>            Reporter: Matthias Pohl
>            Priority: Minor
>              Labels: auto-deprioritized-major, starter, test-stability
>
> We're observing strange IllegalStateException stacktrace output in {{OffHeapUnsafeMemorySegmentTest.testCallCleanerOnceOnConcurrentFree}} in CI like:
> [https://dev.azure.com/apache-flink/apache-flink/_build/results?buildId=46283&view=logs&j=4d4a0d10-fca2-5507-8eed-c07f0bdf4887&t=7b25afdf-cc6c-566f-5459-359dc2585798&l=5584] 
> {code:java}
> Feb 18 03:58:47 [INFO] Running org.apache.flink.core.memory.OffHeapUnsafeMemorySegmentTest
> Exception in thread "Thread-13" java.lang.IllegalStateException: MemorySegment can be freed only once!
>     at org.apache.flink.core.memory.MemorySegment.free(MemorySegment.java:244)
>     at java.lang.Thread.run(Thread.java:748)
> Exception in thread "Thread-15" java.lang.IllegalStateException: MemorySegment can be freed only once!
>     at org.apache.flink.core.memory.MemorySegment.free(MemorySegment.java:244)
>     at java.lang.Thread.run(Thread.java:748)
> Exception in thread "Thread-17" java.lang.IllegalStateException: MemorySegment can be freed only once!
>     at org.apache.flink.core.memory.MemorySegment.free(MemorySegment.java:244)
>     at java.lang.Thread.run(Thread.java:748){code}
> This is caused by FLINK-21798. The corresponding system property is enabled as part of the CI run (see [tools/ci/test_controller.sh:108|https://github.com/apache/flink/blob/7e37d59f834bca805f5fbee99db87eb909d1814f/tools/ci/test_controller.sh#L108]) which makes the {{IllegalStateException}} to be thrown.
> AFAIU, the intention of this test was to make sure that the cleaner logic is only called once even if the free method is called multiple times. 



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