You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(sdks): provider reconnect across csharp/cpp/go/python/java demos
All six language demos stayed offline after the agent restarted
(incident 2026-08-16 05:33 / 07:38 UTC); only the JS demo recovered.
Root causes per SDK (all on the SDK->Agent local link):
- csharp: on remote close the read loop failed pending requests with
SetCanceled, which the heartbeat loop misread as graceful shutdown and
exited, so ReconnectAsync never ran. Fail pendings with an exception
instead, only break on real cancellation, and trigger reconnect when
the transport is already disconnected.
- cpp: heartbeat failure only logged and broke out of the loop; the
reconnect_thread_ state existed but was never started from this path.
Run a blocking reconnect loop on the heartbeat thread (self-join-safe
via detached thread + thread-id guard).
- go: TCPClient.Call has no deadline, so a heartbeat on a half-dead
connection blocked forever in the pending channel. Add a 30s timeout
on heartbeat calls so the failure counter can trigger the existing
reconnect path.
- python: _recover_connection held _state_lock across blocking dial/
register calls, and _send_heartbeat/_send_drain_complete performed
network I/O under the same lock; a blocked write stalled every state
user (observed as a permanent futex wait on the heartbeat thread,
tid 7, via /proc wchan). Snapshot state under the lock, do network
I/O outside it.
- java: the demo image ships only slf4j-api, so the NOP logger silently
swallowed every log line and the container looked dead. Add
slf4j-simple to the demo runtime classpath.
0 commit comments