[Fix #1286] Non blocking persistence#1288
Conversation
There was a problem hiding this comment.
This will create backward incompatibility on qflow when released, but I guess it is acceptable (we are swithcing to AsyncPersistenceExceutor
There was a problem hiding this comment.
Pull request overview
Implements non-blocking persistence by moving workflow lifecycle listeners to a CompletableFuture-based contract and switching default persistence execution to async.
Changes:
- Introduces
WorkflowExecutionCompletableListenerand adapts existingWorkflowExecutionListenerimplementations via an adapter. - Refactors lifecycle event publishing to return/compose
CompletableFutures rather than fire-and-forget. - Updates persistence executors/writers to use a unified
execute(...)path and defaults toAsyncPersistenceExecutor.
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/WorkflowPersistenceListener.java | Migrates persistence listener callbacks to return CompletableFuture for async persistence writes. |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/WorkflowPersistenceInstance.java | Adjusts async control flow in start() to return a CompletableFuture from a callback. |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/TransactedPersistenceInstanceWriter.java | Uses PersistenceExecutor.execute(...) uniformly (removes start/delete special-casing). |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/SyncPersistenceExecutor.java | Removes synchronous executor implementation. |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/PersistenceExecutor.java | Simplifies executor API by removing startInstance/deleteInstance defaults. |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/DefaultPersistenceInstanceHandlers.java | Defaults persistence execution to AsyncPersistenceExecutor when none provided. |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/AsyncPersistenceExecutor.java | Makes async executor publicly constructible and adds a no-arg constructor. |
| impl/persistence/api/src/main/java/io/serverlessworkflow/impl/persistence/AbstractAsyncPersistenceExecutor.java | Reworks async execution implementation (removes per-instance chaining/close drain). |
| impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowListenerTest.java | Updates tests to use the new completable listener type. |
| impl/core/src/test/java/io/serverlessworkflow/impl/TopPriorityListener.java | Updates test listener to implement WorkflowExecutionCompletableListener. |
| impl/core/src/test/java/io/serverlessworkflow/impl/MediumPriorityListener.java | Updates test listener to implement WorkflowExecutionCompletableListener. |
| impl/core/src/test/java/io/serverlessworkflow/impl/LowestPriorityListener.java | Updates test listener to implement WorkflowExecutionCompletableListener. |
| impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/WorkflowExecutionListenerAdapter.java | Adds adapter from legacy listener to completable listener. |
| impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/WorkflowExecutionCompletableListener.java | Adds new async listener interface with default completed futures. |
| impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/LifecycleEventsUtils.java | Refactors event publishing to return a combined CompletableFuture. |
| impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java | Composes task lifecycle events into the task execution future chain. |
| impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowMutableInstance.java | Composes workflow start/completion events into the workflow execution future chain. |
| impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java | Stores completable listeners, adapts legacy listeners loaded via ServiceLoader, updates builder APIs. |
| impl/core/src/main/java/io/serverlessworkflow/impl/SchedulerListener.java | Migrates scheduler listener to completable listener callback shape. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/LifecycleEventsUtils.java
Show resolved
Hide resolved
...ore/src/main/java/io/serverlessworkflow/impl/lifecycle/WorkflowExecutionListenerAdapter.java
Outdated
Show resolved
Hide resolved
...i/src/main/java/io/serverlessworkflow/impl/persistence/AbstractAsyncPersistenceExecutor.java
Show resolved
Hide resolved
impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowMutableInstance.java
Show resolved
Hide resolved
impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java
Show resolved
Hide resolved
impl/core/src/main/java/io/serverlessworkflow/impl/SchedulerListener.java
Outdated
Show resolved
Hide resolved
impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/LifecycleEventsUtils.java
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 19 out of 19 changed files in this pull request and generated no new comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: fjtirado <ftirados@redhat.com> Update impl/core/src/main/java/io/serverlessworkflow/impl/SchedulerListener.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Update impl/core/src/main/java/io/serverlessworkflow/impl/lifecycle/WorkflowExecutionListenerAdapter.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Fix #1286