This is an automated email from the ASF dual-hosted git repository.
fjtiradosarti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git
The following commit(s) were added to refs/heads/main by this push:
new 270119abe [Fix apache/incubator-kie-issues#1857] Adding triggerCount
(#2204)
270119abe is described below
commit 270119abefd7e4e8656fea556e9483828914b998
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Tue Mar 18 13:48:14 2025 +0100
[Fix apache/incubator-kie-issues#1857] Adding triggerCount (#2204)
* [Fix apache/incubator-kie-issues#1857] Adding triggerCount
* [Fix apache/incubator-kie-issues#1857] Adding isRetrigger
* [Fix apache/incubator-kie-issues#1857] Clearing error
* [Fix apache/incubator-kie-issues#1857] Adding IT test for retrigger
---
.../src/main/resources/basic.schema.graphqls | 8 ++++
.../org/kie/kogito/index/model/NodeInstance.java | 20 ++++++++
.../kogito/index/model/ProcessInstanceError.java | 9 ++++
.../java/org/kie/kogito/index/test/TestUtils.java | 1 +
.../test/query/AbstractProcessInstanceQueryIT.java | 12 +++++
.../ProcessInstanceErrorDataEventMerger.java | 16 +++++--
.../merger/ProcessInstanceNodeDataEventMerger.java | 3 ++
.../ProcessInstanceStateDataEventMerger.java | 2 +
.../protostream/NodeInstanceMarshaller.java | 5 ++
.../kogito/index/jpa/model/NodeInstanceEntity.java | 19 ++++++++
.../jpa/model/ProcessInstanceErrorEntity.java | 31 ++++++++-----
.../jpa/storage/ProcessInstanceEntityStorage.java | 7 +++
.../storage/AbstractProcessInstanceStorageIT.java | 4 +-
.../db/data-index/ansi/V1.45.1.1__retrigger.sql | 22 +++++++++
.../index/mongodb/model/ProcessInstanceEntity.java | 54 +++++++++++++++++-----
.../mongodb/model/ProcessInstanceEntityMapper.java | 6 +++
.../data-index/postgresql/V1.45.1.1__retrigger.sql | 21 +++++++++
.../src/main/resources/META-INF/kogito-index.proto | 2 +
.../addon/api/KogitoAddonRuntimeClientImpl.java | 12 ++---
.../api/KogitoAddonRuntimeClientImplTest.java | 2 +-
20 files changed, 218 insertions(+), 38 deletions(-)
diff --git
a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index e3a2086b2..7e568a493 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -106,6 +106,7 @@ type ProcessInstance {
type ProcessInstanceError {
nodeDefinitionId: String!
+ nodeInstanceId: String
message: String
}
@@ -142,6 +143,8 @@ type NodeInstance {
definitionId: String!
nodeId: String!
slaDueDate: DateTime
+ retrigger: Boolean
+ errorMessage: String
}
enum MilestoneStatus {
@@ -207,6 +210,9 @@ input ProcessInstanceErrorArgument {
}
input NodeInstanceArgument {
+ and: [NodeInstanceArgument!]
+ or: [NodeInstanceArgument!]
+ not: NodeInstanceArgument
id: IdArgument
name: StringArgument
definitionId: StringArgument
@@ -214,6 +220,8 @@ input NodeInstanceArgument {
type: StringArgument
enter: DateArgument
exit: DateArgument
+ errorMessage: StringArgument
+ retrigger: BooleanArgument
}
input MilestoneStatusArgument {
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
index ab9df6cad..96586f703 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/NodeInstance.java
@@ -40,6 +40,26 @@ public class NodeInstance {
private ZonedDateTime slaDueDate;
+ private Boolean retrigger;
+
+ private String errorMessage;
+
+ public Boolean isRetrigger() {
+ return retrigger;
+ }
+
+ public void setRetrigger(Boolean retrigger) {
+ this.retrigger = retrigger;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
@JsonProperty("nodeDefinitionId")
private String definitionId;
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceError.java
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceError.java
index 0023df32e..7cdc5b7ec 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceError.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/main/java/org/kie/kogito/index/model/ProcessInstanceError.java
@@ -25,6 +25,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
public class ProcessInstanceError {
private String nodeDefinitionId;
+ private String nodeInstanceId;
@JsonProperty("errorMessage")
private String message;
@@ -77,4 +78,12 @@ public class ProcessInstanceError {
public int hashCode() {
return Objects.hash(nodeDefinitionId, message);
}
+
+ public String getNodeInstanceId() {
+ return nodeInstanceId;
+ }
+
+ public void setNodeInstanceId(String nodeInstanceId) {
+ this.nodeInstanceId = nodeInstanceId;
+ }
}
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/TestUtils.java
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/TestUtils.java
index 954bbf4a2..ffbb87fc6 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/TestUtils.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/TestUtils.java
@@ -111,6 +111,7 @@ public class TestUtils {
.nodeType(nodeType)
.eventDate(new Date())
.eventType(eventType)
+ .setRetrigger(false)
.build();
ProcessInstanceNodeDataEvent event = new
ProcessInstanceNodeDataEvent();
diff --git
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessInstanceQueryIT.java
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessInstanceQueryIT.java
index e92b8aeed..cdb5c329a 100644
---
a/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessInstanceQueryIT.java
+++
b/data-index/data-index-storage/data-index-storage-api/src/test/java/org/kie/kogito/index/test/query/AbstractProcessInstanceQueryIT.java
@@ -49,4 +49,16 @@ public abstract class AbstractProcessInstanceQueryIT extends
QueryTestBase<Strin
processInstanceId);
}
+ @Test
+ void testProcessRetriggerQuery() {
+ String processId = "no_retrigger";
+ String processInstanceId = UUID.randomUUID().toString();
+ String subProcessId = processId + "_sub";
+ String subProcessInstanceId = UUID.randomUUID().toString();
+ ProcessInstanceStorage storage = getStorage();
+
storage.indexState(TestUtils.createProcessInstanceEvent(processInstanceId,
processId, subProcessId, subProcessInstanceId, COMPLETED.ordinal()));
+
storage.indexNode(TestUtils.createProcessInstanceNodeDataEvent(processInstanceId,
processId, "1", "1", "Javierito", "type", 1));
+
storage.indexError(TestUtils.createProcessInstanceErrorDataEvent(processInstanceId,
processId, "1", "kkdevaca", "1", "1"));
+ queryAndAssert(assertWithId(), storage,
singletonList(equalTo("nodes.retrigger", false)), null, null, null,
processInstanceId);
+ }
}
diff --git
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceErrorDataEventMerger.java
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceErrorDataEventMerger.java
index 3408a7247..021c9ebe5 100644
---
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceErrorDataEventMerger.java
+++
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceErrorDataEventMerger.java
@@ -20,6 +20,7 @@ package org.kie.kogito.index.storage.merger;
import org.kie.kogito.event.process.ProcessInstanceDataEvent;
import org.kie.kogito.event.process.ProcessInstanceErrorDataEvent;
+import org.kie.kogito.event.process.ProcessInstanceErrorEventBody;
import org.kie.kogito.index.CommonUtils;
import org.kie.kogito.index.model.ProcessInstance;
import org.kie.kogito.index.model.ProcessInstanceError;
@@ -30,14 +31,19 @@ import jakarta.enterprise.context.ApplicationScoped;
public class ProcessInstanceErrorDataEventMerger extends
ProcessInstanceEventMerger {
@Override
- public ProcessInstance merge(ProcessInstance pi,
ProcessInstanceDataEvent<?> data) {
- ProcessInstanceErrorDataEvent event = (ProcessInstanceErrorDataEvent)
data;
- pi = getOrNew(pi, data, event.getData().getEventDate());
+ public ProcessInstance merge(ProcessInstance pi,
ProcessInstanceDataEvent<?> dataEvent) {
+ ProcessInstanceErrorDataEvent event = (ProcessInstanceErrorDataEvent)
dataEvent;
+ ProcessInstanceErrorEventBody data = event.getData();
+ pi = getOrNew(pi, dataEvent, data.getEventDate());
ProcessInstanceError error = new ProcessInstanceError();
- error.setMessage(event.getData().getErrorMessage());
- error.setNodeDefinitionId(event.getData().getNodeDefinitionId());
+ error.setMessage(data.getErrorMessage());
+ error.setNodeDefinitionId(data.getNodeDefinitionId());
+ error.setNodeInstanceId(data.getNodeInstanceId());
pi.setError(error);
pi.setState(CommonUtils.ERROR_STATE);
+ if (pi.getNodes() != null) {
+ pi.getNodes().stream().filter(n ->
n.getId().equals(error.getNodeInstanceId())).findAny().ifPresent(n ->
n.setErrorMessage(data.getErrorMessage()));
+ }
return pi;
}
diff --git
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
index bb7c39a5b..5ac329df7 100644
---
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
+++
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceNodeDataEventMerger.java
@@ -64,6 +64,9 @@ public class ProcessInstanceNodeDataEventMerger extends
ProcessInstanceEventMerg
nodeInstance.setName(body.getNodeName());
nodeInstance.setType(body.getNodeType());
nodeInstance.setSlaDueDate(toZonedDateTime(body.getSlaDueDate()));
+ if (body.isRetrigger() != null) {
+ nodeInstance.setRetrigger(body.isRetrigger());
+ }
ZonedDateTime eventDate = toZonedDateTime(body.getEventDate());
switch (body.getEventType()) {
case EVENT_TYPE_ENTER:
diff --git
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
index a7be6d0ea..61196cd15 100644
---
a/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
+++
b/data-index/data-index-storage/data-index-storage-common/src/main/java/org/kie/kogito/index/storage/merger/ProcessInstanceStateDataEventMerger.java
@@ -56,6 +56,8 @@ public class ProcessInstanceStateDataEventMerger extends
ProcessInstanceEventMer
pi.setCreatedBy(event.getData().getEventUser());
} else if (event.getData().getEventType() ==
ProcessInstanceStateEventBody.EVENT_TYPE_STARTED) {
pi.setEnd(toZonedDateTime(event.getData().getEventDate()));
+ } else if (event.getData().getEventType() ==
ProcessInstanceStateEventBody.EVENT_TYPE_RETRIGGERED) {
+ pi.setError(null);
}
pi.setBusinessKey(event.getData().getBusinessKey());
pi.setAddons(isNullOrEmpty(event.getKogitoAddons()) ? null :
Set.of(event.getKogitoAddons().split(",")));
diff --git
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
index dd4b5f557..fc60ad7ab 100644
---
a/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
+++
b/data-index/data-index-storage/data-index-storage-infinispan/src/main/java/org/kie/kogito/index/infinispan/protostream/NodeInstanceMarshaller.java
@@ -43,6 +43,9 @@ public class NodeInstanceMarshaller extends
AbstractMarshaller implements Messag
node.setDefinitionId(reader.readString("definitionId"));
node.setNodeId(reader.readString("nodeId"));
node.setSlaDueDate(dateToZonedDateTime(reader.readDate("slaDueDate")));
+ node.setRetrigger(reader.readBoolean("retrigger"));
+ node.setErrorMessage(reader.readString("errorMessage"));
+
return node;
}
@@ -56,6 +59,8 @@ public class NodeInstanceMarshaller extends
AbstractMarshaller implements Messag
writer.writeString("definitionId", node.getDefinitionId());
writer.writeString("nodeId", node.getNodeId());
writer.writeDate("slaDueDate",
zonedDateTimeToDate(node.getSlaDueDate()));
+ writer.writeBoolean("retrigger", node.isRetrigger());
+ writer.writeString("errorMessage", node.getErrorMessage());
}
@Override
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
index 51c5bef91..ef3babab5 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/NodeInstanceEntity.java
@@ -45,11 +45,30 @@ public class NodeInstanceEntity extends AbstractEntity {
private ZonedDateTime exit;
private ZonedDateTime slaDueDate;
private String definitionId;
+ private Boolean retrigger;
+ private String errorMessage;
+
@ManyToOne(cascade = CascadeType.ALL, optional = false)
@OnDelete(action = OnDeleteAction.CASCADE)
@JoinColumn(name = "processInstanceId", foreignKey = @ForeignKey(name =
"fk_nodes_process"))
private ProcessInstanceEntity processInstance;
+ public Boolean isRetrigger() {
+ return retrigger;
+ }
+
+ public void setRetrigger(Boolean isRetrigger) {
+ this.retrigger = isRetrigger;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
@Override
public String getId() {
return id;
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceErrorEntity.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceErrorEntity.java
index b3902299a..04b8f6775 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceErrorEntity.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/model/ProcessInstanceErrorEntity.java
@@ -26,6 +26,7 @@ import jakarta.persistence.Embeddable;
public class ProcessInstanceErrorEntity {
private String nodeDefinitionId;
+ private String nodeInstanceId;
private String message;
public String getNodeDefinitionId() {
@@ -44,22 +45,28 @@ public class ProcessInstanceErrorEntity {
this.message = message;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ProcessInstanceErrorEntity that = (ProcessInstanceErrorEntity) o;
- return Objects.equals(nodeDefinitionId, that.nodeDefinitionId) &&
- Objects.equals(message, that.message);
+ public void setNodeInstanceId(String nodeInstanceId) {
+ this.nodeInstanceId = nodeInstanceId;
+ }
+
+ public String getNodeInstanceId() {
+ return nodeInstanceId;
}
@Override
public int hashCode() {
- return Objects.hash(nodeDefinitionId, message);
+ return Objects.hash(message, nodeDefinitionId, nodeInstanceId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!(obj instanceof ProcessInstanceErrorEntity))
+ return false;
+ ProcessInstanceErrorEntity other = (ProcessInstanceErrorEntity) obj;
+ return Objects.equals(message, other.message) &&
Objects.equals(nodeDefinitionId, other.nodeDefinitionId)
+ && Objects.equals(nodeInstanceId, other.nodeInstanceId);
}
}
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
index b6ab5aa3e..d3ce2b35d 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/main/java/org/kie/kogito/index/jpa/storage/ProcessInstanceEntityStorage.java
@@ -147,7 +147,9 @@ public class ProcessInstanceEntityStorage extends
AbstractJPAStorageFetcher<Stri
}
errorEntity.setMessage(error.getErrorMessage());
errorEntity.setNodeDefinitionId(error.getNodeDefinitionId());
+ errorEntity.setNodeInstanceId(error.getNodeInstanceId());
pi.setState(CommonUtils.ERROR_STATE);
+ pi.getNodes().stream().filter(n ->
n.getId().equals(error.getNodeInstanceId())).findAny().ifPresent(n ->
n.setErrorMessage(error.getErrorMessage()));
}
private void indexNode(ProcessInstanceEntity pi,
ProcessInstanceNodeEventBody data) {
@@ -186,6 +188,9 @@ public class ProcessInstanceEntityStorage extends
AbstractJPAStorageFetcher<Stri
nodeInstance.setName(body.getNodeName());
nodeInstance.setType(body.getNodeType());
nodeInstance.setSlaDueDate(toZonedDateTime(body.getSlaDueDate()));
+ if (body.isRetrigger() != null) {
+ nodeInstance.setRetrigger(body.isRetrigger());
+ }
ZonedDateTime eventDate = toZonedDateTime(body.getEventDate());
switch (body.getEventType()) {
case EVENT_TYPE_ENTER:
@@ -220,6 +225,8 @@ public class ProcessInstanceEntityStorage extends
AbstractJPAStorageFetcher<Stri
pi.setCreatedBy(data.getEventUser());
} else if (data.getEventType() ==
ProcessInstanceStateEventBody.EVENT_TYPE_ENDED) {
pi.setEnd(toZonedDateTime(data.getEventDate()));
+ } else if (data.getEventType() ==
ProcessInstanceStateEventBody.EVENT_TYPE_RETRIGGERED) {
+ pi.setError(null);
}
pi.setBusinessKey(data.getBusinessKey());
pi.setUpdatedBy(data.getEventUser());
diff --git
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
index f8f8c6674..9b7d736b0 100644
---
a/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
+++
b/data-index/data-index-storage/data-index-storage-jpa-common/src/test/java/org/kie/kogito/index/jpa/storage/AbstractProcessInstanceStorageIT.java
@@ -109,7 +109,7 @@ public abstract class AbstractProcessInstanceStorageIT {
.hasSize(1);
Assertions.assertThat(processInstance.getNodes().get(0))
- .hasNoNullFieldsOrPropertiesExcept("exit", "slaDueDate")
+ .hasNoNullFieldsOrPropertiesExcept("exit", "slaDueDate",
"errorMessage", "retrigger")
.hasFieldOrPropertyWithValue("name", "nodeName")
.hasFieldOrPropertyWithValue("type", "BoundaryEventNode")
.hasFieldOrPropertyWithValue("definitionId", nodeDefinitionId)
@@ -125,7 +125,7 @@ public abstract class AbstractProcessInstanceStorageIT {
.hasSize(1);
Assertions.assertThat(processInstance.getNodes().get(0))
- .hasNoNullFieldsOrPropertiesExcept("slaDueDate")
+ .hasNoNullFieldsOrPropertiesExcept("slaDueDate",
"errorMessage", "retrigger")
.hasFieldOrPropertyWithValue("name", "nodeName")
.hasFieldOrPropertyWithValue("type", "BoundaryEventNode")
.hasFieldOrPropertyWithValue("definitionId", nodeDefinitionId)
diff --git
a/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.1.1__retrigger.sql
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.1.1__retrigger.sql
new file mode 100644
index 000000000..29ed23b06
--- /dev/null
+++
b/data-index/data-index-storage/data-index-storage-jpa/src/main/resources/kie-flyway/db/data-index/ansi/V1.45.1.1__retrigger.sql
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ALTER TABLE nodes ADD COLUMN retrigger boolean default false;
+ALTER TABLE nodes ADD COLUMN error_message varchar(4000);
+ALTER TABLE processes ADD COLUMN node_instance_id varchar(255);
diff --git
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
index 5a66e6f29..ece0f99c9 100644
---
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
+++
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntity.java
@@ -283,6 +283,10 @@ public class ProcessInstanceEntity {
Long slaDueDate;
+ private Boolean isRetrigger;
+
+ private String errorMessage;
+
public String getId() {
return id;
}
@@ -363,6 +367,22 @@ public class ProcessInstanceEntity {
public int hashCode() {
return Objects.hash(id);
}
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
+ public void setRetrigger(Boolean retrigger) {
+ this.isRetrigger = retrigger;
+ }
+
+ public Boolean isRetrigger() {
+ return isRetrigger;
+ }
}
public static class ProcessInstanceErrorEntity {
@@ -371,6 +391,8 @@ public class ProcessInstanceEntity {
String message;
+ private String nodeInstanceId;
+
public String getNodeDefinitionId() {
return nodeDefinitionId;
}
@@ -387,22 +409,30 @@ public class ProcessInstanceEntity {
this.message = message;
}
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ProcessInstanceErrorEntity that = (ProcessInstanceErrorEntity) o;
- return Objects.equals(nodeDefinitionId, that.nodeDefinitionId) &&
- Objects.equals(message, that.message);
+ public String getNodeInstanceId() {
+ return nodeInstanceId;
+ }
+
+ public void setNodeInstanceId(String nodeInstanceId) {
+ this.nodeInstanceId = nodeInstanceId;
}
@Override
public int hashCode() {
- return Objects.hash(nodeDefinitionId, message);
+ return Objects.hash(message, nodeDefinitionId, nodeInstanceId);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ProcessInstanceErrorEntity other = (ProcessInstanceErrorEntity)
obj;
+ return Objects.equals(message, other.message) &&
Objects.equals(nodeDefinitionId, other.nodeDefinitionId)
+ && Objects.equals(nodeInstanceId, other.nodeInstanceId);
}
}
diff --git
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
index 18e674d57..cee3e65e8 100644
---
a/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
+++
b/data-index/data-index-storage/data-index-storage-mongodb/src/main/java/org/kie/kogito/index/mongodb/model/ProcessInstanceEntityMapper.java
@@ -149,6 +149,8 @@ public class ProcessInstanceEntityMapper implements
MongoEntityMapper<ProcessIns
instance.setExit(instantToZonedDateTime(entity.getExit()));
instance.setDefinitionId(entity.getDefinitionId());
instance.setSlaDueDate(instantToZonedDateTime(entity.getSlaDueDate()));
+ instance.setRetrigger(entity.isRetrigger());
+ instance.setErrorMessage(entity.getErrorMessage());
return instance;
}
@@ -166,6 +168,8 @@ public class ProcessInstanceEntityMapper implements
MongoEntityMapper<ProcessIns
entity.setExit(zonedDateTimeToInstant(instance.getExit()));
entity.setDefinitionId(instance.getDefinitionId());
entity.setSlaDueDate(zonedDateTimeToInstant(instance.getSlaDueDate()));
+ entity.setRetrigger(instance.isRetrigger());
+ entity.setErrorMessage(instance.getErrorMessage());
return entity;
}
@@ -176,6 +180,7 @@ public class ProcessInstanceEntityMapper implements
MongoEntityMapper<ProcessIns
ProcessInstanceError error = new ProcessInstanceError();
error.setNodeDefinitionId(entity.getNodeDefinitionId());
+ error.setNodeInstanceId(entity.getNodeInstanceId());
error.setMessage(entity.getMessage());
return error;
}
@@ -187,6 +192,7 @@ public class ProcessInstanceEntityMapper implements
MongoEntityMapper<ProcessIns
ProcessInstanceEntity.ProcessInstanceErrorEntity entity = new
ProcessInstanceEntity.ProcessInstanceErrorEntity();
entity.setNodeDefinitionId(error.getNodeDefinitionId());
+ entity.setNodeInstanceId(error.getNodeInstanceId());
entity.setMessage(error.getMessage());
return entity;
}
diff --git
a/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.1.1__retrigger.sql
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.1.1__retrigger.sql
new file mode 100644
index 000000000..986203336
--- /dev/null
+++
b/data-index/data-index-storage/data-index-storage-postgresql/src/main/resources/kie-flyway/db/data-index/postgresql/V1.45.1.1__retrigger.sql
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+ALTER TABLE nodes ADD COLUMN retrigger boolean default false, ADD COLUMN
error_message VARCHAR(65535);
+ALTER TABLE processes ADD COLUMN node_instance_id VARCHAR(255);
diff --git
a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
index 3460ff5a2..c8d85199d 100644
---
a/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
+++
b/data-index/data-index-storage/data-index-storage-protobuf/src/main/resources/META-INF/kogito-index.proto
@@ -179,6 +179,8 @@ message NodeInstance {
/* @Field(store = Store.YES) */
optional string nodeId = 7;
optional int64 slaDueDate = 8;
+ optional bool retrigger = 9;
+ optional string errorMessage= 10;
}
/* @Indexed */
diff --git
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
index f85043659..e4d43503d 100644
---
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
+++
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/main/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImpl.java
@@ -94,7 +94,7 @@ public class KogitoAddonRuntimeClientImpl extends
KogitoRuntimeCommonClient impl
pInstance.abort();
if (pInstance.status() ==
org.kie.kogito.process.ProcessInstance.STATE_ERROR) {
- throw new ProcessInstanceExecutionException(pInstance.id(),
pInstance.error().get().failedNodeId(), pInstance.error().get().errorMessage());
+ throw ProcessInstanceExecutionException.fromError(pInstance);
} else {
return String.format(SUCCESSFULLY_OPERATION_MESSAGE, "ABORT
ProcessInstance with id: " + processInstance.getId());
}
@@ -107,7 +107,7 @@ public class KogitoAddonRuntimeClientImpl extends
KogitoRuntimeCommonClient impl
pInstance.error().get().retrigger();
if (pInstance.status() ==
org.kie.kogito.process.ProcessInstance.STATE_ERROR) {
- throw new ProcessInstanceExecutionException(pInstance.id(),
pInstance.error().get().failedNodeId(), pInstance.error().get().errorMessage());
+ throw ProcessInstanceExecutionException.fromError(pInstance);
} else {
return String.format(SUCCESSFULLY_OPERATION_MESSAGE, "RETRY
ProcessInstance in error with id: " + processInstance.getId());
}
@@ -120,7 +120,7 @@ public class KogitoAddonRuntimeClientImpl extends
KogitoRuntimeCommonClient impl
pInstance.error().get().skip();
if (pInstance.status() ==
org.kie.kogito.process.ProcessInstance.STATE_ERROR) {
- throw new ProcessInstanceExecutionException(pInstance.id(),
pInstance.error().get().failedNodeId(), pInstance.error().get().errorMessage());
+ throw ProcessInstanceExecutionException.fromError(pInstance);
} else {
return String.format(SUCCESSFULLY_OPERATION_MESSAGE, "SKIP
ProcessInstance in error with id: " + processInstance.getId());
}
@@ -200,7 +200,7 @@ public class KogitoAddonRuntimeClientImpl extends
KogitoRuntimeCommonClient impl
pInstance.triggerNode(nodeDefinitionId);
if (pInstance.status() ==
org.kie.kogito.process.ProcessInstance.STATE_ERROR) {
- throw new ProcessInstanceExecutionException(pInstance.id(),
pInstance.error().get().failedNodeId(), pInstance.error().get().errorMessage());
+ throw ProcessInstanceExecutionException.fromError(pInstance);
} else {
return String.format(SUCCESSFULLY_OPERATION_MESSAGE,
"TRIGGER Node " + nodeDefinitionId + "from
ProcessInstance with id: " + processInstance.getId());
@@ -214,7 +214,7 @@ public class KogitoAddonRuntimeClientImpl extends
KogitoRuntimeCommonClient impl
pInstance.retriggerNodeInstance(nodeInstanceId);
if (pInstance.status() ==
org.kie.kogito.process.ProcessInstance.STATE_ERROR) {
- throw new ProcessInstanceExecutionException(pInstance.id(),
pInstance.error().get().failedNodeId(), pInstance.error().get().errorMessage());
+ throw ProcessInstanceExecutionException.fromError(pInstance);
} else {
return String.format(SUCCESSFULLY_OPERATION_MESSAGE,
"RETRIGGER Node instance " + nodeInstanceId + "from
ProcessInstance with id: " + processInstance.getId());
@@ -228,7 +228,7 @@ public class KogitoAddonRuntimeClientImpl extends
KogitoRuntimeCommonClient impl
pInstance.cancelNodeInstance(nodeInstanceId);
if (pInstance.status() ==
org.kie.kogito.process.ProcessInstance.STATE_ERROR) {
- throw new ProcessInstanceExecutionException(pInstance.id(),
pInstance.error().get().failedNodeId(), pInstance.error().get().errorMessage());
+ throw ProcessInstanceExecutionException.fromError(pInstance);
} else {
return String.format(SUCCESSFULLY_OPERATION_MESSAGE,
"CANCEL Node instance " + nodeInstanceId + "from
ProcessInstance with id: " + processInstance.getId());
diff --git
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/test/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImplTest.java
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/test/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImplTest.java
index 43f9846bd..5e7dbc9cd 100644
---
a/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/test/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImplTest.java
+++
b/data-index/kogito-addons-quarkus-data-index-persistence/kogito-addons-quarkus-data-index-persistence-common/runtime/src/test/java/org/kie/kogito/index/addon/api/KogitoAddonRuntimeClientImplTest.java
@@ -212,7 +212,7 @@ public class KogitoAddonRuntimeClientImplTest {
mockProcessInstanceStatusError().abort();
assertThrows(ProcessInstanceExecutionException.class,
() -> client.abortProcessInstance(SERVICE_URL, pI));
- verify(processInstance, times(2)).error();
+ verify(processInstance, times(1)).error();
verify(processInstance, times(1)).abort();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]