use of io.camunda.zeebe.protocol.impl.record.value.timer.TimerRecord in project zeebe by camunda.
the class SkipFailingEventsTest method shouldNotBlacklistInstanceAndIgnoreTimerStartEvents.
@Test
public void shouldNotBlacklistInstanceAndIgnoreTimerStartEvents() {
// given
when(commandResponseWriter.tryWriteResponse(anyInt(), anyLong())).thenReturn(true);
final List<Long> processedInstances = new ArrayList<>();
final TypedRecordProcessor<DeploymentRecord> errorProneProcessor = new TypedRecordProcessor<>() {
@Override
public void processRecord(final TypedRecord<DeploymentRecord> record, final TypedResponseWriter responseWriter, final TypedStreamWriter streamWriter) {
if (record.getKey() == 0) {
throw new RuntimeException("expected");
}
processedInstances.add(TimerInstance.NO_ELEMENT_INSTANCE);
streamWriter.appendFollowUpEvent(record.getKey(), TimerIntent.CREATED, Records.timer(TimerInstance.NO_ELEMENT_INSTANCE));
}
};
final BpmnModelInstance process = Bpmn.createExecutableProcess("process").startEvent().timerWithDuration("PT1S").endEvent().done();
final DeploymentRecord deploymentRecord = new DeploymentRecord();
deploymentRecord.resources().add().setResourceName("process.bpmn").setResource(Bpmn.convertToString(process).getBytes());
streams.startStreamProcessor(STREAM_NAME, DefaultZeebeDbFactory.defaultFactory(), (processingContext) -> {
zeebeState = processingContext.getZeebeState();
return TypedRecordProcessors.processors(zeebeState.getKeyGenerator(), processingContext.getWriters()).onCommand(ValueType.DEPLOYMENT, DeploymentIntent.CREATE, errorProneProcessor);
});
streams.newRecord(STREAM_NAME).event(deploymentRecord).recordType(RecordType.COMMAND).intent(DeploymentIntent.CREATE).key(0).write();
streams.newRecord(STREAM_NAME).event(deploymentRecord).recordType(RecordType.COMMAND).intent(DeploymentIntent.CREATE).key(1).write();
// when
waitForRecordWhichSatisfies(e -> Records.isEvent(e, ValueType.TIMER, TimerIntent.CREATED));
// then
final RecordMetadata metadata = new RecordMetadata();
metadata.valueType(ValueType.TIMER);
final MockTypedRecord<TimerRecord> mockTypedRecord = new MockTypedRecord<>(0, metadata, Records.timer(TimerInstance.NO_ELEMENT_INSTANCE));
Assertions.assertThat(zeebeState.getBlackListState().isOnBlacklist(mockTypedRecord)).isFalse();
assertThat(processedInstances).containsExactly(TimerInstance.NO_ELEMENT_INSTANCE);
}
use of io.camunda.zeebe.protocol.impl.record.value.timer.TimerRecord in project zeebe by camunda.
the class CancelTimerProcessor method processRecord.
@Override
public void processRecord(final TypedRecord<TimerRecord> record, final TypedResponseWriter responseWriter, final TypedStreamWriter streamWriter) {
final TimerRecord timer = record.getValue();
final TimerInstance timerInstance = timerInstanceState.get(timer.getElementInstanceKey(), record.getKey());
if (timerInstance == null) {
rejectionWriter.appendRejection(record, RejectionType.NOT_FOUND, String.format(NO_TIMER_FOUND_MESSAGE, record.getKey()));
} else {
stateWriter.appendFollowUpEvent(record.getKey(), TimerIntent.CANCELED, timer);
}
}
use of io.camunda.zeebe.protocol.impl.record.value.timer.TimerRecord in project zeebe by camunda-cloud.
the class CancelTimerProcessor method processRecord.
@Override
public void processRecord(final TypedRecord<TimerRecord> record, final TypedResponseWriter responseWriter, final TypedStreamWriter streamWriter) {
final TimerRecord timer = record.getValue();
final TimerInstance timerInstance = timerInstanceState.get(timer.getElementInstanceKey(), record.getKey());
if (timerInstance == null) {
rejectionWriter.appendRejection(record, RejectionType.NOT_FOUND, String.format(NO_TIMER_FOUND_MESSAGE, record.getKey()));
} else {
stateWriter.appendFollowUpEvent(record.getKey(), TimerIntent.CANCELED, timer);
}
}
use of io.camunda.zeebe.protocol.impl.record.value.timer.TimerRecord in project zeebe by zeebe-io.
the class SkipFailingEventsTest method shouldNotBlacklistInstanceAndIgnoreTimerStartEvents.
@Test
public void shouldNotBlacklistInstanceAndIgnoreTimerStartEvents() {
// given
when(commandResponseWriter.tryWriteResponse(anyInt(), anyLong())).thenReturn(true);
final List<Long> processedInstances = new ArrayList<>();
final TypedRecordProcessor<DeploymentRecord> errorProneProcessor = new TypedRecordProcessor<>() {
@Override
public void processRecord(final TypedRecord<DeploymentRecord> record, final TypedResponseWriter responseWriter, final TypedStreamWriter streamWriter) {
if (record.getKey() == 0) {
throw new RuntimeException("expected");
}
processedInstances.add(TimerInstance.NO_ELEMENT_INSTANCE);
streamWriter.appendFollowUpEvent(record.getKey(), TimerIntent.CREATED, Records.timer(TimerInstance.NO_ELEMENT_INSTANCE));
}
};
final BpmnModelInstance process = Bpmn.createExecutableProcess("process").startEvent().timerWithDuration("PT1S").endEvent().done();
final DeploymentRecord deploymentRecord = new DeploymentRecord();
deploymentRecord.resources().add().setResourceName("process.bpmn").setResource(Bpmn.convertToString(process).getBytes());
streams.startStreamProcessor(STREAM_NAME, DefaultZeebeDbFactory.defaultFactory(), (processingContext) -> {
zeebeState = processingContext.getZeebeState();
return TypedRecordProcessors.processors(zeebeState.getKeyGenerator(), processingContext.getWriters()).onCommand(ValueType.DEPLOYMENT, DeploymentIntent.CREATE, errorProneProcessor);
});
streams.newRecord(STREAM_NAME).event(deploymentRecord).recordType(RecordType.COMMAND).intent(DeploymentIntent.CREATE).key(0).write();
streams.newRecord(STREAM_NAME).event(deploymentRecord).recordType(RecordType.COMMAND).intent(DeploymentIntent.CREATE).key(1).write();
// when
waitForRecordWhichSatisfies(e -> Records.isEvent(e, ValueType.TIMER, TimerIntent.CREATED));
// then
final RecordMetadata metadata = new RecordMetadata();
metadata.valueType(ValueType.TIMER);
final MockTypedRecord<TimerRecord> mockTypedRecord = new MockTypedRecord<>(0, metadata, Records.timer(TimerInstance.NO_ELEMENT_INSTANCE));
Assertions.assertThat(zeebeState.getBlackListState().isOnBlacklist(mockTypedRecord)).isFalse();
assertThat(processedInstances).containsExactly(TimerInstance.NO_ELEMENT_INSTANCE);
}
use of io.camunda.zeebe.protocol.impl.record.value.timer.TimerRecord in project zeebe by zeebe-io.
the class CancelTimerProcessor method processRecord.
@Override
public void processRecord(final TypedRecord<TimerRecord> record, final TypedResponseWriter responseWriter, final TypedStreamWriter streamWriter) {
final TimerRecord timer = record.getValue();
final TimerInstance timerInstance = timerInstanceState.get(timer.getElementInstanceKey(), record.getKey());
if (timerInstance == null) {
rejectionWriter.appendRejection(record, RejectionType.NOT_FOUND, String.format(NO_TIMER_FOUND_MESSAGE, record.getKey()));
} else {
stateWriter.appendFollowUpEvent(record.getKey(), TimerIntent.CANCELED, timer);
}
}
Aggregations