Releases

v0.6.5 5/28/2021

🪲 Fixes

  • fix a bug appearing when for some java distribution due to bad detection of proxy classes

🚨 Breaking changes

  • internal schema has changed - you need to use a new Pulsar namespace

🔬 Improvements

  • upgrade dependencies, including Kotlin 1.5

v0.6.4 5/19/2021

🚀 New Features

  • [client, task, workflow] an @Name annotation allows you to decouple the name of tasks and workflows from their underlying implementation name
  • [task] tags are now accessible from the task context

v0.6.3 5/11/2021

🔬 Improvements

  • better expose errors during task or workflow initialization in workers

v0.6.2 5/11/2021

🔬 Improvements

  • use new s01.oss.sonatype.org server for publishing
  • infinitic-client module is now as an api-type dependency in infinitic-pulsar module (users do not need anymore to import infinitic-client)

V0.6.1 5/10/2021

🚨 Breaking changes

  • io.infinitic.pulsar.InfiniticClient renamed to io.infinitic.pulsar.PulsarInfiniticClient
  • io.infinitic.pulsar.InfiniticAdmin renamed to io.infinitic.pulsar.PulsarInfiniticAdmin
  • io.infinitic.pulsar.InfiniticWorker renamed to io.infinitic.pulsar.PulsarInfiniticWorker
  • io.infinitic.clientsmodule renamed to io.infinitic.client

🪲 Fixes

  • fix a bug appearing when the method used in a task or workflow was defined in a parent interface

🔬 Improvements

  • merge Pulsar and inMemory tests
  • add fromFileand fromResource methods in configs
  • add helpers asyncTask and asyncWorkflow in clients

V0.6.0 5/5/2021

🚀 New Features

  • [admin] new method on InfiniticAdmin: printTopicStats()
  • [admin] new properties on InfiniticAdmin: tasks, workflows, topics
  • [workflow] add id, meta and tags to workflow context
  • [task] add client, workflow's Id and workflow's name to task context
  • [client, task, workflow] errors and cancelations management
  • [client] add simplified syntax: cancelTask / cancelWorkflow / retryTrask / retryWorkflow
  • [client] add new APIs: getTaskIds, getWorkflowIds, await()
  • [client] now send messages using an async method
  • [tags, tasks, workflows] all Pulsar messages are now sent in parallel, before any state storage

🚨 Breaking changes

  • implementation of tasks must now inherit from a base class Task
  • underlying messages structure: you should setup a new Pulsar namespace
  • workers configurations have changed (engines, executors and tag engines are now gathered) - see the documentation

🪲 Fixes

  • fix a bug in CaffeineKeySetCache + tests

🔬 Improvements

  • end-to-end tests in-memory and with Pulsar
  • delays are now managed in new externals shared topics
  • add a default ackTimeout settings (60s) to Pulsar Consumers
  • topics topology is now defined per task and per workflow
  • remove unused workflow engine messages
  • remove unused task engine messages
  • use new scope (inherited from a newCachedThreadPool) for in-memory implementation
  • all engines now give priority to events
  • make sure to propagate errors and close PulsarClient in case of uncaught Exceptions in InfiniticWorker
  • add 10 min timeout for gradle build github action
  • improve warning messages when no task or workflows registered in InMemory client

V0.5.0 4/6/2021

🚀 New Feature

  • set of tags (String) can now be added when dispatching tasks or workflows
  • running tasks or workflows can be targeted using a tag
  • async call from the client now returns a Deferred. You can use this deferred to wait for completion or get the id.
  • stubs can be used after dispatching for operations such as cancel or sending events

🪲 Fixes

  • pulsar can now be used with ssl
  • Redis can now be used with ssl
  • remove unused constraint to define tasks with taskEngine and workflows with workflowEngine

🔬 Improvements

  • tasks and workflows ids are now UUID instead of String
  • tasks and workflows meta is now String-ByteArray
  • rename "monitoring" to "metrics."
  • new default for caching is no-cache
  • put config stuff in new module infinitic-config
  • upgrade Pulsar dependency to 2.7.1
  • refactoring of storage
  • refactoring of inMemory / Pulsar outputs

V0.4.3 3/21/2021

