|
@@ -48,28 +48,31 @@ class Panel(UserDict):
|
|
|
return method
|
|
|
|
|
|
|
|
|
-def _find_requests_by_id(ids, requests):
|
|
|
- found, total = 0, len(ids)
|
|
|
- for request in requests:
|
|
|
- if request.id in ids:
|
|
|
- yield request
|
|
|
- found += 1
|
|
|
- if found >= total:
|
|
|
- break
|
|
|
+def _find_requests_by_id(ids,
|
|
|
+ get_request=worker_state.requests.__getitem__):
|
|
|
+ for task_id in ids:
|
|
|
+ try:
|
|
|
+ yield get_request(task_id)
|
|
|
+ except KeyError:
|
|
|
+ pass
|
|
|
+
|
|
|
+
|
|
|
+def _state_of_task(request,
|
|
|
+ is_active=worker_state.active_requests.__contains__,
|
|
|
+ is_reserved=worker_state.reserved_requests.__contains__):
|
|
|
+ if is_active(request):
|
|
|
+ return 'active'
|
|
|
+ elif is_reserved(request):
|
|
|
+ return 'reserved'
|
|
|
+ return 'ready'
|
|
|
|
|
|
|
|
|
@Panel.register
|
|
|
def query_task(state, ids, **kwargs):
|
|
|
- ids = maybe_list(ids)
|
|
|
- return dict({
|
|
|
- req.id: ('reserved', req.info())
|
|
|
- for req in _find_requests_by_id(
|
|
|
- ids, state.tset(worker_state.reserved_requests))
|
|
|
- }, **{
|
|
|
- req.id: ('active', req.info())
|
|
|
- for req in _find_requests_by_id(
|
|
|
- ids, state.tset(worker_state.active_requests))
|
|
|
- })
|
|
|
+ return {
|
|
|
+ req.id: (_state_of_task(req), req.info())
|
|
|
+ for req in _find_requests_by_id(maybe_list(ids))
|
|
|
+ }
|
|
|
|
|
|
|
|
|
@Panel.register
|
|
@@ -83,13 +86,7 @@ def revoke(state, task_id, terminate=False, signal=None, **kwargs):
|
|
|
revoked.update(task_ids)
|
|
|
if terminate:
|
|
|
signum = _signals.signum(signal or TERM_SIGNAME)
|
|
|
- # reserved_requests changes size during iteration
|
|
|
- # so need to consume the items first, then terminate after.
|
|
|
- requests = set(_find_requests_by_id(
|
|
|
- task_ids,
|
|
|
- state.tset(worker_state.reserved_requests),
|
|
|
- ))
|
|
|
- for request in requests:
|
|
|
+ for request in _find_requests_by_id(task_ids):
|
|
|
if request.id not in terminated:
|
|
|
terminated.add(request.id)
|
|
|
logger.info('Terminating %s (%s)', request.id, signum)
|