private static JobHeaders fromBrokerJobHeaders( io.zeebe.protocol.impl.record.value.job.JobHeaders headers) { return JobHeaders.newBuilder() .setWorkflowInstanceKey(headers.getWorkflowInstanceKey()) .setBpmnProcessId(bufferAsString(headers.getBpmnProcessId())) .setWorkflowDefinitionVersion(headers.getWorkflowDefinitionVersion()) .setWorkflowKey(headers.getWorkflowKey()) .setElementId(bufferAsString(headers.getElementId())) .setElementInstanceKey(headers.getElementInstanceKey()) .build(); }
private void populateJobFromTask( BpmnStepContext<T> context, WorkflowInstanceRecord value, ExecutableServiceTask serviceTask) { final DirectBuffer headers = serviceTask.getEncodedHeaders(); jobCommand.reset(); jobCommand .setType(serviceTask.getType()) .setRetries(serviceTask.getRetries()) .setPayload(value.getPayload()) .setCustomHeaders(headers) .getHeaders() .setBpmnProcessId(value.getBpmnProcessId()) .setWorkflowDefinitionVersion(value.getVersion()) .setWorkflowKey(value.getWorkflowKey()) .setWorkflowInstanceKey(value.getWorkflowInstanceKey()) .setElementId(serviceTask.getId()) .setElementInstanceKey(context.getRecord().getKey()); } }
.setErrorType(ErrorType.JOB_NO_RETRIES) .setErrorMessage(incidentErrorMessage) .setBpmnProcessId(jobHeaders.getBpmnProcessId()) .setWorkflowInstanceKey(jobHeaders.getWorkflowInstanceKey()) .setElementId(jobHeaders.getElementId()) .setElementInstanceKey(jobHeaders.getElementInstanceKey()) .setJobKey(event.getKey()) .setVariableScopeKey(jobHeaders.getElementInstanceKey());
@Override public void processRecord( TypedRecord<JobRecord> record, TypedResponseWriter responseWriter, TypedStreamWriter streamWriter) { final JobHeaders jobHeaders = record.getValue().getHeaders(); final long elementInstanceKey = jobHeaders.getElementInstanceKey(); if (elementInstanceKey > 0) { final ElementInstance elementInstance = workflowState.getElementInstanceState().getInstance(elementInstanceKey); if (elementInstance != null) { elementInstance.setJobKey(record.getKey()); } } } }
public TypedRecord<JobRecord> awaitJobInState(final String activityId, final JobIntent state) { final DirectBuffer activityIdBuffer = wrapString(activityId); final Supplier<TypedRecordStream<JobRecord>> lookupStream = () -> environmentRule .events() .onlyJobRecords() .filter(r -> r.getValue().getHeaders().getElementId().equals(activityIdBuffer)) .withIntent(state); waitUntil(() -> lookupStream.get().findFirst().isPresent()); return lookupStream.get().findFirst().get(); } }
public JobHeaders setElementId(DirectBuffer elementId) { return setElementId(elementId, 0, elementId.capacity()); }
@Override public void processRecord( TypedRecord<JobRecord> event, TypedResponseWriter responseWriter, TypedStreamWriter streamWriter) { final JobRecord value = event.getValue(); if (value.getRetries() <= 0) { final JobHeaders jobHeaders = value.getHeaders(); final DirectBuffer jobErrorMessage = value.getErrorMessage(); DirectBuffer incidentErrorMessage = DEFAULT_ERROR_MESSAGE; if (jobErrorMessage.capacity() > 0) { incidentErrorMessage = jobErrorMessage; } incidentEvent.reset(); incidentEvent .setErrorType(ErrorType.JOB_NO_RETRIES) .setErrorMessage(incidentErrorMessage) .setBpmnProcessId(jobHeaders.getBpmnProcessId()) .setWorkflowInstanceKey(jobHeaders.getWorkflowInstanceKey()) .setElementId(jobHeaders.getElementId()) .setElementInstanceKey(jobHeaders.getElementInstanceKey()) .setJobKey(event.getKey()); streamWriter.appendNewCommand(IncidentIntent.CREATE, incidentEvent); } } }
@Override public void processRecord( TypedRecord<JobRecord> record, TypedResponseWriter responseWriter, TypedStreamWriter streamWriter) { final JobHeaders jobHeaders = record.getValue().getHeaders(); final long elementInstanceKey = jobHeaders.getElementInstanceKey(); if (elementInstanceKey > 0) { final ElementInstance elementInstance = workflowState.getElementInstanceState().getInstance(elementInstanceKey); if (elementInstance != null) { elementInstance.setJobKey(record.getKey()); } } } }
public TypedRecord<JobRecord> awaitJobInState(final String activityId, final JobIntent state) { final DirectBuffer activityIdBuffer = wrapString(activityId); final Supplier<TypedRecordStream<JobRecord>> lookupStream = () -> environmentRule .events() .onlyJobRecords() .filter(r -> r.getValue().getHeaders().getElementId().equals(activityIdBuffer)) .withIntent(state); waitUntil(() -> lookupStream.get().findFirst().isPresent()); return lookupStream.get().findFirst().get(); } }
@Override public void handle(final BpmnStepContext<ExecutableServiceTask> context) { final WorkflowInstanceRecord value = context.getValue(); final ExecutableServiceTask serviceTask = context.getElement(); jobCommand.reset(); jobCommand .setType(serviceTask.getType()) .setRetries(serviceTask.getRetries()) .setPayload(value.getPayload()) .getHeaders() .setBpmnProcessId(value.getBpmnProcessId()) .setWorkflowDefinitionVersion(value.getVersion()) .setWorkflowKey(value.getWorkflowKey()) .setWorkflowInstanceKey(value.getWorkflowInstanceKey()) .setElementId(serviceTask.getId()) .setElementInstanceKey(context.getRecord().getKey()); final DirectBuffer headers = serviceTask.getEncodedHeaders(); jobCommand.setCustomHeaders(headers); context.getCommandWriter().appendNewCommand(JobIntent.CREATE, jobCommand); } }
private JobRecordValue ofJobRecord(JobRecord record) { final JobHeaders jobHeaders = record.getHeaders(); final HeadersImpl headers = new HeadersImpl( asString(jobHeaders.getBpmnProcessId()), asString(jobHeaders.getElementId()), jobHeaders.getElementInstanceKey(), jobHeaders.getWorkflowInstanceKey(), jobHeaders.getWorkflowKey(), jobHeaders.getWorkflowDefinitionVersion()); final Instant deadline; if (record.getDeadline() != Protocol.INSTANT_NULL_VALUE) { deadline = Instant.ofEpochMilli(record.getDeadline()); } else { deadline = null; } return new JobRecordValueImpl( objectMapper, asJson(record.getPayload()), asString(record.getType()), asString(record.getWorker()), deadline, headers, asMsgPackMap(record.getCustomHeaders()), record.getRetries(), asString(record.getErrorMessage())); }
private void activateJobs(TypedStreamWriter streamWriter, JobBatchRecord value) { final Iterator<JobRecord> iterator = value.jobs().iterator(); final Iterator<LongValue> keyIt = value.jobKeys().iterator(); while (iterator.hasNext() && keyIt.hasNext()) { final JobRecord jobRecord = iterator.next(); final LongValue next1 = keyIt.next(); final long key = next1.getValue(); // update state and write follow up event for job record final long elementInstanceKey = jobRecord.getHeaders().getElementInstanceKey(); if (elementInstanceKey >= 0) { final DirectBuffer payload = collectPayload(variableNames, elementInstanceKey); jobRecord.setPayload(payload); } else { jobRecord.setPayload(WorkflowInstanceRecord.EMPTY_PAYLOAD); } // we have to copy the job record because #write will reset the iterator state final ExpandableArrayBuffer copy = new ExpandableArrayBuffer(); jobRecord.write(copy, 0); final JobRecord copiedJob = new JobRecord(); copiedJob.wrap(copy, 0, jobRecord.getLength()); state.activate(key, copiedJob); streamWriter.appendFollowUpEvent(key, JobIntent.ACTIVATED, copiedJob); } }
record .getHeaders() .setBpmnProcessId(wrapString(bpmnProcessId)) .setWorkflowKey(workflowKey) .setWorkflowDefinitionVersion(workflowDefinitionVersion) .setWorkflowInstanceKey(workflowInstanceKey) .setElementId(wrapString(elementId)) .setElementInstanceKey(activityInstanceKey);
private JobRecordValue ofJobRecord(JobRecord record) { final JobHeaders jobHeaders = record.getHeaders(); final HeadersImpl headers = new HeadersImpl( asString(jobHeaders.getBpmnProcessId()), asString(jobHeaders.getElementId()), jobHeaders.getElementInstanceKey(), jobHeaders.getWorkflowInstanceKey(), jobHeaders.getWorkflowKey(), jobHeaders.getWorkflowDefinitionVersion()); final Instant deadline; if (record.getDeadline() != Protocol.INSTANT_NULL_VALUE) { deadline = Instant.ofEpochMilli(record.getDeadline()); } else { deadline = null; } return new JobRecordValueImpl( objectMapper, asJson(record.getPayload()), asString(record.getType()), asString(record.getWorker()), deadline, headers, asMsgPackMap(record.getCustomHeaders()), record.getRetries(), asString(record.getErrorMessage())); }
private void activateJobs(TypedStreamWriter streamWriter, JobBatchRecord value) { final Iterator<JobRecord> iterator = value.jobs().iterator(); final Iterator<LongValue> keyIt = value.jobKeys().iterator(); while (iterator.hasNext() && keyIt.hasNext()) { final JobRecord jobRecord = iterator.next(); final LongValue next1 = keyIt.next(); final long key = next1.getValue(); // update state and write follow up event for job record final long elementInstanceKey = jobRecord.getHeaders().getElementInstanceKey(); if (elementInstanceKey >= 0) { final DirectBuffer payload = collectPayload(variableNames, elementInstanceKey); jobRecord.setPayload(payload); } else { jobRecord.setPayload(WorkflowInstanceRecord.EMPTY_PAYLOAD); } // we have to copy the job record because #write will reset the iterator state final ExpandableArrayBuffer copy = new ExpandableArrayBuffer(); jobRecord.write(copy, 0); final JobRecord copiedJob = new JobRecord(); copiedJob.wrap(copy, 0, jobRecord.getLength()); state.activate(key, copiedJob); streamWriter.appendFollowUpEvent(key, JobIntent.ACTIVATED, copiedJob); } }
record .getHeaders() .setBpmnProcessId(wrapString(bpmnProcessId)) .setWorkflowKey(workflowKey) .setWorkflowDefinitionVersion(workflowDefinitionVersion) .setWorkflowInstanceKey(workflowInstanceKey) .setElementId(wrapString(elementId)) .setElementInstanceKey(activityInstanceKey);
@Override public void processRecord( final TypedRecord<JobRecord> record, final TypedResponseWriter responseWriter, final TypedStreamWriter streamWriter) { final JobRecord jobEvent = record.getValue(); final JobHeaders jobHeaders = jobEvent.getHeaders(); final long elementInstanceKey = jobHeaders.getElementInstanceKey(); final ElementInstance elementInstance = workflowState.getElementInstanceState().getInstance(elementInstanceKey); if (elementInstance != null) { final WorkflowInstanceRecord value = elementInstance.getValue(); value.setPayload(jobEvent.getPayload()); streamWriter.appendFollowUpEvent( elementInstanceKey, WorkflowInstanceIntent.ELEMENT_COMPLETING, value); elementInstance.setState(WorkflowInstanceIntent.ELEMENT_COMPLETING); elementInstance.setJobKey(-1); elementInstance.setValue(value); workflowState .getElementInstanceState() .getVariablesState() .setPayload(elementInstanceKey, jobEvent.getPayload()); } } }
.setBpmnProcessId(wrapString(bpmnProcessId)) .setWorkflowKey(workflowKey) .setWorkflowDefinitionVersion(workflowDefinitionVersion) .setWorkflowInstanceKey(workflowInstanceKey) .setElementId(wrapString(activityId)) .setElementInstanceKey(activityInstanceKey);
final long elementInstanceKey = jobHeaders.getElementInstanceKey(); final ElementInstance elementInstance = workflowState.getElementInstanceState().getInstance(elementInstanceKey);
.setBpmnProcessId(wrapString(bpmnProcessId)) .setWorkflowKey(workflowKey) .setWorkflowDefinitionVersion(workflowDefinitionVersion) .setWorkflowInstanceKey(workflowInstanceKey) .setElementId(wrapString(activityId)) .setElementInstanceKey(activityInstanceKey);