Infinitic Versions Save

Infinitic is a scalable workflow engine for distributed services. It shines particularly by making complex orchestration simple. It can be used to reliably orchestrate microservices, manage distributed transactions, operates data pipelines, builds user-facing automation, etc.

v0.13.2

3 days ago

🪲 Bug fixes

  • Fix #227

Full Changelog: https://github.com/infiniticio/infinitic/compare/v0.13.1...v0.13.2

v0.13.1

3 weeks ago

🚨 Breaking changes

  • The new default setting for cache is no cache
  • Workflow and Service names are now escaped in topic's name - it's a breaking change only in the unlikely situation where you have special characters in those names

🔬 Improvements

  • Pulsar version is now 3.0.4 (from 2.11.2)
  • Workflow Tasks are processed on a key-shared subscription. This allows new workflow versions to be deployed continuously.
  • Improve test coverage for tags
  • Improve test coverage for infinitic-transport-pulsar module
  • Client's topics are now deleted when clients are interrupted.
  • Client's topics are not recreated by producers if already deleted
  • Bump version of dependencies:
    • CloudEvents (2.5.0 to 3.0.0)
    • Jackson (2.15.3 to 2.17.0)
    • java-uuid-generator (4.3.0 to 5.0.0)
    • Kotest (5.8.0 to 5.8.1)
    • TestContainers (1.19.5 to 1.19.7)
    • Mockk (1.13.8 to 1.13.10).
    • commons-compress (1.25.0 to 1.26.1)

🪲 Bug fixes

  • Fix backward compatibility with 0.12.3 (in 0.13.0, some messages were wrongly discarded, leading to stuck workflows)
  • Fix a bug introduced in 0.13.0 that led to the possible creation of multiple workflow instance with the same customId tag
  • "none" cache setting now correctly means no cache, previously if was the default cache

Full Changelog: https://github.com/infiniticio/infinitic/compare/v0.13.0...v0.13.1

v0.13.0

2 months ago

DO NOT UPGRADE

This version includes a backward compatibility fixed in version 0.13.1. We recommend upgrading directly to version 0.13.1 from 0.12.3 or below.

🚀 New features

  • CloudEvents (beta): Infinitic now expose its events in CloudEvents json format. This allow users to build their own dashboards, logs, or even add hooks to some specific events.

    Examples of events exposed are:

    • for methods of workflows: startMethod, cancelMethod, methodCanceled, methodcompleted, methodFailed, methodTimedOut
    • for tasks within workflows: taskDispatched, taskCompleted, taskFailed,taskCanceled, taskTimedOut
    • for workflows within workflows: remoteMethodDispatched,remoteMethodCompleted,remoteMethodFailed,remoteMethodCanceled,remoteMethodTimedOut.
    • for the workflow executor itself (also called WorkflowTask) executorDispatched, executorCompleted, executorFailed

    Each event is accompanied by relevant data, such as the error details for a taskFailed event or the arguments for a remoteMethodDispatched event.

    This feature is currently in beta and may be refined based on user feedback.

  • Delegated Tasks: In certain cases, tasks cannot be processed directly by a worker, and instead, the task invokes another system for processing, typically through an HTTP call. If the external system can process the task synchronously and return the output (or report a failure), the process works smoothly. However, if the external system cannot provide a synchronous response, the situation becomes ambiguous, leaving Infinitic without a clear indication of whether the task has been completed or failed, nor an ability to retrieve the result. Starting with version 0.13.0, Infinitic introduces a "delegated task" feature. This feature, enabled through an annotation on the task, informs Infinitic that the method's completion does not signify the task's completion and that it should await asynchronous notification of the task's outcome. To support this functionality, a new completeDelegatedTask method has been added to the InfiniticClient.

  • InfiniticWorker now offers new methods that allow for the programmatic registration of services and workflows, bypassing the need for configuration files. While initially used for internal testing, this feature can also be beneficial in scenarios where using configuration files is impractical.

🚨 Breaking changes

  • The context property of the Task singleton, which was accessible during task execution, has been removed due to its redundancy with other properties.

  • In workers,

    • the method registerService has been replaced by 2 methods registerServiceExecutorand registerServiceTagEngine.
    • the method registerWorkflow has been replaced by 3 methods registerWorkflowExecutor, registerWorkflowTagEngine, and registerWorkflowStateEngine.
  • The following libraries are no longer exposed by Infinitic. If you were using them, you must now add them to the dependencies of your project:

    • org.jetbrains.kotlinx:kotlinx-serialization-json
    • com.jayway.jsonpath:json-path
    • com.sksamuel.hoplite:hoplite-core

🔬 Improvements

  • Infinitic has been updated to use UUID version 7. These are sortable UUIDs that include a timestamp, which is expected to enhance performance when used as primary keys in databases.
  • Idempotency: In scenarios where hardware or network issues occur, there's a possibility that the same tasks may be processed multiple times. Ultimately, it falls upon the user to ensure tasks are designed to be idempotent as required. Starting from version 0.13.0, the taskId can be reliably used as an idempotent key. This is because Infinitic will generate the same value for taskId, even if the task creation process is executed repeatedly.
  • Performance Improvement: Prior to version 0.13.0, initiating a workflow involved sending a message to the workflow engine, which would then create an entry to store its state in the database. Following this, it would send another message to commence the workflow execution in order to identify and dispatch the first task. This task information would be relayed back to the engine for dispatch. The drawback of this approach was evident during surges in workflow initiation (for example, 1 million starts), where Infinitic had to sequentially store 1 million state entries before beginning to process the first task. This could significantly delay the start of task processing in practical scenarios. Since the release of version 0.13.0, the execution process has been optimized. Now, the first task is processed immediately upon dispatch by all available workers, substantially reducing the "time to first execution."
  • Worker Graceful Shutdown: Infinitic is designed to ensure no messages are lost and that workflow executions continue under any circumstances. However, prior to version 0.13.0, shutting down a worker could result in a significant number of duplicated messages or actions. This was because the worker could close while still sending multiple messages. With the introduction of version 0.13.0, workers now attempt to complete any ongoing executions before shutting down, with a default grace period of 30 seconds. This duration can be adjusted using the new shutdownGracePeriodInSeconds setting in the worker configuration.
  • Worker Quicker Start: Upon startup, a worker verifies the existence of the tenant, namespace, and necessary topics for the services and workflows it utilizes, creating them if necessary. Previously, this setup was performed sequentially. Now, it is executed in parallel, significantly reducing startup time, especially in scenarios where a worker is responsible for managing a large number of tasks or workflows.

