Skip to content

Commit 5baf94e

Browse files
authored
Add workflow context to signal deserialization error log (#1325)
1 parent 4e71c2e commit 5baf94e

2 files changed

Lines changed: 33 additions & 15 deletions

File tree

temporalio/worker/_workflow_instance.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2316,7 +2316,10 @@ def _process_signal_job(
23162316
)
23172317
except Exception:
23182318
logger.exception(
2319-
f"Failed deserializing signal input for {job.signal_name}, dropping the signal"
2319+
f"Failed deserializing signal input for {job.signal_name}"
2320+
f" on workflow {self._info.workflow_type} with ID {self._info.workflow_id}"
2321+
f" and run ID {self._info.run_id}, dropping the signal",
2322+
extra={"temporal_workflow": self._info._logger_details()},
23202323
)
23212324
return
23222325
input = HandleSignalInput(

tests/worker/test_workflow.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -679,21 +679,36 @@ async def some_signal(self, param: BadSignalParam) -> None:
679679

680680

681681
async def test_workflow_bad_signal_param(client: Client):
682-
async with new_worker(client, BadSignalParamWorkflow) as worker:
683-
handle = await client.start_workflow(
684-
BadSignalParamWorkflow.run,
685-
id=f"workflow-{uuid.uuid4()}",
686-
task_queue=worker.task_queue,
682+
with LogCapturer().logs_captured(
683+
temporalio.worker._workflow_instance.logger
684+
) as capturer:
685+
async with new_worker(client, BadSignalParamWorkflow) as worker:
686+
handle = await client.start_workflow(
687+
BadSignalParamWorkflow.run,
688+
id=f"workflow-{uuid.uuid4()}",
689+
task_queue=worker.task_queue,
690+
)
691+
# Send 4 signals, first and third are bad
692+
await handle.signal("some_signal", "bad")
693+
await handle.signal("some_signal", BadSignalParam(some_str="good"))
694+
await handle.signal("some_signal", 123)
695+
await handle.signal("some_signal", BadSignalParam(some_str="finish"))
696+
assert [
697+
BadSignalParam(some_str="good"),
698+
BadSignalParam(some_str="finish"),
699+
] == await handle.result()
700+
701+
# Check that the log message includes workflow context
702+
record = capturer.find_log("Failed deserializing signal input")
703+
assert record is not None
704+
assert "some_signal" in record.message
705+
assert "BadSignalParamWorkflow" in record.message
706+
assert handle.id in record.message
707+
assert hasattr(record, "temporal_workflow")
708+
assert (
709+
getattr(record, "temporal_workflow")["workflow_type"]
710+
== "BadSignalParamWorkflow"
687711
)
688-
# Send 4 signals, first and third are bad
689-
await handle.signal("some_signal", "bad")
690-
await handle.signal("some_signal", BadSignalParam(some_str="good"))
691-
await handle.signal("some_signal", 123)
692-
await handle.signal("some_signal", BadSignalParam(some_str="finish"))
693-
assert [
694-
BadSignalParam(some_str="good"),
695-
BadSignalParam(some_str="finish"),
696-
] == await handle.result()
697712

698713

699714
@workflow.defn

0 commit comments

Comments
 (0)