The GitHub Actions job "Binary Compatibility" on 
pekko.git/fix/tcp-outgoing-connection-retry-swallowed-exception-3135 has 
succeeded.
Run started by GitHub user He-Pin (triggered by He-Pin).

Head commit for run:
fc5dc23043e59c09efb74e1b38c81e70ee6bb920 / 虎鸣 <[email protected]>
fix: use Timers for finishConnect retry instead of raw scheduler callback

Motivation:
TcpOutgoingConnection retries a failed finishConnect by scheduling a
callback via context.system.scheduler.scheduleOnce that calls
channelRegistry.register outside the actor's message loop. If that
callback throws, the exception is caught by the scheduler/dispatcher
and never re-enters the actor's supervision, so Tcp.CommandFailed is
never delivered and the commander can hang in the connecting state
indefinitely.

Modification:
Mix in the Timers trait and replace scheduler.scheduleOnce with
timers.startSingleTimer, which sends a private RetryFinishConnect
self-message processed inside the actor's message loop. The retry
handler is wrapped in reportConnectFailure so any exception surfaces
as CommandFailed to the commander. Timers are automatically cancelled
when the actor stops, removing the latent window where a stale
callback could register against a channel being torn down.

Result:
Exceptions thrown during the finishConnect retry path now correctly
surface as Tcp.CommandFailed to the commander, preventing indefinite
hangs in the connecting state.

Tests:
- sbt 'actor-tests / Test / testOnly org.apache.pekko.io.TcpConnectionSpec' → 
35/35 passed

References:
Fixes #3135

Report URL: https://github.com/apache/pekko/actions/runs/28033205954

With regards,
GitHub Actions via GitBox


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to