Skip to content

Commit 28cab27

Browse files
Emantorjluebbe
authored andcommitted
remote/coordinator: fail acquire for orphaned
Check if a place acquire request tries to lock a resource that is marked as orphaned. This means we no longer need to reacquire orphaned resource before trying to acquire a places resources since we now refuse to acquire the resources. This avoids long delays on aquire calls if the exporter responsible for an (unrelated) orphaned resource doesn't process commands quickly. Signed-off-by: Rouven Czerwinski <[email protected]>
1 parent c609d2d commit 28cab27

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

labgrid/remote/coordinator.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,14 @@ async def _acquire_resources(self, place, resources):
638638
if resource.acquired:
639639
return False
640640

641+
for otherplace in self.places.values():
642+
for oldres in otherplace.acquired_resources:
643+
if resource.path == oldres.path:
644+
logging.info(
645+
"Conflicting orphaned resource %s for acquire request for place %s", oldres, place.name
646+
)
647+
return False
648+
641649
# acquire resources
642650
acquired = []
643651
try:
@@ -755,9 +763,6 @@ async def AcquirePlace(self, request, context):
755763
if not res.owner == username:
756764
await context.abort(grpc.StatusCode.PERMISSION_DENIED, f"Place {name} was not reserved for {username}")
757765

758-
# First try to reacquire orphaned resources to avoid conflicts.
759-
await self._reacquire_orphaned_resources()
760-
761766
# FIXME use the session object instead? or something else which
762767
# survives disconnecting clients?
763768
place.acquired = username

0 commit comments

Comments
 (0)