reconnectJobStream attempts to re-open the JobStream with exponential backoff.
(lastErr error)
| 331 | |
| 332 | // reconnectJobStream attempts to re-open the JobStream with exponential backoff. |
| 333 | func (b *Bridge) reconnectJobStream(lastErr error) { |
| 334 | restore := shouldRestoreBridgeState(lastErr) |
| 335 | for attempt := 1; ; attempt++ { |
| 336 | select { |
| 337 | case <-b.ctx.Done(): |
| 338 | return |
| 339 | case <-time.After(reconnectDelay(attempt)): |
| 340 | } |
| 341 | var err error |
| 342 | if restore { |
| 343 | err = b.restoreBridgeState(false) |
| 344 | } else { |
| 345 | err = b.openJobStream() |
| 346 | if shouldRestoreBridgeState(err) { |
| 347 | restore = true |
| 348 | } |
| 349 | } |
| 350 | if err != nil { |
| 351 | log.Errorf("[bridge] JobStream reconnect attempt %d failed: %v", attempt, err) |
| 352 | continue |
| 353 | } |
| 354 | log.Infof("[bridge] JobStream reconnected after %d attempts", attempt) |
| 355 | return |
| 356 | } |
| 357 | } |
| 358 | |
| 359 | func (b *Bridge) restoreBridgeState(restoreSpite bool) error { |
| 360 | b.reconnectMu.Lock() |
no test coverage detected