coinbase / temporal-ruby

Ruby SDK for Temporal
Apache License 2.0
213 stars 81 forks source link

Save signals on first workflow task #268

Closed jeffschoner closed 8 months ago

jeffschoner commented 8 months ago

This fixes #267. See that issue for more details on the bug.

This change makes signals available to code running in the first workflow task by saving any signals received before the first workflow task, then calling any signal handler registered during the first workflow task with these saved values. Because this change would otherwise affect the determinism of all workflows that start workflows with a signal, it adds a new SDK flag to preserve the previous behavior for existing workflow histories.

This is achieved by registering a special signal handler that saves signals during the first workflow task. Any signal handlers registered during the first workflow task will be immediately called with any of these saved signals. After code passes the first workflow task, the handler is removed and behavior returns to normal.