Perform exactly one real AT refresh attempt.
(self, token_id: int)
| 562 | |
| 563 | |
| 564 | async def _refresh_at_inner(self, token_id: int) -> bool: |
| 565 | """Perform exactly one real AT refresh attempt.""" |
| 566 | refresh_lock = await self._get_token_lock( |
| 567 | self._refresh_locks, |
| 568 | self._refresh_lock_guard, |
| 569 | token_id, |
| 570 | ) |
| 571 | async with refresh_lock: |
| 572 | token = await self.db.get_token(token_id) |
| 573 | if not token: |
| 574 | return False |
| 575 | |
| 576 | result = await self._do_refresh_at(token_id, token.st, token) |
| 577 | if result: |
| 578 | return True |
| 579 | |
| 580 | debug_logger.log_info(f"[AT_REFRESH] Token {token_id}: first AT refresh failed, trying ST refresh...") |
| 581 | new_st = await self._try_refresh_st(token_id, token) |
| 582 | if new_st: |
| 583 | debug_logger.log_info(f"[AT_REFRESH] Token {token_id}: ST refreshed, retrying AT refresh...") |
| 584 | latest_token = await self.db.get_token(token_id) or token |
| 585 | result = await self._do_refresh_at(token_id, new_st, latest_token) |
| 586 | if result: |
| 587 | return True |
| 588 | |
| 589 | debug_logger.log_error(f"[AT_REFRESH] Token {token_id}: all refresh attempts failed, disabling token") |
| 590 | await self.disable_token(token_id) |
| 591 | self._clear_at_validation_cache(token_id) |
| 592 | return False |
| 593 | |
| 594 | async def _refresh_at(self, token_id: int) -> bool: |
| 595 | """Coalesce concurrent AT refresh calls for the same token.""" |
no test coverage detected