Skip to content

Commit 382548b

Browse files
committed
addressing comments
Signed-off-by: Tim Li <ltim@uber.com>
1 parent 319f689 commit 382548b

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

cadence/_internal/activity/_heartbeat.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,6 @@ async def send_heartbeat(self, *details: Any) -> None:
3737
identity=self._identity,
3838
)
3939
)
40+
self._previous_details = payload
4041
except Exception:
4142
_logger.warning("Heartbeat failed", exc_info=True)

cadence/data_converter.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ def from_data(
3030
if not payload.data:
3131
return DefaultDataConverter._convert_into([], type_hints)
3232

33+
if not type_hints:
34+
type_hints = [None]
35+
3336
payload_str = payload.data.decode()
3437

3538
return self._decode_whitespace_delimited(payload_str, type_hints)
@@ -39,7 +42,7 @@ def _decode_whitespace_delimited(
3942
) -> List[Any]:
4043
results: List[Any] = []
4144
start, end = 0, len(payload)
42-
while start < end and (not type_hints or len(results) < len(type_hints)):
45+
while start < end and len(results) < len(type_hints):
4346
remaining = payload[start:end]
4447
(value, value_end) = self._decoder.raw_decode(remaining)
4548
start += value_end + 1
@@ -51,8 +54,6 @@ def _decode_whitespace_delimited(
5154
def _convert_into(
5255
values: List[Any], type_hints: Sequence[Type | None]
5356
) -> List[Any]:
54-
if not type_hints:
55-
return list(values)
5657
results: List[Any] = []
5758
for i, type_hint in enumerate(type_hints):
5859
if not type_hint or type_hint is Any:

tests/cadence/_internal/activity/test_heartbeat.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,30 @@ async def test_heartbeat_no_details(sender, worker_stub):
6767
call = worker_stub.RecordActivityTaskHeartbeat.call_args[0][0]
6868
assert call.task_token == b"task_token"
6969
assert call.identity == "test-identity"
70+
71+
72+
async def test_heartbeat_updates_previous_details(sender, worker_stub):
73+
await sender.send_heartbeat("step1", 10)
74+
75+
details = sender.get_details(str, int)
76+
assert details == ["step1", 10]
77+
78+
79+
async def test_heartbeat_details_not_updated_on_failure(
80+
worker_stub, data_converter,
81+
):
82+
worker_stub.RecordActivityTaskHeartbeat = AsyncMock(
83+
side_effect=Exception("rpc error")
84+
)
85+
sender = _HeartbeatSender(
86+
worker_stub=worker_stub,
87+
data_converter=data_converter,
88+
task_token=b"task_token",
89+
identity="test-identity",
90+
previous_details=Payload(data=b'"old"'),
91+
)
92+
93+
await sender.send_heartbeat("new_value")
94+
95+
details = sender.get_details(str)
96+
assert details == ["old"]

0 commit comments

Comments
 (0)