Ошибка MultipleObjectsReturned при обновлении ПМ 4.3 → 4.4
Симптомы
Обновление ПринтМенеджер с 4.3 на 4.4 завершается ошибкой таймаута:
Waiting for the server to start
......................................................................................................................................................
Timeout error. Check docker logs. Then restart the installation.
В логах ПринтМенеджера:
__fake__.RuleAction.MultipleObjectsReturned: get() returned more than one RuleAction -- it returned 2!
Система не обновляется, приходиться откатывать в предыдущее состояние.
Причина
В таблице print_rules_ruleaction БД ПринтМенеджера есть дублирующиеся записи с одинаковым action_type. При миграции на 4.4 скрипт ожидает одну запись — получает две, падает.
Дубли появляются при обновлении с версий 4.2 и ниже. На чистых установках 4.3 не воспроизводится.
Диагностика
Проверить наличие дублирующихся записей в:
- В панели администратора Мониторинга → Правила → Действия / Правила → Условия
- В панели администратора ПринтМенеджера → Правила → Действия / Правила → Условия
Признак: существуют дубли одних и тех же записей.
Решение
Самостоятельно не устраняется. Требует удаления дублей из БД ПринтМенеджер вручную.
Передать в ТП:
- Версии Мониторинга и ПринтМенеджера до обновления.
- Логи установки (
install.logна сервере ПринтМенеджер). - Логи системы ПринтМенеджера после обновления.
- Подтверждение, что система обновлялась с версий 4.2 или ниже.
ТП предоставит команды для удаления дублей из таблицы print_rules_ruleaction. После этого обновление повторяется стандартным способом.
Как проверить результат
Обновление завершается без ошибок таймаута. В панели администратора ПринтМенеджер отображается версия 4.4.x. Правила печати работают корректно.
Когда эскалировать
Сразу — проблема не устраняется без вмешательства в БД.