From 8d06ab883edf22d324ecb1864e7001e97914f414 Mon Sep 17 00:00:00 2001 From: musi22 Date: Sun, 25 Oct 2026 23:12:57 +0530 Subject: [PATCH] fix(client): include request_id on TerminateActivityExecutionRequest (#2008) Signed-off-by: musi22 --- temporalio/client/_impl.py | 3 ++- ...est_activity_operator_commands_requests.py | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/temporalio/client/_impl.py b/temporalio/client/_impl.py index 3986f9e82a..87440491a8 100644 --- a/temporalio/client/_impl.py +++ b/temporalio/client/_impl.py @@ -685,8 +685,9 @@ async def terminate_activity(self, input: TerminateActivityInput) -> None: namespace=self._client.namespace, activity_id=input.activity_id, run_id=input.activity_run_id or "", - reason=input.reason or "", identity=self._client.identity, + request_id=str(uuid.uuid4()), + reason=input.reason or "", ), retry=True, metadata=input.rpc_metadata, diff --git a/tests/test_activity_operator_commands_requests.py b/tests/test_activity_operator_commands_requests.py index f71f5566b9..67e9dc78f7 100644 --- a/tests/test_activity_operator_commands_requests.py +++ b/tests/test_activity_operator_commands_requests.py @@ -2,6 +2,7 @@ from __future__ import annotations +import uuid from datetime import timedelta from typing import Any from unittest.mock import AsyncMock, Mock @@ -27,6 +28,10 @@ def __init__(self) -> None: "unpause", temporalio.api.workflowservice.v1.UnpauseActivityExecutionResponse(), ) + self.terminate_activity_execution = self._recorder( + "terminate", + temporalio.api.workflowservice.v1.TerminateActivityExecutionResponse(), + ) self.update_activity_execution_options = self._recorder( "update", temporalio.api.workflowservice.v1.UpdateActivityExecutionOptionsResponse( @@ -201,3 +206,18 @@ async def test_update_options_masks_only_changed_options( assert update.activity_options.start_to_close_timeout.ToTimedelta() == timedelta( seconds=90 ) + + +async def test_terminate_activity_sends_request_id_and_reason( + client: Client, captured: _CapturedService +): + handle = client.get_activity_handle("act-1") + await handle.terminate(reason="term-reason") + + req = captured.requests["terminate"] + assert req.activity_id == "act-1" + assert req.reason == "term-reason" + assert req.identity == "test-identity" + assert req.namespace == "test-namespace" + assert req.request_id + assert uuid.UUID(req.request_id)