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