mirror of
https://github.com/teloxide/teloxide.git
synced 2025-01-10 20:12:25 +01:00
parent
ed48de2f75
commit
d259f8aa23
1 changed files with 47 additions and 0 deletions
|
@ -90,6 +90,53 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
// This diagram explains how `ThrottlingRequest` works/what `send` does
|
||||
//
|
||||
// │
|
||||
// ThrottlingRequest │ worker()
|
||||
// │
|
||||
// ┌───────────────┐ │ ┌────────────────────────┐
|
||||
// ┌──────────────────►│request is sent│ │ │see worker documentation│
|
||||
// │ └───────┬───────┘ │ │and comments for more │
|
||||
// │ │ │ │information on how it │
|
||||
// │ ▼ │ │actually works │
|
||||
// │ ┌─────────┐ │ └────────────────────────┘
|
||||
// │ ┌────────────────┐ │send lock│ │
|
||||
// │ │has worker died?│◄──┤to worker├─────►:───────────┐
|
||||
// │ └─┬─────────────┬┘ └─────────┘ │ ▼
|
||||
// │ │ │ │ ┌──────────────────┐
|
||||
// │ Y └─N───────┐ │ │ *magic* │
|
||||
// │ │ │ │ └────────┬─────────┘
|
||||
// │ ▼ ▼ │ │
|
||||
// │ ┌───────────┐ ┌────────────────┐ │ ▼
|
||||
// │ │send inner │ │wait for worker │ │ ┌─────────────────┐
|
||||
// │ │request │ │to allow sending│◄──:◄─┤ `lock.unlock()` │
|
||||
// │ └───┬───────┘ │this request │ │ └─────────────────┘
|
||||
// │ │ └────────┬───────┘ │
|
||||
// │ │ │ │
|
||||
// │ ▼ ▼ │
|
||||
// │ ┌──────┐ ┌────────────────────┐ │
|
||||
// │ │return│ │send inner request │ │
|
||||
// │ │result│ │and check its result│ │
|
||||
// │ └──────┘ └─┬─────────┬────────┘ │
|
||||
// │ ▲ ▲ │ │ │
|
||||
// │ │ │ │ Err(RetryAfter(n)) │
|
||||
// │ │ │ else │ │
|
||||
// │ │ │ │ ▼ │
|
||||
// │ │ └─────┘ ┌───────────────┐ │
|
||||
// │ │ │are retries on?│ │
|
||||
// │ │ └┬─────────────┬┘ │
|
||||
// │ │ │ │ │
|
||||
// │ └────────────N─┘ Y │
|
||||
// │ │ │ ┌──────────────────┐
|
||||
// │ ▼ │ │ *magic* │
|
||||
// │ ┌──────────────────┐ │ └──────────────────┘
|
||||
// ┌┴────────────┐ │notify worker that│ │ ▲
|
||||
// │retry request│◄──┤RetryAfter error ├──►:───────────┘
|
||||
// └─────────────┘ │has happened │ │
|
||||
// └──────────────────┘ │
|
||||
// │
|
||||
|
||||
/// Actual implementation of the `ThrottlingSend` future
|
||||
async fn send<R>(
|
||||
mut request: ShareableRequest<R>,
|
||||
|
|
Loading…
Reference in a new issue