Size: a a a

Camunda BPM Group

2020 February 13

AY

Alexander Yakovlev in Camunda BPM Group
Denis Kotov
что угодно херня обычно выходит)
Странное суждение
источник

AY

Alexander Yakovlev in Camunda BPM Group
Что угодно подразумевает что каждый в силу своих возможностей и желаний может навертеть кучу вещей, которые будут удовлетворять его потребности. Камундовский рест апи позволяет много, бери и делай, а если не позволяет, то никто не запрещает ещё пару рестов написать))
источник

ДД

Дмитрий Дахновский... in Camunda BPM Group
Доброе утро всем!
Помогите разобраться, пожалуйста)
есть скрипт с parallelGateway, в двух исходящих  ветках по ExternalTask
Периодически, когда воркеры комплитят ExternalTask, возникает ошибка с блокировкой

{"type":"OptimisticLockingException","message":"ENGINE-03005 Execution of 'INSERT VariableInstanceEntity[0c52a734-4e1e-11ea-b480-005056ba9bda]' failed. Entity was updated by another transaction concurrently."}

Можно что-то сделать чтоб не получать блокировку? Есть переменная, которая присутствует при комплите обоих ExternalTask. "Кто последний комплитит, того и тапки" - устроит
источник

ДД

Дмитрий Дахновский... in Camunda BPM Group
Пример скрипта
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
Дмитрий Дахновский
Доброе утро всем!
Помогите разобраться, пожалуйста)
есть скрипт с parallelGateway, в двух исходящих  ветках по ExternalTask
Периодически, когда воркеры комплитят ExternalTask, возникает ошибка с блокировкой

{"type":"OptimisticLockingException","message":"ENGINE-03005 Execution of 'INSERT VariableInstanceEntity[0c52a734-4e1e-11ea-b480-005056ba9bda]' failed. Entity was updated by another transaction concurrently."}

Можно что-то сделать чтоб не получать блокировку? Есть переменная, которая присутствует при комплите обоих ExternalTask. "Кто последний комплитит, того и тапки" - устроит
конкретно OptimisticLockingException  это хорошо, ее можно обработать

и это описано в документации
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
а вот то что "{external-task-id}/complete" возвращает 200 в этом случае - это плохо((

именно на insert. Маркер процесса не двигается далее
источник

ДД

Дмитрий Дахновский... in Camunda BPM Group
Ruslan Kadyrbaev
а вот то что "{external-task-id}/complete" возвращает 200 в этом случае - это плохо((

именно на insert. Маркер процесса не двигается далее
500я прилетает
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
ну возможно пофиксили в новых версиях
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
тогда вам повезло))
источник

ДД

Дмитрий Дахновский... in Camunda BPM Group
Ruslan Kadyrbaev
ну возможно пофиксили в новых версиях
Да, версия последняя- т.е. отловить 500, убедиться, что type == OptimisticLockingException, и попытаться закомплитить повторно - будет нормальным решением?
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
у меня был кейс с Multiple Instance, там 200 приходило, я на форуме отписался - пока не было ответов
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
сделайте ретрай, как написано в документации
и желательно с рандомным таймаутом (в пределах min & max)

если таймаут будет фиксированный для двух и болеее потоков - вероятность ошибки будет такая же)
источник

ДД

Дмитрий Дахновский... in Camunda BPM Group
Ruslan Kadyrbaev
сделайте ретрай, как написано в документации
и желательно с рандомным таймаутом (в пределах min & max)

если таймаут будет фиксированный для двух и болеее потоков - вероятность ошибки будет такая же)
благодарю за ответ)
источник

MD

Maksim Davliatshin in Camunda BPM Group
Дмитрий Дахновский
Доброе утро всем!
Помогите разобраться, пожалуйста)
есть скрипт с parallelGateway, в двух исходящих  ветках по ExternalTask
Периодически, когда воркеры комплитят ExternalTask, возникает ошибка с блокировкой

{"type":"OptimisticLockingException","message":"ENGINE-03005 Execution of 'INSERT VariableInstanceEntity[0c52a734-4e1e-11ea-b480-005056ba9bda]' failed. Entity was updated by another transaction concurrently."}

Можно что-то сделать чтоб не получать блокировку? Есть переменная, которая присутствует при комплите обоих ExternalTask. "Кто последний комплитит, того и тапки" - устроит
Доброе утро.
Вообще такое может возникать при параллельных задачах.
У них поднимается свой контекст. Если вы не задаете параметр localVariables при комплите, то такое возможно. Я бы советовал локальные переменные задавать, и уже потом на стороне bpmn их выбивать в глобальные.

Плюс, можно еще поиграться с приоритезацией:
Bpmn - https://docs.camunda.org/manual/latest/user-guide/process-engine/external-tasks/#specify-external-task-priorities

Rest - https://docs.camunda.org/manual/latest/reference/rest/external-task/put-priority/
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
Maksim Davliatshin
Доброе утро.
Вообще такое может возникать при параллельных задачах.
У них поднимается свой контекст. Если вы не задаете параметр localVariables при комплите, то такое возможно. Я бы советовал локальные переменные задавать, и уже потом на стороне bpmn их выбивать в глобальные.

Плюс, можно еще поиграться с приоритезацией:
Bpmn - https://docs.camunda.org/manual/latest/user-guide/process-engine/external-tasks/#specify-external-task-priorities

Rest - https://docs.camunda.org/manual/latest/reference/rest/external-task/put-priority/
а точно гонки исчезнут? мне кажется просто перейдут в другое место
источник

MD

Maksim Davliatshin in Camunda BPM Group
Ruslan Kadyrbaev
а точно гонки исчезнут? мне кажется просто перейдут в другое место
С приоритезацией вохможны но редко(если правильго настроить конечно) и это нужно тюнить по мере разростания процесса (что опять же не очень, потому что процесс нужно дробить)

А с локальными переменными не должно быть проблем. Потому что приоритезировать и совмещать уже будет сам движок. Там это выверено должно быть.
По крайней мере, в таком варианте я не сталкивался пока с блокировками.
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
"Там это выверено должно быть"
эммм.... возможно те же самые retry будут при вставке (есть уникальный индекс в БД)
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
надеюсь что каких то пессимистичных глобальных локов в камунде нет)
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
так что имхо лучше сделать самому ретрай, чем на каждом этапе прорабатывать прокидывание переменных из локального скоупа в глобальный
источник

R

Ruslan Kadyrbaev in Camunda BPM Group
и кстати OptimisticLockingException возникает на UPDATE тоже
источник