@@ -211,7 +211,7 @@ class Coordinator(labgrid_coordinator_pb2_grpc.CoordinatorServicer):
211
211
def __init__ (self ) -> None :
212
212
self .places : dict [str , Place ] = {}
213
213
self .reservations = {}
214
- self .poll_task = None
214
+ self .poll_tasks = []
215
215
self .save_scheduled = False
216
216
217
217
self .lock = asyncio .Lock ()
@@ -220,35 +220,33 @@ def __init__(self) -> None:
220
220
self .load ()
221
221
222
222
self .loop = asyncio .get_running_loop ()
223
- self .poll_task = self .loop .create_task (self .poll (), name = "coordinator-poll" )
223
+ for name in ["save" , "reacquire" , "schedule" ]:
224
+ step_func = getattr (self , f"_poll_step_{ name } " )
225
+ task = self .loop .create_task (self .poll (step_func ), name = f"coordinator-poll-{ name } " )
226
+ self .poll_tasks .append (task )
224
227
225
- async def _poll_step (self ):
228
+ async def _poll_step_save (self ):
226
229
# save changes
227
- try :
228
- if self .save_scheduled :
229
- with warn_if_slow ("save changes" ):
230
- await self .save ()
231
- except Exception : # pylint: disable=broad-except
232
- traceback .print_exc ()
230
+ if self .save_scheduled :
231
+ with warn_if_slow ("save changes" ):
232
+ await self .save ()
233
+
234
+ async def _poll_step_reacquire (self ):
233
235
# try to re-acquire orphaned resources
234
- try :
235
- async with self .lock :
236
- with warn_if_slow ("reacquire orphaned resources" ):
237
- await self ._reacquire_orphaned_resources ()
238
- except Exception : # pylint: disable=broad-except
239
- traceback .print_exc ()
236
+ async with self .lock :
237
+ with warn_if_slow ("reacquire orphaned resources" ):
238
+ await self ._reacquire_orphaned_resources ()
239
+
240
+ async def _poll_step_schedule (self ):
240
241
# update reservations
241
- try :
242
- with warn_if_slow ("schedule reservations" ):
243
- self .schedule_reservations ()
244
- except Exception : # pylint: disable=broad-except
245
- traceback .print_exc ()
242
+ with warn_if_slow ("schedule reservations" ):
243
+ self .schedule_reservations ()
246
244
247
- async def poll (self ):
245
+ async def poll (self , step_func ):
248
246
while not self .loop .is_closed ():
249
247
try :
250
248
await asyncio .sleep (15.0 )
251
- await self . _poll_step ()
249
+ await step_func ()
252
250
except asyncio .CancelledError :
253
251
break
254
252
except Exception : # pylint: disable=broad-except
0 commit comments