🪲 Bug fixes

  • Fix false warning about topics being partitioned
  • Fixed the behavior of getSecondsBeforeRetry, which defines the task retry strategy. When the value is less than or equal to 0, retries will now occur immediately. Previously, no retry would be attempted in this scenario.
  • If the methodId is not specified when using CompleteTimers client method, all timers of the workflow will now be completed. Previously, only the timers on the main method were completed in the absence of a specified methodId.

v0.12.3

4 months ago

🚀 New features in worker's configuration file

  • A new configuration option maxPoolSize has been introduced to the MySQL storage configuration. This option allows you to specify the maximum number of connections in the connection pool.
  • The tagEngine setting can now be configured under serviceDefault.
  • The tagEngine and workflowEngine settings can now be configured under workflowDefault.

🚨 Breaking changes

  • The entries service and workflow in the worker configuration, which were used to establish default values for services and workflows, have been renamed. The updated names are serviceDefault and workflowDefault, respectively.

🔬 Improvements

  • Not being able to check tenant / namespace does not trigger an error anymore.

v0.12.2

4 months ago

🔬 Improvements

  • Restore config files as data classes instead of interfaces
  • Restore fromConfig method for clients and workers
  • Improve worker logging

Full Changelog: https://github.com/infiniticio/infinitic/compare/v0.12.1...v0.12.2

v0.12.1

5 months ago

🚀 New features

  • WithTimeout interfaces on Workflows interfaces can now be used to define global timeouts

🪲 Bug fixes

  • Fix Json Serialization of WorkflowTask parameters and return value for previous versions
  • Fix GetIds on client for inMemory implementation

🔬 Improvements

  • WorkflowTask parameters and return value are now serialized using avro with schema fingerprint - this will improve future backward compatibilities

Full Changelog: https://github.com/infiniticio/infinitic/compare/v0.12.0...v0.12.1

v0.12.0

5 months ago

🚀 New features

  • @ TimeOut annotations on Services and Workflows interfaces can now be used to define global timeouts (including message transportation and retries) increasing workflow reliability - fix #74 & #198
  • Pulsar tenant, namespace and topics are created on-the-fly when needed. ("client-response" topics are not created systematically anymore)
  • We now check that services and workflows implementation defined in configuration are actually an implementation of the provided name - fix #200
  • A subscription is now automatically created to DLQ to avoid losing the messages
  • The workflow engine is now aware of messages sent to Dead Letter Queue

🔬 Improvements

  • Refactor of Transport (Pulsar and InMemory implementation)
  • End-to-end tests are now done directly on Pulsar (when Docker is available)
  • Additional backward compatibility tests
  • Improved logging
  • Throwable are not caught anymore anywhere
  • Use io.github.oshai:kotlin-logging-jvm for Logging
  • Fixed https://github.com/infiniticio/infinitic/security/dependabot/33

Full Changelog: https://github.com/infiniticio/infinitic/compare/v0.11.7...v0.12.0

v0.11.7

6 months ago

🔬 Improvements

  • Bump to gradle 8.4 and use jvm toolchain 17
  • Update to kotlin 1.9.20
  • Update CI to jvm 17 and separate build, test and lint
  • Bump several libraries
  • Plugin replace ktfmt with Spotless (with ktfmt) for better integration
  • use testContainers for testing Redis

v0.11.6

11 months ago

🪲 Bug Fixes

fix #184

🚀 New features

With the help of @cyrilStern, the workflows' state can now be stored in a compressed format

🔬 Improvements

Bump dependencies version:

  • com.ncorti.ktfmt.gradle from 0.11.0 to 0.12.0
  • mysql:mysql-connector-java from 8.0.32 to 8.0.33
  • org.testcontainers:mysql from 1.17.6 to 1.18.3

v0.11.5

11 months ago

🔬 Improvements

Bumps dependencies version:

  • kotlinx-coroutines from 1.6.4 to 1.7.1
  • caffeine from 3.1.3 to 3.1.6
  • kotlinx-serialization-json from 1.5.0-RC to 1.5.1
  • json-path from 2.7.0 to 2.8.0
  • jackson from 2.14.2 to 2.15.2
  • kotest from 5.5.5 to 5.6.2
  • mockk from 1.13.4 to 1.13.5
  • avro4k from 1.6.0 to 1.7.0
  • hoplite from 2.7.1 to 2.7.4
  • pulsar from 2.11.0 to 2.11.1
  • kweb from 1.3.7 to 1.4.0
  • slf4j from 2.0.6 to 2.0.7
  • kotlin-logging from 3.0.0 to 3.0.5

@Enach: Improve MySQL table structure with an additional index on KeySet