Description
После обновления распределённого экземпляра могут быть потеряны системные события, которые были запланированы до обновления или созданы в период проведения работ по обновлению.
Workaround
Необходимая роль: admin
По умолчанию, скрипты выполняют перезапуск событий, которые зависли более чем на две минуты. Параметр задается в строке скрипта const MINUTES = 2;
Создайте первый скрипт:
- Перейдите по ссылке /record/sys_script
- Заполните поле скрипт значением:
const MINUTES = 2;
const freezedEvent = new SimpleRecord('sys_event');
freezedEvent.addQuery('state', 'ready');
freezedEvent.addEncodedQuery(`%28%28process_started_atISEMPTY%5Esys_created_at%3Cjavascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-${MINUTES * 60}%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at%3Cjavascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-${MINUTES * 60}%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready`);
freezedEvent.query();
ss.info('Freezed Events: ' + freezedEvent.getRowCount());
freezedEvent.setMultipleValue('state', 'new_ready');
// freezedEvent.updateMultiple();
- Сохраните форму.
- Запустите скрипт по кнопке Run.
- Обратите внимание на количество зависших записей под полем скрипт. Значение должно совпадать с количеством записей в списке /list/sys_event?condition=%28%28process_started_atISEMPTY%5Esys_created_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready
- Раскоментируйте строку скрипта:
// freezedEvent.updateMultiple(); - Сохраните форму.
- Запустите скрипт по кнопке Run.
- Дождитесь завершения выполнения скрипта.
Создайте второй скрипт:
- Перейдите по ссылке /record/sys_script
- Заполните поле скрипт значением:
const freezedEvent = new SimpleRecord('sys_event');
freezedEvent.addQuery('state', 'new_ready');
freezedEvent.query();
ss.info('Freezed Events: ' + freezedEvent.getRowCount());
freezedEvent.setMultipleValue('state', 'ready');
freezedEvent.updateMultiple();
- Сохраните форму.
- Запустите скрипт по кнопке Run.
- Дождитесь завершения выполнения скрипта.
- Перейдите по ссылке списке /list/sys_event?condition=%28%28process_started_atISEMPTY%5Esys_created_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready
Если по ссылке /list/sys_event?condition=%28%28process_started_atISEMPTY%5Esys_created_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%5EOR%28process_started_atISNOTEMPTY%5Eprocess_started_at<javascript%3A+%7Bconst+now+%3D+new+SimpleDateTime%3DOP%3DCP%3B+now.addSeconds%3DOP-120%3DCP%3B+return+now.getValue%3DOP%3DCP+%7D%29%29%5Estate%3Dready останутся записи, повторите запуск первого скрипта и запуск второго скрипта пока в списке не останется записей.