Nicholas Telford created KAFKA-17487:
----------------------------------------
Summary: Race in GlobalStreamThread initialization
Key: KAFKA-17487
URL: https://issues.apache.org/jira/browse/KAFKA-17487
Project: Kafka
Issue Type: Bug
Components: streams
Affects Versions: 4.0.0
Reporter: Nicholas Telford
Assignee: Nicholas Telford
When initializing the {{{}GlobalStreamThread{}}}, we {{countDown}} the
{{initializationLatch}} _before_ setting the state to {{{}RUNNING{}}}.
This can cause other threads waiting on that latch, most notably through
{{{}GlobalStreamThread#start{}}}, to unblock before the thread state
transitions to {{{}RUNNING{}}}.
This mostly affects {{{}GlobalStreamThreadTest{}}}, in particular:
* {{{}shouldBeRunningAfterSuccessfulStart{}}}, which waits on
{{GlobalStreamThread#start}} and then immediately asserts that the state is
{{{}RUNNING{}}}, which due to this race, it sometimes isn't (yet).
* {{{}shouldStopRunningWhenClosedByUser{}}}, which waits on
{{GlobalStreamThread#start}} and then immediately calls
{{{}GlobalStreamThread#shutdown{}}}, which changes the state to
{{{}PENDING_SHUTDOWN{}}}. The {{GlobalStreamThread}} then attempts to
transition the state to {{{}RUNNING{}}}, which fails because it's not a valid
transition from {{{}PENDING_SHUTDOWN{}}}.
The fix is simple: move the {{setState(RUNNING)}} into {{{}#initialize{}}},
immediately before returning. This ensures that the state is set _before_
counting down the initialization latch.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)