Commit f131971
committed
fix: bound reconnect and fail fast when the session pool is exhausted
Two issues combined to make every tool call hang indefinitely once more
MCP clients were running than the session pool had slots for.
`_acquire_session` treated an exhausted pool as a warning and returned
`pool[0]` — a session another live client already holds. Telegram reacts
to a duplicated auth key by permanently invalidating it, so this both
fails for the new client and burns the slot for the client that owned it.
Refusing to start is recoverable; a burned session is not.
`_force_reconnect` then called `cl.connect()` with no timeout. The 5s
guard in `ensure_connected` only wraps the liveness ping, not the
reconnect, so a client with an invalidated auth key retried forever and
the tool call never returned. Reconnects are now bounded by
`_RECONNECT_TIMEOUT`, and `AuthKeyDuplicatedError` is surfaced with an
actionable message instead of being retried — that error is permanent,
so a retry loop can never recover from it.1 parent fbb374a commit f131971
4 files changed
Lines changed: 71 additions & 11 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
307 | 307 | | |
308 | 308 | | |
309 | 309 | | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
310 | 315 | | |
311 | 316 | | |
312 | 317 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
393 | 394 | | |
394 | 395 | | |
395 | 396 | | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
400 | | - | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
401 | 406 | | |
402 | | - | |
403 | 407 | | |
404 | 408 | | |
405 | 409 | | |
| |||
521 | 525 | | |
522 | 526 | | |
523 | 527 | | |
| 528 | + | |
524 | 529 | | |
525 | 530 | | |
526 | 531 | | |
| |||
531 | 536 | | |
532 | 537 | | |
533 | 538 | | |
534 | | - | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
| 543 | + | |
| 544 | + | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
| 548 | + | |
| 549 | + | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
535 | 556 | | |
536 | 557 | | |
537 | | - | |
| 558 | + | |
538 | 559 | | |
539 | 560 | | |
540 | 561 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | 3 | | |
3 | 4 | | |
| |||
430 | 431 | | |
431 | 432 | | |
432 | 433 | | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
433 | 465 | | |
434 | 466 | | |
435 | 467 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | | - | |
| 55 | + | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
59 | | - | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
60 | 62 | | |
61 | 63 | | |
62 | 64 | | |
| |||
0 commit comments