🚀 New Feature

  • Channel filtering! A workflow can filter itself which events it wants to receive: by event type or by event attributes using a JSONPath specification

🔬 Changes

  • Avro classes are now serialized internally in JSON like other user-provided data to be able to use them as events and use JSONPath on them

V0.4.2 3/14/2021

🚀 New Feature

  • add isCompleted(), isCanceled(), isOngoing() methods on Deferred

🪲 Fixes

  • fix bug in engine due to worklowTaskIndex mutability. Tests added accordingly
  • fix "transport: inMemory" option

🔬 Improvements

  • makes worklowTaskIndex and other int and long classes immutable

V0.4.1 3/11/2021

🚀 New Feature

  • For development purposes, a "transport: inMemory" option can be added to the configuration file (infinitic.yml): this option triggers a full in-memory instantiation of engines and workers. Developers can use this option to work on workflows without having to install Pulsar. DO NOT USE IT IN PRODUCTION
  • an exception is now thrown when a channel is used synchronously with a workflow unknown or already terminated (canceled or completed). An asynchronous syntax is available.

🪲 Fixes

  • Fix a bug in the workflow engine that occurred with async function

🔬 Improvements

  • added an InfiniticClient into infinitic-inMemory module
  • fix prop4 test in workflow-tests

V0.4.0 3/6/2021

🚀 New Feature

  • fix #55: introduce Channels! Channels introduce a way to communicate to a running workflow from "outside". A typical use of Channels is for example to pause a workflow, waiting for the result of a human action.

😤 Breaking changes

  • Internal messages format have been updated - please use a new Pulsar namespace for Infinitic

🔬 Improvements

  • upgrade Kotlin to 1.4.31 and coroutines to 1.4.3
  • add sfl4j-simple to tests
  • move workflowTask in a new module infinitic-workflow-task
  • gather user exceptions in a unique file in io.infinitic.exceptions
  • remove Jcenter repository

V0.3.0 3/1/2021

🚀 New features

  • add timer feature in workflows (Fix #54): you can now suspend a workflow execution for a duration or up to a certain instant. Timers are non-blocking. Apply the await() method to make them blocking.
  • You can now retrieve the id of a task or a workflow from its Deferred.

🔬 Improvements

  • Logical combinations of Deferred are more efficient (undocumented feature yet)

V0.2.1 2/16/2021

🚀 New features

  • add an in-memory cache of states storage (based on caffeine per default) (Fix #62)

😤 Breaking Changes

  • syntax InfiniticAdmin::init changed to InfiniticAdmin::setupPulsar

V0.2.0 2/8/2021

🚀 New features

  • clients can now get the result of a task or a workflow synchronously (Fix #72)

😤 Breaking Changes

  • within workflows, the result() method on Deferred has been removed. Now the await() method returns the output
  • workflows are not required anymore to use a Workflow interface. AbstractWorkflow has been renamed to Workflow
  • InfiniticClient: cancel and retry syntax have changed - a stub dedicated to an existing instance is now used
  • InfiniticWorker and InfiniticClient: fromFile method has been renamed to fromConfigFile

🔬 Improvements

  • stubs/proxies are now thread-safe
  • main branch is now main instead of master
  • added a dedicated error message when using suspended functions for tasks or workflows
  • Fix #53: worker name is checked at launch

V0.1.0 1/29/2021

🚀 First Release Features 🚀

Pulsar Setup

Provides InfiniticAdmin to setup Pulsar:

  • create an infinitic Pulsar tenant
  • create a dev namespace with relevant options such as deduplication enabled, partitioned topics, schema enforced, and retention policies.

Infinitic Client

Provides InfiniticClient to:

  • dispatch task and workflow
  • cancel task and workflows

Infinitic Workers

Infinitic provides a worker that can have 4 different roles, depending on its configuration:

  • task executor
  • workflow executor
  • task engine
  • workflow engine

Workflows capabilities

  • dispatch task and child-workflow asynchronously
  • on task and child-workflow dispatched asynchronously
    • get status
    • wait for completion
    • wait for completion and get the result
  • dispatch task and child-workflow synchronously
  • dispatch asynchronously a lambda (describing a parallel branch)