Endurant
TODO: Add description
Migrations
Endurant uses host-application wrapper migrations. In your app, generate a migration
and call Endurant.Migration from up/0 and down/0.
defmodule MyApp.Repo.Migrations.AddEndurant do
use Ecto.Migration
def up do
Endurant.Migration.up(version: 1)
end
def down do
Endurant.Migration.down(version: 1)
end
endWhen Endurant introduces a new migration version, add another host migration:
defmodule MyApp.Repo.Migrations.UpgradeEndurantToV2 do
use Ecto.Migration
def up do
Endurant.Migration.up(version: 2)
end
def down do
Endurant.Migration.down(version: 1)
end
end
Migrated version tracking uses a comment on endurant_executions.
Installation
If available in Hex, the package can be installed
by adding endurant to your list of dependencies in mix.exs:
def deps do
[
{:endurant, "~> 0.1.0"}
]
endTODO
look into SKIP LOCKED
dialyzer
do not run await, task in child process
update version of a runnig workflow
retrinking heartbeat, freezing executor processes
task ..., error_as_failure: true, or {:task_error, reason}/ add a task!
rollbacks (saga)
loglevel
maybe return {:new/cached, result} in tasks, source = task_source("fetch_user") # :executed or :history
is it possible to store any data in an input, not just json
recover_expired_locks, Heavy per-tick workload
task(input, "fetch_user", fn i -> Api.fetch!(i.id) end, retry: [
max_attempts: 5, retryable: fn error_or_reason -> match?(%RuntimeError{}, error_or_reason) end] )
signal_wait_for(1000) stop process after this
add a default "suspense" time to queue settings and to workflow settings
workflow querying/filtering
add propper benchmarking
find a name for waiting processes that are "paused" or "suspended"
query/filter workflows, use temporal system, register custom properties to create indicies
globally handling prefix and repo