def update_request_states_for_window_expiration():
'''Update the state of all requests and user_requests to WINDOW_EXPIRED if their last window has passed'''
now = timezone.now()
states_changed = False
for user_request in UserRequest.objects.exclude(state__in=TERMINAL_STATES):
request_states_changed = False
for request in user_request.requests.filter(state='PENDING').prefetch_related('windows'):
if request.max_window_time < now:
logger.info('Expiring request %s', request.id, extra={'tags': {'request_num': request.id}})
with transaction.atomic():
req = Request.objects.select_for_update().get(pk=request.id)
if req.state == 'PENDING':
req.state = 'WINDOW_EXPIRED'
states_changed = True
request_states_changed = True
req.save()
if request_states_changed:
update_user_request_state(user_request)
return states_changed
评论列表
文章目录