Как восстановить расписание таймера после обновления канистры ICP

Периодическому обработчику нужно стойкое расписание, потому что при обновлении канистры зарегистрированные таймеры сбрасываются.

Сохраняйте позицию обработчика

Пусть обработчик закрывает нумерованные пакеты каждые пять минут. Храните номер завершённого пакета и время следующего запуска в состоянии, переживающем обновление. Заново зарегистрируйте таймер при инициализации после обновления и явно определите судьбу просроченного пакета.

stable state: next_due = 12:05, last_processed = 17
upgrade ends at 12:08
resume from job 18; schedule next wake-up

Обработайте запоздалое срабатывание

В 12:08 пакет 18 уже просрочен. До асинхронной выплаты отметьте в стойком состоянии начало обработки и разберите незавершённую предыдущую попытку. Момент срабатывания таймера может отклоняться от расписания. Для однократного внешнего расчёта нужен прикладной идентификатор операции.

Источники