@@ -506,6 +506,18 @@ def _get_metadata_for_alarm(
506506 metadata ["scan_number" ] = msg .scan_number
507507 return metadata
508508
509+ def _ensure_request_registered (
510+ self , instruction : messages .DeviceInstructionMessage | None
511+ ) -> None :
512+ """Register a placeholder request so early failures can still resolve."""
513+ if instruction is None :
514+ return
515+ instr_id = instruction .metadata .get ("device_instr_id" )
516+ if instr_id is None :
517+ return
518+ if self .requests_handler .get_request (instr_id ) is None :
519+ self .requests_handler .add_request (instruction , num_status_objects = 0 )
520+
509521 def handle_device_instructions (self , msg : messages .DeviceInstructionMessage ) -> None :
510522 """Parse a device instruction message and handle the requested action. Action
511523 types are set, read, rpc, kickoff or trigger.
@@ -555,6 +567,7 @@ def handle_device_instructions(self, msg: messages.DeviceInstructionMessage) ->
555567 exception_type = limit_error .__class__ .__name__ ,
556568 device = self .get_device_from_exception (limit_error ),
557569 )
570+ self ._ensure_request_registered (instructions )
558571 self .requests_handler .set_finished (
559572 instructions .metadata ["device_instr_id" ], success = False , error_info = error_info
560573 )
@@ -569,8 +582,9 @@ def handle_device_instructions(self, msg: messages.DeviceInstructionMessage) ->
569582 exception_type = exc .__class__ .__name__ ,
570583 device = self .get_device_from_exception (exc ),
571584 )
585+ self ._ensure_request_registered (instructions )
572586 if action == "rpc" :
573- self .rpc_handler ._send_rpc_exception (exc , instructions )
587+ self .rpc_handler .send_rpc_exception (exc , instructions )
574588 else :
575589 logger .error (content )
576590 self .requests_handler .set_finished (
0 commit comments