Skip to content

Commit 079ced5

Browse files
committed
Make handle_response more resilient to errors
1 parent bdc9dd6 commit 079ced5

1 file changed

Lines changed: 19 additions & 6 deletions

File tree

receptor/connection.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,24 @@ async def handle_message(self, msg):
6868
if next_hop is None:
6969
await outer_env.deserialize_inner(self.receptor)
7070
if outer_env.inner_obj.message_type == 'directive':
71-
namespace, _ = outer_env.inner_obj.directive.split(':', 1)
72-
if namespace == RECEPTOR_DIRECTIVE_NAMESPACE:
73-
await directive.control(self.receptor.router, outer_env.inner_obj)
74-
else:
75-
# other namespace/work directives
76-
await self.receptor.work_manager.handle(outer_env.inner_obj)
71+
try:
72+
namespace, _ = outer_env.inner_obj.directive.split(':', 1)
73+
if namespace == RECEPTOR_DIRECTIVE_NAMESPACE:
74+
await directive.control(self.receptor.router, outer_env.inner_obj)
75+
else:
76+
# other namespace/work directives
77+
await self.receptor.work_manager.handle(outer_env.inner_obj)
78+
except Exception as e:
79+
err_resp = outer_env.inner_obj.make_response(
80+
receptor=self.receptor,
81+
recipient=outer_env.inner_obj.sender,
82+
payload=str(e),
83+
in_response_to=outer_env.inner_obj.message_id,
84+
serial=outer_env.inner_obj.serial + 1,
85+
ttl=15,
86+
code=1,
87+
)
88+
await self.receptor.router.send(err_resp)
7789
elif outer_env.inner_obj.message_type == 'response':
7890
in_response_to = outer_env.inner_obj.in_response_to
7991
if in_response_to in self.receptor.router.response_registry:
@@ -87,3 +99,4 @@ async def handle_message(self, msg):
8799
f'Unknown message type: {outer_env.inner_obj.message_type}')
88100
else:
89101
await self.receptor.router.forward(outer_env, next_hop)
102+

0 commit comments

Comments
 (0)