Jubin Soni created FLINK-39875:
----------------------------------
Summary: Restore thread interrupt status in
ResultStore.processRecord() after catching InterruptedException
Key: FLINK-39875
URL: https://issues.apache.org/jira/browse/FLINK-39875
Project: Flink
Issue Type: Bug
Components: Table SQL / Gateway
Affects Versions: 2.4.0
Reporter: Jubin Soni
*Summary*
The {{processRecord()}} method in {{ResultStore}} catches
{{InterruptedException}} without restoring the thread's interrupt status. This
violates Java concurrency best practices and may prevent the result retrieval
thread from responding correctly to shutdown or cancellation requests.
*Description*
In {{{}ResultStore.processRecord(){}}}, the thread waits when the result buffer
reaches its maximum size:
{{try \{
resultLock.wait();
} catch (InterruptedException e) \{
// ignore
}}}
When {{wait()}} throws {{{}InterruptedException{}}}, the thread's interrupt
status is cleared. Since the exception is currently ignored, the interrupt
signal is effectively lost.
*Impact*
* The {{ResultRetrievalThread}} may not respond promptly to interruption
requests.
* The {{close()}} method interrupts the retrieval thread during shutdown, but
the interrupt can be swallowed while waiting on {{{}resultLock{}}}.
* Higher-level cancellation and shutdown mechanisms may not behave as expected.
* Ignoring interrupts can lead to delayed shutdowns and make thread lifecycle
management less reliable.
*Proposed Fix*
Restore the interrupt status when handling {{{}InterruptedException{}}}:
{{try \{
resultLock.wait();
} catch (InterruptedException e) \{
Thread.currentThread().interrupt();
return;
}}}
Alternatively, propagate the interruption to the caller if the surrounding
design allows it.
Acceptance Criteria
* Interrupt status is preserved when {{InterruptedException}} is caught in
{{{}processRecord(){}}}.
* {{ResultRetrievalThread}} responds correctly to shutdown and cancellation
requests.
* Thread interruption behavior follows Java concurrency best practices.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)