From 49816517637316a6f3da1d581bd35c6a34778aaf Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Wed, 8 Jun 2022 09:25:48 +0200 Subject: [PATCH 1/2] test(engine): verify timer triggered event * add a test case to verify that the timer triggered event is written with the key of the created process instance --- .../processing/timer/TimerStartEventTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/engine/src/test/java/io/camunda/zeebe/engine/processing/timer/TimerStartEventTest.java b/engine/src/test/java/io/camunda/zeebe/engine/processing/timer/TimerStartEventTest.java index 012a22281c7a..42518ff7c16e 100644 --- a/engine/src/test/java/io/camunda/zeebe/engine/processing/timer/TimerStartEventTest.java +++ b/engine/src/test/java/io/camunda/zeebe/engine/processing/timer/TimerStartEventTest.java @@ -877,4 +877,47 @@ public void shouldTriggerOnlyTimerStartEvent() { .extracting(r -> r.getValue().getElementId()) .containsOnly("timer_start"); } + + @Test + public void shouldWriteTriggeredEventWithProcessInstanceKey() { + // given + final var deployedProcess = + engine + .deployment() + .withXmlResource(SIMPLE_MODEL) + .deploy() + .getValue() + .getProcessesMetadata() + .get(0); + + final long processDefinitionKey = deployedProcess.getProcessDefinitionKey(); + + assertThat( + RecordingExporter.timerRecords(TimerIntent.CREATED) + .withProcessDefinitionKey(processDefinitionKey) + .exists()) + .isTrue(); + + // when + engine.increaseTime(Duration.ofSeconds(2)); + + // then + final var processInstanceKey = + RecordingExporter.processInstanceRecords(ProcessInstanceIntent.ELEMENT_ACTIVATED) + .withElementType(BpmnElementType.PROCESS) + .withProcessDefinitionKey(processDefinitionKey) + .getFirst() + .getKey(); + + final var timerTriggered = + RecordingExporter.timerRecords(TimerIntent.TRIGGERED) + .withProcessDefinitionKey(processDefinitionKey) + .getFirst(); + + Assertions.assertThat(timerTriggered.getValue()) + .hasProcessDefinitionKey(processDefinitionKey) + .hasProcessInstanceKey(processInstanceKey) + .hasElementInstanceKey(-1L) + .hasTargetElementId("start_1"); + } } From b6e5b355268baaee9ea6a59586195e4924fc0592 Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Wed, 8 Jun 2022 09:30:07 +0200 Subject: [PATCH 2/2] feat(engine): write timer triggered event with process instance key * the key of the created process instance is known when the timer start event is triggered * set the key of the process instance for the timer event to make it observable that the instance was created by the this timer --- .../zeebe/engine/processing/timer/TriggerTimerProcessor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/src/main/java/io/camunda/zeebe/engine/processing/timer/TriggerTimerProcessor.java b/engine/src/main/java/io/camunda/zeebe/engine/processing/timer/TriggerTimerProcessor.java index 7132bd190982..b0120b0a03bb 100644 --- a/engine/src/main/java/io/camunda/zeebe/engine/processing/timer/TriggerTimerProcessor.java +++ b/engine/src/main/java/io/camunda/zeebe/engine/processing/timer/TriggerTimerProcessor.java @@ -104,8 +104,9 @@ public void processRecord( processState.getFlowElement( processDefinitionKey, timer.getTargetElementIdBuffer(), ExecutableCatchEvent.class); if (isStartEvent(elementInstanceKey)) { - stateWriter.appendFollowUpEvent(record.getKey(), TimerIntent.TRIGGERED, timer); final long processInstanceKey = keyGenerator.nextKey(); + timer.setProcessInstanceKey(processInstanceKey); + stateWriter.appendFollowUpEvent(record.getKey(), TimerIntent.TRIGGERED, timer); eventHandle.activateProcessInstanceForStartEvent( processDefinitionKey, processInstanceKey, timer.getTargetElementIdBuffer(), NO_VARIABLES); } else {