Skip to content

Commit 3ee5a1e

Browse files
authored
Hotfix: Handle EOF Properly (#1557)
* fix: handle EOF properly * chore: version * fix: debug logs * fix: rm eof type
1 parent 1dcb50c commit 3ee5a1e

File tree

4 files changed

+17
-13
lines changed

4 files changed

+17
-13
lines changed

sdks/python/hatchet_sdk/clients/dispatcher/action_listener.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import grpc
99
import grpc.aio
10-
from grpc._cython import cygrpc # type: ignore[attr-defined]
1110
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
1211

1312
from hatchet_sdk.clients.event_ts import ThreadSafeEvent, read_with_interrupt
@@ -267,7 +266,6 @@ async def _generator(self) -> AsyncGenerator[Action | None, None]:
267266
await self.interrupt.wait()
268267

269268
if not t.done():
270-
# print a warning
271269
logger.warning(
272270
"Interrupted read_with_interrupt task of action listener"
273271
)
@@ -277,9 +275,10 @@ async def _generator(self) -> AsyncGenerator[Action | None, None]:
277275

278276
break
279277

280-
assigned_action, _ = t.result()
278+
assigned_action, _, is_eof = t.result()
281279

282-
if assigned_action is cygrpc.EOF:
280+
if is_eof:
281+
logger.debug("Handling EOF in Action Listener")
283282
self.retries = self.retries + 1
284283
break
285284

sdks/python/hatchet_sdk/clients/event_ts.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import grpc.aio
55
from grpc._cython import cygrpc # type: ignore[attr-defined]
66

7+
from hatchet_sdk.logger import logger
8+
79

810
class ThreadSafeEvent(asyncio.Event):
911
"""
@@ -32,30 +34,31 @@ async def read_with_interrupt(
3234
listener: grpc.aio.UnaryStreamCall[TRequest, TResponse],
3335
interrupt: ThreadSafeEvent,
3436
key_generator: Callable[[TResponse], str],
35-
) -> tuple[TResponse, str]: ...
37+
) -> tuple[TResponse, str, bool]: ...
3638

3739

3840
@overload
3941
async def read_with_interrupt(
4042
listener: grpc.aio.UnaryStreamCall[TRequest, TResponse],
4143
interrupt: ThreadSafeEvent,
4244
key_generator: None = None,
43-
) -> tuple[TResponse, None]: ...
45+
) -> tuple[TResponse, None, bool]: ...
4446

4547

4648
async def read_with_interrupt(
4749
listener: grpc.aio.UnaryStreamCall[TRequest, TResponse],
4850
interrupt: ThreadSafeEvent,
4951
key_generator: Callable[[TResponse], str] | None = None,
50-
) -> tuple[TResponse, str | None]:
52+
) -> tuple[TResponse, str | None, bool]:
5153
try:
5254
result = cast(TResponse, await listener.read())
5355

5456
if result is cygrpc.EOF:
55-
raise ValueError("Unexpected EOF")
57+
logger.warning("Received EOF from engine")
58+
return cast(TResponse, None), None, True
5659

5760
key = key_generator(result) if key_generator else None
5861

59-
return result, key
62+
return result, key, False
6063
finally:
6164
interrupt.set()

sdks/python/hatchet_sdk/clients/listeners/pooled_listener.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
import grpc
77
import grpc.aio
8-
from grpc._cython import cygrpc # type: ignore[attr-defined]
98

109
from hatchet_sdk.clients.event_ts import ThreadSafeEvent, read_with_interrupt
1110
from hatchet_sdk.config import ClientConfig
@@ -131,9 +130,12 @@ async def _init_producer(self) -> None:
131130
await asyncio.sleep(DEFAULT_LISTENER_RETRY_INTERVAL)
132131
break
133132

134-
event, key = t.result()
133+
event, key, is_eof = t.result()
135134

136-
if event is cygrpc.EOF:
135+
if is_eof:
136+
logger.debug(
137+
f"Handling EOF in Pooled Listener {self.__class__.__name__}"
138+
)
137139
break
138140

139141
subscriptions = self.to_subscriptions.get(key, [])

sdks/python/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "hatchet-sdk"
3-
version = "1.6.0"
3+
version = "1.6.1"
44
description = ""
55
authors = ["Alexander Belanger <[email protected]>"]
66
readme = "README.md"

0 commit comments

Comments
 (0)