Показать сообщение отдельно
Старый 08.05.2024, 22:12   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,283 / 3491 (123) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
Сегодня триггер ночью отработал на сборе перекрестных ссылок. Причем поймал проблему не после завершения сбора, а в середине процесса.
Похоже проблема носит вероятностный характер и вам просто везло.

Правда у нас сбор ссылок распараллелен в примерно 10 потоков (чтобы собирал за 3 часа, а не за 12-13). Возможно это тоже влияет на воспроизводимость бага.
Интересный случай, спасибо. Равно, как и многопоточка в части сбора перекрестных ссылок.
Но я тут склонен грешить на многопоточку. Дело в том, что этот глюк 100% появляется, когда в память кэшируется "то, что не надо". А потоки, когда работают параллельно... наверняка же работают в одном АОСе и имеют общий кэш.

А 12-13 часов сбора перекрестных ссылок - это последствия виртуализации сервера БД А если на нём еще и Windows Server 2016 (вместо Windows Server 2012 R2) стоит - то... это тоже еще влияет.

У нас ссылки собираются 8 часов в одном потоке (сервер БД невиртуализирован), но я нашел обходной путь в виде построения их на копии с последующим переносом XREF*-табличек средствами SQL на нужную БД.

Т.е. выполняются такие шаги:
1. Копируется приложение + БД DEV -> DEVCopy
2. Делается сборка полного CIL на DEVCopy.
3. Если сборка CIL прошла неуспешно - процесс завершается. Тут уже требуется вмешательство человека
4. Запускается (на AOS-сервере) клиент АХ с параметром xrefall (см класс SysStartupCmdXReference). Этот клиент ставит построение ссылок в пакет, а сам лишь мониторит завершение этого пакета.
5. По завершению работы этого клиента (а он завершится тогда, когда завершится пакетник) рестартуется АОС DEVCopy (для профилактики; для целей перекрестных ссылок этого делать не требуется)
6. Переливаются XREF* таблички из БД DEVCopy в БД DEV

По-хорошему, после этого нужно бы остановить АОС DEV и выполнить коррекцию счетчиков RecId в табличках XREF* (иначе компиляция проекта с включенной галкой Перекрестные ссылки может привести к ошибкам), но честно признаюсь - я этого не делаю, ибо не хочется рестартовать АОС, а пока заявок на эту проблему не поступало

Все описанные действия выполняются в скрипте Powershell и поставлены в шедулер (скрипт срабатывает по расписанию).
Этот же скрипт (но с другими параметрами приложения) отрабатывает для PROD-приложения после релиза (но там без копирования в БД-копию; плюс скрипт я запускаю вручную при условии успешности релиза).

Ну и... административно со временем все привыкли к 22:00 (время рестарта АОСа DEV для сборки CIL + снятия копии для построения перекрестных ссылок) не оставлять ошибок компиляции на DEV-приложении для автоматического рестарта АОСа со сборкой полного CIL-а.
Исключения конечно случаются - куда ж без них.
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 08.05.2024 в 22:16.
За это сообщение автора поблагодарили: Logger (15).