Почему канистра ICP задерживается в состоянии stopping

Между работающей и остановленной канистрой есть промежуточное состояние. Его длительность зависит от уже отправленных вызовов.

Проследите за незавершённым запросом

Допустим, в момент вызова stop_canister расчётная канистра ждёт ответа реестра. Запишите идентификатор операции и запросите canister_status. В состоянии stopping ещё могут исполняться обработчики ранее отправленных вызовов. Дождитесь, пока обработчик запишет результат, прежде чем сверять остатки.

running → stop_canister → stopping → outstanding calls finish → stopped

Определите границу обслуживания

Фиксируйте состояние приложения после перехода в stopped. Таймаут в системе развёртывания говорит лишь о длительности ожидания и мало что сообщает об исходе платежа. При отмене обслуживания вызовите start_canister и сверьте первоначальную транзакцию до приёма повторного платежа.

Источники