Ядро системы
- Проблемы и способы устранения
- ✅ Зацикливается установка на 5ом шаге
- ✅ Ошибка загрузки DLL в глобальных модулях при обновлении библиотек
- ✅ System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'Status'
- 💥Aspose.Cells возвращает дату в формате d/M/yyyy или d/M/yy
- ✅ Ошибка JSON на странице "Очередь исполнения"
- ✅ Column 'File' in table 'DocumentVersion' is of a type that is invalid for use as a key column in an index.
- ✅ Npgsql.PostgresException: 42501: permission denied to create extension "uuid-ossp"
- ✅ Таймауты и блокировки на MS SQL
- Тестовая среда
Проблемы и способы устранения
💥 - проблема изучается и ищется вариант решения
✅ - решение найдено и зафиксировано
📛 - на текущий момент решение отсутствует
✅ Зацикливается установка на 5ом шаге
При установке на Ubuntu 20.04 на 5ом шаге установка зацикливается. Проблема состоит в некорректном ответе DNS при инициализации rbbitmq.
Необходимо создать (отредактировать) resolv.conf и прописать только одну строчку:nameserver 127.0.0.53
✅ Ошибка загрузки DLL в глобальных модулях при обновлении библиотек
При обновлении пакетов, если были установлены новые внешние пакеты, в глобальных модулях возникают ошибки следующего вида:
ERROR 2020-07-31 12:05:33,589 [14] EleWise.ELMA.Logging.Logger - Error at load types from assembly HMS.Configuration, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null System.IO.FileLoadException: Could not load file or assembly 'DiadocApi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=d18fd4c7ad3c243e' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'DiadocApi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=d18fd4c7ad3c243e'
Варианта проблемы может быть два:
- Самостоятельно в конфигурации заказчиком используются вручную или еще как установленные пакеты (библиотеки) и на них в глобальных модулях, объектах и т.д. используются ссылки (using).
- Дополнительные модули (компоненты) сторонних разработчиков ELMA (партнеров), в которых внешние библиотеки (пакеты) прописываются для точек расширения и методов.
В первом случае следует самостоятельно следить за пересборкой глобальных модулей, скриптов объектов, документов, пользовательских расширений и отчетов. Лучше отказаться от использования таких библиотек и использовать системные сборки и сборки из основного дистрибутива из пространства имен EleWise.ELMA.
Во втором случае должна присутствовать "обертка" в модулях сторонних разработчиков, которая будет скрывать прямые ссылки на элементы внешних сборок.
✅ System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'Status'
При попутке обновления страницы в мониторе процессов с ошибками возникает следующее окно с ошибкой:
Кроме того, если завершить данный процесс, он так же не уйдет из списка проблемных.
В логах сервера видим следующее:
ERROR 2020-08-04 09:00:05,925 [114] EleWise.ELMA.Workflow.Processes.Web.Controllers.WorkflowQueueController - System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> NHibernate.Exceptions.GenericADOException: could not execute query
[ SELECT top(20) tv.Id as Id613_0_, tv.Uid as Uid613_0_, tv.ElementUid as ElementUid613_0_, tv.CreationDate as Creation4_613_0_, tv.Attempt as Attempt613_0_, tv.LastExecuteDate as LastExec6_613_0_, tv.NextExecuteDate as NextExec7_613_0_, tv.LastError as LastError613_0_, tv.SkipExecution as SkipExec9_613_0_, tv.SkipConnectorUid as SkipCon10_613_0_, tv.Timeout as Timeout613_0_, tv.LastExceptionData as LastExc12_613_0_, tv.ServerConnectionUid as ServerC13_613_0_, tv.Instance as Instance613_0_, tv.Author as Author613_0_, tv.BackgroundOperation as Backgro16_613_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt > 0 ) tv ORDER BY Status ]
[SQL: SELECT top(20) tv.Id as Id613_0_, tv.Uid as Uid613_0_, tv.ElementUid as ElementUid613_0_, tv.CreationDate as Creation4_613_0_, tv.Attempt as Attempt613_0_, tv.LastExecuteDate as LastExec6_613_0_, tv.NextExecuteDate as NextExec7_613_0_, tv.LastError as LastError613_0_, tv.SkipExecution as SkipExec9_613_0_, tv.SkipConnectorUid as SkipCon10_613_0_, tv.Timeout as Timeout613_0_, tv.LastExceptionData as LastExc12_613_0_, tv.ServerConnectionUid as ServerC13_613_0_, tv.Instance as Instance613_0_, tv.Author as Author613_0_, tv.BackgroundOperation as Backgro16_613_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt > 0 ) tv ORDER BY Status ] ---> System.Data.SqlClient.SqlException: Invalid column name 'Status'.
Получено решение от СП вендора:
Создать резервную копию базы данных. После этого выполнить следующий запрос в БД:delete from BlobStoreHolder where [Key] like '%WorkflowQueueItems%'
Он удалит все закешированные данные по таблице, в которой возникает ошибка.
Обязательно надо перезапустить сервер.
Для процессов, которые прерваны, но имеют счетчик ошибок 9+ придется ручками Выполнить обработку, чтобы они ушли из списка:
💥Aspose.Cells возвращает дату в формате d/M/yyyy или d/M/yy
Поле обновления на 3.15.21+ установлена новая версия компонента Aspose.Total 20+. В результате формат даты в ячейках Excel по умолчанию устанавливается или в d/M/yy, или в d/M/yyyy
✅ Ошибка JSON на странице "Очередь исполнения"
При переходе с версии 3.13 (и возможно более ранних) на 3.15 может возникнуть вот такая проблема:
А в логах видим:
ERROR [CallContextUid=366d0238-be7b-46e0-b0a2-c74447312d0b] 2020-08-31 12:28:32,965 [82] EleWise.ELMA.Workflow.Processes.Web.Controllers.WorkflowQueueController - System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> NHibernate.Exceptions.GenericADOException: could not execute query
[ SELECT top(15) tv.Id as Id509_0_, tv.Uid as Uid509_0_, tv.ElementUid as ElementUid509_0_, tv.CreationDate as Creation4_509_0_, tv.Attempt as Attempt509_0_, tv.LastExecuteDate as LastExec6_509_0_, tv.NextExecuteDate as NextExec7_509_0_, tv.LastError as LastError509_0_, tv.SkipExecution as SkipExec9_509_0_, tv.SkipConnectorUid as SkipCon10_509_0_, tv.Timeout as Timeout509_0_, tv.LastExceptionData as LastExc12_509_0_, tv.ServerConnectionUid as ServerC13_509_0_, tv.Instance as Instance509_0_, tv.Author as Author509_0_, tv.BackgroundOperation as Backgro16_509_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt = 0 ) tv ORDER BY Status ]
[SQL: SELECT top(15) tv.Id as Id509_0_, tv.Uid as Uid509_0_, tv.ElementUid as ElementUid509_0_, tv.CreationDate as Creation4_509_0_, tv.Attempt as Attempt509_0_, tv.LastExecuteDate as LastExec6_509_0_, tv.NextExecuteDate as NextExec7_509_0_, tv.LastError as LastError509_0_, tv.SkipExecution as SkipExec9_509_0_, tv.SkipConnectorUid as SkipCon10_509_0_, tv.Timeout as Timeout509_0_, tv.LastExceptionData as LastExc12_509_0_, tv.ServerConnectionUid as ServerC13_509_0_, tv.Instance as Instance509_0_, tv.Author as Author509_0_, tv.BackgroundOperation as Backgro16_509_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt = 0 ) tv ORDER BY Status ] ---> System.Data.SqlClient.SqlException: Invalid column name 'Status'.
В результате обновления изменились параметры сортировки по полю Статус. Необходимо просто выбрать колонку сортировку "мышкой" по колонке Статус или какой-то другой и ошибка уйдет.
✅ Column 'File' in table 'DocumentVersion' is of a type that is invalid for use as a key column in an index.
При обновлении системы может возникнуть следующая ошибка построения индекса:
*EleWise.ELMA.Runtime.Db.DbStructureException: Ошибка обновления структуры БД ---> System.Data.DataException: Не удалось выполнить запрос
CREATE NONCLUSTERED INDEX [IX_DocumentVersion_File] ON [DocumentVersion]
(
[File] ASC
)
---> System.Data.SqlClient.SqlException: Column 'File' in table 'DocumentVersion' is of a type that is invalid for use as a key column in an index.
Необходимо восстановить базу из резервной и выполнить перед запуском сервера ELMA следующий запрос:
alter table [ELMA-DB].[dbo].[DocumentVersion]
alter column [File] nvarchar(250)
✅ Npgsql.PostgresException: 42501: permission denied to create extension "uuid-ossp"
При обновлении системы до 3.15.27+ в облаке Mail.RU возникает указанная ошибка:
Ошибка инициализации конфигурации ELMA ---> Npgsql.PostgresException: 42501: permission denied to create extension "uuid-ossp"
При этом после миграции из другого облака расширение было уже установлено и функции uuid_* в базе существуют.
Начиная с версии 3.15.27 CR сделана доработка. Необходимо в configuration.config в секции main connectionStringName="MainDB"
добавить параметр skipCreateUuidExtension="true"
✅ Таймауты и блокировки на MS SQL
При увеличении объема базы данных, а так же снижения производительности самого сервера БД начинают возникать таймауты и блокировки.
Необходимо выполнить два запроса к базе данных:
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON
ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
Тестовая среда
Организация тестовой среды (разработки) и ее настройка
Сброс паролей пользователей
Актуально начиная с версии 3.12.3
Для входа без пароля необходимо выполнить следующие запросы (пример для MS SQL):
UPDATE "UserSecurityProfile"
SET
"UserSecurityProfile"."Password" = 'd41d8cd98f00b204e9800998ecf8427e',
"UserSecurityProfile"."Salt" = NULL,
"UserSecurityProfile"."ForcedChangePassword" = NULL,
"UserSecurityProfile"."CountFailedLogon" = NULL;
UPDATE "User"
SET
"User"."EMail" = ' ',
"User"."AuthProviderGuid" = '00000000-0000-0000-0000-000000000000'