Проблемы и способы устранения

💥 - проблема изучается и ищется вариант решения ✅ - решение найдено и зафиксировано 📛 - на текущий момент решение отсутствует

✅ Зацикливается установка на 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'


Варианта проблемы может быть два:

В первом случае следует самостоятельно следить за пересборкой глобальных модулей, скриптов объектов, документов, пользовательских расширений и отчетов. Лучше отказаться от использования таких библиотек и использовать системные сборки и сборки из основного дистрибутива из пространства имен EleWise.ELMA.

Во втором случае должна присутствовать "обертка" в модулях сторонних разработчиков, которая будет скрывать прямые ссылки на элементы внешних сборок.

✅ System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'Status'

При попутке обновления страницы в мониторе процессов с ошибками возникает следующее окно с ошибкой:

image-1596520973170.png

Кроме того, если завершить данный процесс, он так же не уйдет из списка проблемных.

В логах сервера видим следующее:

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+ придется ручками Выполнить обработку, чтобы они ушли из списка:

image-1596521847871.png

💥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 может возникнуть вот такая проблема:

image-1598868529415.png

А в логах видим:

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'.


В результате обновления изменились параметры сортировки по полю Статус. Необходимо просто выбрать колонку сортировку "мышкой" по колонке Статус или какой-то другой и ошибка уйдет.

image-1598870528011.png

✅ 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