-
Notifications
You must be signed in to change notification settings - Fork 15
Open
1 / 11 of 1 issue completedDescription
Возможна ситуация, когда после отправки direct notification на backend, callback на действие уже пришел на fastapi, но управление ещё не вернулось в корутину ожидания callback'a. Из-за этого в memory_repo ещё не хранится соответствующий sync_id. Это приводит к тому, что callback ещё не ожидается, но ответ на него уже пришёл.
Такая ситуация может наступить, если event loop перегружен или в него затесалась CPU-bounded задача.
async def heavy_task():
time.sleep(0.5) # Симуляция работы через заморозку потока
await asyncio.sleep(0.5) # Передача управления в event loop с последующим возвращением
await asyncio.sleep(0.2) # И ещё разок
async def test_race():
coro_list = [heavy_task() in range(20)]
coro_list.append(bot.send_message(bot_id=some_bot_id, chat_id=some_chat_id, body='some text'))
await asyncio.gather(*coro_list)
Индикатором проблемы будет следующая последовательность ошибок в логе:
pybotx.bot.exceptions.BotXMethodCallbackNotFoundError: Callback ccbf5a16-fb25-5589-85a5-3cce9a58356c doesn't exist or already waited or timed out
pybotx.client.exceptions.callbacks.CallbackNotReceivedError: Callback for sync_id ccbf5a16-fb25-5589-85a5-3cce9a58356c hasn't been received
Sub-issues
Metadata
Metadata
Assignees
Labels
No labels