Как я поучаствовал в разработке Camunda 8 или пример типичной ошибки в многопоточном коде

Зимой 2024 года мне довелось поучаствовать в разработке проекта на Camunda 8. Сразу оговорюсь: проект в итоге реализовали на другом движке. Тем не менее, команда успела сделать стенд, прогнать тесты и замерить производительность.
В этой статье я расскажу об одном эпизоде, когда мне пришлось исправить библиотеку spring-zeebe из Camunda 8, отвечающую за обвязку Job Worker на Spring.
Одной из моих задач было отладить процесс, используя локальные интеграционные тесты с Docker и библиотекой Testcontainers. Мы создали простой процесс, вызывающий наш Job Worker, подлежавший отладке. Сразу столкнулись с плавающей ошибкой: иногда тест проходил успешно, иногда — нет. Несколько тасков работали корректно, однако первый периодически игнорировался без видимых ошибок. Изначально подозревали проблему в собственном коде, проверяли конфигурацию Job Worker, благодаря чему узнали много нового о Camunda 8.
















