From 3db8a0f39d7cbd78e34f258caa5522277c7344bb Mon Sep 17 00:00:00 2001 From: Sasha Romijn Date: Tue, 19 Nov 2019 11:53:12 +0000 Subject: [PATCH] Fix issue where queue might not advance correctly while managing unassigned reviews, when some reviewers have a skip count. - Legacy-Id: 17060 --- ietf/group/views.py | 4 ++-- ietf/review/policies.py | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ietf/group/views.py b/ietf/group/views.py index a53baecb6..475dd8215 100644 --- a/ietf/group/views.py +++ b/ietf/group/views.py @@ -1542,13 +1542,13 @@ def manage_review_requests(request, acronym, group_type=None, assignment_status= # of the rotation queue are processed first so that the queue # rotates before any more assignments are processed reviewer_policy = get_reviewer_queue_policy(group) - head_of_rotation = reviewer_policy.default_reviewer_rotation_list()[0] + head_of_rotation = reviewer_policy.default_reviewer_rotation_list_without_skipped()[0] while head_of_rotation in assignments_by_person: for review_req in assignments_by_person[head_of_rotation]: assign_review_request_to_reviewer(request, review_req, review_req.form.cleaned_data["reviewer"],review_req.form.cleaned_data["add_skip"]) reqs_to_assign.remove(review_req) del assignments_by_person[head_of_rotation] - head_of_rotation = reviewer_policy.default_reviewer_rotation_list()[0] + head_of_rotation = reviewer_policy.default_reviewer_rotation_list_without_skipped()[0] for review_req in reqs_to_assign: assign_review_request_to_reviewer(request, review_req, review_req.form.cleaned_data["reviewer"],review_req.form.cleaned_data["add_skip"]) diff --git a/ietf/review/policies.py b/ietf/review/policies.py index 37b6203f4..7a352dd52 100644 --- a/ietf/review/policies.py +++ b/ietf/review/policies.py @@ -57,6 +57,13 @@ class AbstractReviewerQueuePolicy: and should retroactively not have been rotated over. """ raise NotImplementedError # pragma: no cover + + def default_reviewer_rotation_list_without_skipped(self): + """ + Return a list of reviewers (Person objects) in the default reviewer rotation for a policy, + while skipping those with a skip_next>0. + """ + return [r for r in self.default_reviewer_rotation_list() if not self._reviewer_settings_for(r).skip_next] def update_policy_state_for_assignment(self, assignee_person, add_skip=False): """ @@ -78,8 +85,7 @@ class AbstractReviewerQueuePolicy: if not rotation_list: return - rotation_list_without_skip = [r for r in rotation_list if - not self._reviewer_settings_for(r).skip_next] + rotation_list_without_skip = self.default_reviewer_rotation_list_without_skipped() # In order means: assigned to the first person in the rotation list with skip_next=0 # If the assignment is not in order, skip_next and NextReviewerInTeam are not modified. in_order_assignment = rotation_list_without_skip[0] == assignee_person