при загрузке archive.datafile с очисткой системы получил сообщение
"Процесс "Пример 10-2" не может быть выгружен т.к. от него зависит процесс "Пример 10-1"
21:28:31,148 ERROR [ru.runa.wfe.service.interceptors.EjbExceptionSupport] (http--127.0.0.1-8080-7) ejb call error: DefinitionServiceBean.undeployProcessDefinition(Actor{id=1, name=Administrator, code=-1}, Пример 10-2, null): ru.runa.wfe.execution.ParentProcessExistsException
at ru.runa.wfe.definition.logic.DefinitionLogic.undeployProcessDefinition(DefinitionLogic.java:188) [wfe-core-4.2.0-SNAPSHOT.jar:4.2.0-SNAPSHOT-${svn.revision}]
at ru.runa.wfe.service.impl.DefinitionServiceBean.undeployProcessDefinition(DefinitionServiceBean.java:127) [wfe-service-4.2.0-SNAPSHOT.jar:]
Разве при загрузке с очисткой системы эта ошибка должна быть? Насколько понял из-за этой ошибки процесс "Пример 10-2" не был заменен на процесс из архива?
добавил еще attachment
[r6164] бранч для работ по тикету
Related
Commit: [r6164]
Возникает ParentProcessExistsException, который вызывается в ru.runa.wfe.definition.logic.DefinitionLogic.undeployProcessDefinition(User, String, Long)
Насколько понял, при undeploy definition процесса, выполняется проверка "не является ли запущенный процесс этого definition БП, порожденным в parent процессе"
Эту проверку не надо делать в случае загрузки datafile с включенной опцией полной очистки системы.
У бага сложная воспроизводимость из-за:
Иными словами, если корневой процесс удален раньше дочерних, что чаще всего и случается, то никакой ошибки не возникает.
Решение видится в сортировке массива
ru.runa.wfe.definition.dto.WfDefinition
через интерфейсComparable
, что наверное изначально и планировалось, но не было до конца реализовано. Сейчас проверка дает только эквивалентность по имени.[r6172] - сортировка списка WfDefinition перед полной очисткой
Related
Commit: [r6172]
Собрал ear из бранча wfe.996, но не смог проверить кейс загрузки datafile
т.к. сейчас попытка зайти в пункт "Запустить процесс" или экспорт процесса из DevStudio на сервер приводит к переполнению стека!
Last edit: vromav 2015-04-12
Скорее всего проблема какая-то локальная. Сервер из wfe.996 и gpd из транка - таких проблем не заметил, хороший баг вывалился бы сразу.
локальная или нет, проблема проявляется на уже существующей БД
1). Удалил БД из тестового сервера, переполнение не возникает, но при экспорте процессов из DS (trunk), получаю ошибку:
"javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,30059]
Message: The element type "value" must be terminated by the matching end-tag "</value>"."
2). Сделал импорт archive.datafile в систему, с очисткой, все проблемы пропали.
Ссылка на тестовый сервер (с БД), на которой возникают проблемы (около 430Мб):
https://cloud.mail.ru/public/29sSK3EkpZiZ/jboss7_996.zip
[r6217] - исключение из xml-сериализации нового поля, необходимого для компарации
Мой косяк. Новое поле в класс добавил, а в схеме его нет. Добавил его в игнор, эксцепшна больше быть не должно.
Related
Commit: [r6217]
[r6215] - упрощение логики компарации WfDefinition
Related
Commit: [r6215]
Исправлено только это "javax.xml.stream.XMLStreamException: ParseError at [row,col]" (возникало ранее при экспорте из DevStudio)
Более важная проблема, связанная с переполнением стека осталась, и судя по коммиту r6217, похоже даже не решалась.
StackOverflow получал как на существующей БД - при попытке зайти в пункт "Запустить процесс", так и на "чистой" БД после загрузки archive.datafile
08:49:30,261 ERROR [ru.runa.wfe.service.interceptors.EjbExceptionSupport] (http--127.0.0.1-8080-1) ejb call error: DefinitionServiceBean.getLatestProcessDefinitions(Actor{id=1, name=Administrator, code=-1}, BatchPresentation{type=DEFINITION, name=label.batch_presentation_default_name}): java.lang.StackOverflowError
at java.util.HashMap$EntryIterator.<init>(HashMap.java:845) [rt.jar:1.7.0_01]
..
Caused by: java.lang.StackOverflowError
at java.util.HashMap$EntryIterator.<init>(HashMap.java:845) [rt.jar:1.7.0_01]
at java.util.HashMap$EntryIterator.<init>(HashMap.java:845) [rt.jar:1.7.0_01]
Еще одна проблема на которую натыкался, это "...Definition 7 does not exists..." при импорте процесса в DevStudio с сервера WFE. Выполнял экспорт/импорт процесса, и в какой-то момент получил ошибку:
09:56:06,627 DEBUG [apicall] (http--127.0.0.1-8080-7) 1 ms: ExecutorServiceBean.getExecutor(Actor{id=1, name=Administrator, code=-1}, 1)
09:56:06,631 ERROR [ru.runa.wfe.service.interceptors.EjbExceptionSupport] (http--127.0.0.1-8080-7) ejb call error: DefinitionServiceBean.getProcessDefinitionFile(Actor{id=1, name=Administrator, code=-1}, 7, par): ru.runa.wfe.definition.DefinitionDoesNotExistException: Definition 7 does not exists.
at ru.runa.wfe.definition.dao.DeploymentDAO.checkNotNull(DeploymentDAO.java:66) [wfe-core-4.2.0-SNAPSHOT.jar:4.2.0-SNAPSHOT-${svn.revision}]
at ru.runa.wfe.definition.dao.DeploymentDAO.checkNotNull(DeploymentDAO.java:42) [wfe-core-4.2.0-SNAPSHOT.jar:4.2.0-SNAPSHOT-${svn.revision}]
При этом на сервере отсутствовал Definition с id равным 7 (как в ошибке)
Возможно DefinitionDoesNotExistException не связан с общей темой тикета.
Last edit: vromav 2015-04-15
StackOverflow не могу воспроизвести локально, в т.ч. и с использованием приаттаченного состояния системы. Прошу описать алго создания, экспортирования и запуска одного БП изолированно, который даст стабильное воспроизведение.
DefinitionDoesNotExistException получил, но только при мультипроцессе, когда БП сабпроцесса фактически не экспортировался на сервер вместе с БП его использующим. Если сначала экспортировать БП сабпроцесса, а потом уже экспортировать основной БП (впрочем порядок экспортирования не важен, можно и наоборот), то эксцепшна нет, что логично, видимо так и задумано, в отличии от композиции, когда сабпроцесс экспортируется вместе с основным.
Слил на другую систему приаттаченый сервер, заменил ear на текущий wfe.996
Запустил сервер, вошел в web интерфейс, нажал на пункт "Запустить процесс" - StackOverflow.
Сделал все тоже самое, но заменил ear на trunk версию - проблемы нет.
У меня оно и так стабильно воспроизводиться уже на 2-х системах. Попробую выяснить из-за чего конкретно проблема.
Есть предположение, что в trunk были какие-то изменения, которые попросту еще не вошли в wfe.996
Смержил r6217 из wfe.996 с trunk wfe
Проблема воспроизводится
Last edit: vromav 2015-04-16
Как именно она воспроизводится? Какой минимальный кейс? Что должно быть в БП? Как он должен экспортироваться? Какие настройки должны быть на wfe? Какая конкретно последовательность действий инициирующих проявление ошибки?
А разве я это не описал?
"Слил на другую систему приаттаченый сервер, заменил ear на текущий wfe.996
Запустил сервер, вошел в web интерфейс, нажал на пункт "Запустить процесс" - StackOverflow."
Ок, максимально упрощаю задачу, смотри скринкаст и выполняй следующие действия:
В итоге повиснешь в
private boolean isSubprocessOf(Map<String, SubprocessDefinition=""> supprocesses)
Проблема исследована с помощью дебага приаттаченого сюда ранее сервера со всеми процессами, настройками и т.д.
Воспроизводимость была и есть стабильная, проверено на нескольких машинах. У тебя просто не может не повториться.
На приаттаченных сэмплах есть воспроизведение, будет фикс.