Allows signals to be processed within the first workflow task.
IMPORTANT: This change is backward compatible, but workflows started on this version cannot run on earlier versions. If you roll back, you will see workflow task failures mentioning an unknown SDK flag. This will prevent those workflows from making progress until your code is rolled forward again. If you'd like to roll this out more gradually, you can,
- Set the
no_signals_in_first_task
configuration option totrue
- Deploy your worker
- Wait until you are certain you won't need to roll back
- Remove the configuration option, which will default it to
false
- Deploy your worker
This introduces signal first ordering. See coinbase#258 for details on why this is necessary for correct handling of signals.
**IMPORTANT: ** This feature requires Temporal server 1.20.0 or newer. If you are running an older
version of the server, you must either upgrade to at least this version, or you can set the
.legacy_signals
configuration option to true until you can upgrade.
If you do not have existing workflows with signals running or are standing up a worker service for the first time, you can ignore all the below instructions.
If you have any workflows with signals running during a deployment and run more than one worker process, you must follow these rollout steps to avoid non-determinism errors:
- Set
.legacy_signals
inTemporal::Configuration
to true - Deploy your worker
- Remove the
.legacy_signals
setting or set it tofalse
- Deploy your worker
These steps ensure any workflow that executes in signals first mode will continue to be executed in this order on replay. If you don't follow these steps, you may see failed workflow tasks, which in some cases could result in unrecoverable history corruption.