elguardian commented on code in PR #1906:
URL:
https://github.com/apache/incubator-kie-kogito-apps/pull/1906#discussion_r1395311241
##########
data-index/data-index-common/src/main/java/org/kie/kogito/index/service/IndexingService.java:
##########
@@ -69,6 +71,34 @@ public class IndexingService {
Instance<UserTaskInstanceEventMerger> userTaskInstanceMergers;
public void indexProcessInstanceEvent(ProcessInstanceDataEvent<?> event) {
+ //retry in case of rare but possible race condition during the insert
for the first registry
+ ProcessInstance pi = executeWithRetry(event,
this::handleProcessInstanceEvent, "indexing process instance");
+
+ ProcessDefinition definition = pi.getDefinition();
+
+ if (definition != null &&
!manager.getProcessDefinitionsCache().containsKey(definition.getKey())) {
+ //retry in case of rare but possible race condition during the
insert for the first registry
+ executeWithRetry(definition, this::handleProcessDefinition,
"indexing process definition");
Review Comment:
I don't think we need such complexity for normal scenarios but yeah,
different strategies can be supported. If you send all events through queue all
store operations are serialize so in most general case scenario we should be
good. Worst scenario some operations will fail in complex setups if we don't
setup properly the id. For instance in database you can ensure that an
operation in database cannot fail atomically with the standard MERGE SQL. And
hibernate can ensure definining properly the id.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]