Skip to content

Commit 1ceeb66

Browse files
authored
fix(api): failure to create a module instance should be logged and not interrupt hardware controller process (#19010)
# Overview This pull request improves error handling in `AttachedModulesControl.register_modules()` by adding a `try-except` block to ensure that failures during module creation are logged without interrupting the rest of the process. This fixes an issue saw in ABR where connecting a module with a new hardware revision to a robot on an older software, the robot server would hang.
1 parent 2533b1b commit 1ceeb66

File tree

1 file changed

+23
-18
lines changed

1 file changed

+23
-18
lines changed

api/src/opentrons/hardware_control/module_control.py

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -183,24 +183,29 @@ async def register_modules(
183183

184184
# build new mods
185185
for mod in unsorted_mods_at_port:
186-
new_instance = await self.build_module(
187-
port=mod.port,
188-
usb_port=mod.usb_port,
189-
type=modules.MODULE_TYPE_BY_NAME[mod.name],
190-
sim_serial_number=(
191-
mod.serial_number
192-
if isinstance(mod, SimulatingModuleAtPort)
193-
else None
194-
),
195-
sim_model=(
196-
mod.model if isinstance(mod, SimulatingModuleAtPort) else None
197-
),
198-
)
199-
self._available_modules.append(new_instance)
200-
log.info(
201-
f"Module {mod.name} discovered and attached"
202-
f" at port {mod.port}, new_instance: {new_instance}"
203-
)
186+
try:
187+
new_instance = await self.build_module(
188+
port=mod.port,
189+
usb_port=mod.usb_port,
190+
type=modules.MODULE_TYPE_BY_NAME[mod.name],
191+
sim_serial_number=(
192+
mod.serial_number
193+
if isinstance(mod, SimulatingModuleAtPort)
194+
else None
195+
),
196+
sim_model=(
197+
mod.model if isinstance(mod, SimulatingModuleAtPort) else None
198+
),
199+
)
200+
self._available_modules.append(new_instance)
201+
log.info(
202+
f"Module {mod.name} discovered and attached"
203+
f" at port {mod.port}, new_instance: {new_instance}"
204+
)
205+
except Exception as e:
206+
log.exception(
207+
f"Failed to build module {mod.name} at port {mod.port}: {e}"
208+
)
204209
self._available_modules = sorted(
205210
self._available_modules, key=modules.AbstractModule.sort_key
206211
)

0 commit comments

Comments
 (0)