[
https://issues.apache.org/jira/browse/KAFKA-17929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17897759#comment-17897759
]
Ao Li commented on KAFKA-17929:
-------------------------------
Yes, this issue exists across all Java versions. Apologies for referencing an
outdated document
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Object.html#wait()
OpenJDK has recommended the following solution.
{code:java}
API Note:
The recommended approach to waiting is to check the condition being awaited in
a while loop around the call to wait, as shown in the example below. Among
other things, this approach avoids problems that can be caused by spurious
wakeups.
synchronized (obj) {
while (<condition does not hold> and <timeout not exceeded>) {
long timeoutMillis = ... ; // recompute timeout values
int nanos = ... ;
obj.wait(timeoutMillis, nanos);
}
... // Perform action appropriate to condition or timeout
}
{code}
> `awaitProcessableTasks` is not safe in the presence of spurious wakeups.
> ------------------------------------------------------------------------
>
> Key: KAFKA-17929
> URL: https://issues.apache.org/jira/browse/KAFKA-17929
> Project: Kafka
> Issue Type: Bug
> Components: streams
> Reporter: Ao Li
> Priority: Major
>
> According to JDK, `await` can be unblocked due to spurious wakeups
> https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html
> Currently `DefaultTaskManager::awaitProcessableTasks` does not handle this
> scenario. Branch https://github.com/aoli-al/kafka/tree/KAFKA-82 shows a
> failing test because of this
> Command: ./gradlew :streams:test --tests
> DefaultTaskManagerTest.shouldBlockOnAwait
--
This message was sent by Atlassian Jira
(v8.20.10#820010)