Skip to main content

Ordering, concurrency and transactions

Velox serialises steps inside one attempt but can execute several attempts/Flows concurrently. Design both levels explicitly.

Ordering within an attempt

Active steps run in list order. The next step starts only after the current call returns and only while Flow status is successful and not cancelled. Asynchronous work started by a Command Line step can outlive that call when Wait for process is cleared; outbound Transport delivery occurs later in Transport processing.

Sub Actions execute synchronously at their list position. Linked successor Flows execute only after successful completion, in configured link order.

Concurrent attempts

MaxThreadsPerAction defaults to 1. Non-positive values are forced to one when the execution semaphore is created. Manual, scheduled, monitor and relevant Transport worker paths wait for that per-Flow semaphore, with a one-hour wait timeout; a timeout exits without running the Flow.

The action pool removes an in-use Flow instance and returns/frees it after execution, preventing the same object instance being shared concurrently. Different instances/Flows can still compete for database, file, memory and remote-system resources.

REST uses a separate thread path. Although the maximum value is copied into REST manager state, the reviewed REST execution does not wait on the normal per-Flow semaphore. Control REST concurrency upstream and test it separately.

Transaction boundaries

ResourceSuccessFailure or testImportant limit
DB Definition ConnectionsCommit through CommitData(true)Roll back through CommitData(false)A Connection can disable transactions; provider and independently committed work vary.
System configuration database connectionCommitRoll backUsed by applicable runtime/system writes.
Source filesMove to Audit or TransportMove to Error; test does not moveFilesystem operations are not atomic database transactions. Deadlock-cancel path can leave the file.
Command/report/remote script effectsAlready performedNot automatically undoneRequire their own idempotency/recovery.
Outbound TransportWork registered, later deliveredDepends on when failure occursFlow and Transport retries are separate.

Before increasing concurrency, prove that input claiming, output naming, database isolation, script/module state and receiver idempotency remain correct. See performance and file locking.