debu999 opened a new issue, #1900:
URL: https://github.com/apache/incubator-kie-kogito-apps/issues/1900

   ### Describe the bug
   
   There is not explicit error handling during event processing in data index.
   ReactiveMessagingEventConsumer/BlockingMessagingEventConsumer,
   ```
   @Incoming(KOGITO_PROCESSINSTANCES_EVENTS)
       public Uni<Void> onProcessInstanceEvent(ProcessInstanceDataEvent<?> 
event) {
           LOGGER.debug("Process instance consumer received 
ProcessInstanceDataEvent: \n{}", event);
           return Uni.createFrom().item(event)
                   .invoke(indexingService::indexProcessInstanceEvent)
                   .invoke(eventPublisher::fire)
                   .onFailure()
                   .invoke(t -> LOGGER.error("Error processing process instance 
ProcessInstanceDataEvent: {}", t.getMessage(), t))
                   .onItem().ignore().andContinueWithNull();
       }
   
       @Incoming(KOGITO_USERTASKINSTANCES_EVENTS)
       public Uni<Void> onUserTaskInstanceEvent(UserTaskInstanceDataEvent<?> 
event) {
           LOGGER.debug("Task instance received UserTaskInstanceDataEvent 
\n{}", event);
           return Uni.createFrom().item(event)
                   .invoke(indexingService::indexUserTaskInstanceEvent)
                   .invoke(eventPublisher::fire)
                   .onFailure()
                   .invoke(t -> LOGGER.error("Error processing task instance 
UserTaskInstanceDataEvent: {}", t.getMessage(), t))
                   .onItem().ignore().andContinueWithNull();
       }
   ```
   If any error occurs then its silently ignored. 
   Can there be something to either store the message which failed.
   
   There is one more issue with the usecase
   
   ```
   AbstractTransactionManager.java
   
    @Override
       public void onBeforeStartEvent(UnitOfWorkStartEvent event) {
           if (!enabled()) {
               return;
           }
   
           ClientSession clientSession = mongoClient.startSession();
           this.clientSessionLocal.set(clientSession);
           TransactionOptions txnOptions = TransactionOptions.builder()
                   .readPreference(ReadPreference.primary())
                   .readConcern(ReadConcern.MAJORITY)
                   .writeConcern(WriteConcern.MAJORITY)
                   .build();
           clientSession.startTransaction(txnOptions);
       }
   
       @Override
       public void onAfterEndEvent(UnitOfWorkEndEvent event) {
           if (!enabled()) {
               return;
           }
   
           try (ClientSession clientSession = this.getClientSession()) {
               clientSession.commitTransaction();
           } finally {
               clientSessionLocal.remove();
           }
       }
   ```
   
   How to ensure consistency between runtime and dataindex. We see in rare 
cases the following is happening.
   1.Lets assume we have 3 servers in replica set S1/S2/S3 and the publisher 
app is writing to S1/S3 for the majority write config.
   2. Data is not yet acknowledges from majority
   3. The cloud event is fired and say data index which is the consumer of 
cloud event is able to process the event
   4. DI is reading data from the mongodb and thus it might be reading old data 
to update.
   5. Say if it connects to S2 it will read old data. as default read concern 
is local.
   6. How can we avoid this scenario. Please advise on this.
   7. What should be the read concern in mongodb for the dataindex in replica 
set mode out of the following
        **local/available/majority/linearizable/snapshot**
   
   ### Expected behavior
   
   Ideally runtime persistence completion should trigger events and then data 
index should always get the latest data from the system.
   
   Moreover any errror in event processing must be stored rather than silently 
ignoring them in the system.
   Do advise on the solution.
   
   ### Actual behavior
   
   we see DI process data after receiving events but the data read from mongo 
db in certain scenarios is stale or old thus we get incorrect updates in 
database.
   
   DI must not read anything at all from acutal runtime collection.
   
   
   
   ### How to Reproduce?
   
   This is tricky as it is not reproduceable. These are kindly edge cases where 
if event processing is fast, data read sometimes are stale. Need help on right 
config to make DI read latest data and any error in DI must be logged rather 
than silently ignoring them.
   
   ### Output of `uname -a` or `ver`
   
   Darwin Mac-mini.local 22.2.0 Darwin Kernel Version 22.2.0: Fri Nov 11 
02:04:44 PST 2022; root:xnu-8792.61.2~4/RELEASE_ARM64_T8103 arm64
   
   ### Output of `java -version`
   
   openjdk version "20.0.1" 2023-04-18 OpenJDK Runtime Environment GraalVM CE 
20.0.1-dev+9.1 (build 20.0.1+9-jvmci-23.1-b02) OpenJDK 64-Bit Server VM GraalVM 
CE 20.0.1-dev+9.1 (build 20.0.1+9-jvmci-23.1-b02, mixed mode, sharing)
   
   ### GraalVM version (if different from Java)
   
   20.0.1
   
   ### Kogito version or git rev (or at least Quarkus version if you are using 
Kogito via Quarkus platform BOM)
   
   1.44.1
   
   ### Build tool (ie. output of `mvnw --version` or `gradlew --version`)
   
   Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c) Maven home: 
/opt/apache-maven-3.9.2 Java version: 20.0.1, vendor: GraalVM Community, 
runtime: 
/Library/Java/JavaVirtualMachines/graalvm-community-openjdk-20.0.1+9.1/Contents/Home
 Default locale: en_IN, platform encoding: UTF-8 OS name: "mac os x", version: 
"13.1", arch: "aarch64", family: "mac"
   
   ### Additional information
   
   2 issues
   1. error handling support in di and logging the errors in somecollection for 
debugging
   2. di processing on latest data from runtime.


-- 
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]

Reply via email to