mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-10-27 05:30:39 +00:00
When Sandbox.connect() fails with a trusted 'sandbox not found' error, _reconnect_live_client() used to release the deployment-level slot but still re-raise. _evict_oldest_warm() then treated that confirmed-gone result like an unknown-state failure: it kept the eviction tombstone and never called _end_transition_locked(), so the local transitioning slot leaked on every retry against an already-reaped VM. Once the leaked slots reach the configured replicas, every acquire rejects or times out with SANDBOX_CAPACITY_EXCEEDED while active=warm=reserved=0. Return None from _reconnect_live_client() for trusted gone errors so all callers (eviction, warm reclaim, discovery, reconciliation) take their existing already-gone cleanup paths, keeping local bookkeeping consistent with the deployment-level release on the same signal. Unknown-state errors (network, auth) still retain the slot for a later retry. Also report the transitioning count in SandboxCapacityExceededError details and the wait-timeout message so hidden slot usage is visible without a restart. Fixes #6540 Co-authored-by: Willem Jiang <willem.jiang@gmail.com>