iikoFront API SDK

Автоматический перезапуск плагинов при падении

[ ]

Начиная с версии 6.2 добавлена возможность автоматического перезапуска плагинов при аварийном завершении их работы. Если раньше после падения плагина приложение iikoFront продолжало работу без него и для восстановления утраченных функций необходимо было перезапускать целиком приложение iikoFront вместе со всеми остальными плагинами, то теперь упавший плагин может быть запущен повторно на лету, без остановки приложения iikoFront.

Поскольку перезапуск при падении — это функция механизма хостинга плагинов, нововведение доступно для всех поддерживаемых версий API. Для уже выпущенных версий V4 и V5 эта функция работает с параметрами по умолчанию, а начиная с V6 плагины могут задавать свои параметры через специальный атрибут RecoveryOptions. В данный момент можно указать лишь действие, которое следует предпринять при падении (OnCrashAction):

Учитывая, что изменения затронут все плагины, включая работающие под V4 и V5, а также V6-плагины, выпущенные до появления атрибута RecoveryOptions, поведение по умолчанию обязано быть осторожным и консервативным. Текущее поведение по умолчанию — перезапускать плагин, если он упал, проработав не менее 10 секунд. Ограничение минимальной продолжительности работы необходимо для того, чтобы не перезапускать плагины, которые при запуске выполняют ряд проверок и при отсутствии условий для работы выключаются через преднамеренное падение. Для корректного завершения работы плагина следовало бы вызывать метод PluginContext.Shutdown(), но фактически многие плагины реализованы ошибочно, и это приходится учитывать. Могут обнаружиться и другие побочные эффекты нововведения, поэтому поведение по умолчанию может измениться в будущем.

Плагин считается упавшим, если его хост-процесс завершился с ненулевым кодом возврата. Между возникновением необработанного исключения, ставшего поводом к падению, и непосредственно завершением процесса может пройти некоторое время. Например, используемый по умолчанию отладчик WerFault (бывший Dr. Watson) на время сбора диагностической информации может приостановить потоки и удерживать хост-процесс, не давая ему завершиться.

Несмотря на то, что автоперезапуск плагина при падении может быть удобен для пользователя, это не снимает с разработчика плагина отвественности за исправление ошибок. Стоит стремиться к тому, чтобы плагин не падал и автоперезапуск не требовался. На случай безнадёжно сломанных плагинов предусмотрено ограничение — не более четырёх падений в час. Если плагин упадёт в пятый раз в течение часа, он будет признан безнадёжным и не будет больше перезапускаться в этом сеансе работы приложения iikoFront.