diff --git a/labgrid/remote/exporter.py b/labgrid/remote/exporter.py index 020358d89..88a434a25 100755 --- a/labgrid/remote/exporter.py +++ b/labgrid/remote/exporter.py @@ -36,6 +36,11 @@ class ExporterError(Exception): class BrokenResourceError(ExporterError): pass +class UnknownResourceError(ExporterError): + pass + +class InvalidResourceRequestError(ExporterError): + pass def log_subprocess_kernel_stack(logger, child): if child.poll() is not None: # nothing to check if no longer running @@ -889,7 +894,7 @@ async def message_pump(self): out_message.set_acquired_request.resource_name, ) success = True - except BrokenResourceError as e: + except BrokenResourceError, InvalidResourceRequestError, UnknownResourceError as e: reason = e.args[0] finally: in_message = labgrid_coordinator_pb2.ExporterInMessage() @@ -924,8 +929,10 @@ async def message_pump(self): async def acquire(self, group_name, resource_name, place_name): resource = self.groups.get(group_name, {}).get(resource_name) if resource is None: - logging.error("acquire request for unknown resource %s/%s by %s", group_name, resource_name, place_name) - return + raise UnknownResourceError(f"acquire request for unknown resource {group_name}/{resource_name} by {place_name}") + + if resource.acquired: + raise InvalidResourceRequestError(f"Resource {group_name}/{resource_name} is already acquired by {resource.acquired}") try: resource.acquire(place_name) @@ -935,8 +942,11 @@ async def acquire(self, group_name, resource_name, place_name): async def release(self, group_name, resource_name): resource = self.groups.get(group_name, {}).get(resource_name) if resource is None: - logging.error("release request for unknown resource %s/%s", group_name, resource_name) - return + logging.error() + raise UnknownResourceError(f"release request for unknown resource {group_name}/{resource_name}") + + if not resource.acquired: + raise InvalidResourceRequestError(f"Resource {group_name}/{resource_name} is not acquired") try: resource.release()