Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Race condition для callback'ов #482

Open
AlexDevOp opened this issue Jul 16, 2024 · 0 comments
Open

Race condition для callback'ов #482

AlexDevOp opened this issue Jul 16, 2024 · 0 comments

Comments

@AlexDevOp
Copy link

Возможна ситуация, когда после отправки 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
Kiruha01 added a commit that referenced this issue Jul 29, 2024
Kiruha01 added a commit that referenced this issue Jul 29, 2024
Kiruha01 added a commit that referenced this issue Jul 29, 2024
Kiruha01 added a commit that referenced this issue Jul 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant