flows: fix two stages being removed when reevaluate_marker was enabled

This commit is contained in:
Jens Langhammer 2020-09-26 14:13:10 +02:00
parent 2be6cd70d9
commit 7e9d7e5198
2 changed files with 4 additions and 10 deletions

View File

@ -46,24 +46,22 @@ class FlowPlan:
self.stages.append(stage) self.stages.append(stage)
self.markers.append(marker or StageMarker()) self.markers.append(marker or StageMarker())
def next(self) -> Optional[Stage]: def next(self, offset = 0) -> Optional[Stage]:
"""Return next pending stage from the bottom of the list""" """Return next pending stage from the bottom of the list"""
if not self.has_stages: if not self.has_stages:
return None return None
stage = self.stages[0] stage = self.stages[offset]
marker = self.markers[0] marker = self.markers[offset]
if marker.__class__ is not StageMarker: if marker.__class__ is not StageMarker:
LOGGER.debug("f(plan_inst): stage has marker", stage=stage, marker=marker) LOGGER.debug("f(plan_inst): stage has marker", stage=stage, marker=marker)
marked_stage = marker.process(self, stage) marked_stage = marker.process(self, stage)
if not marked_stage: if not marked_stage:
LOGGER.debug("f(plan_inst): marker returned none, next stage", stage=stage) LOGGER.debug("f(plan_inst): marker returned none, next stage", stage=stage)
self.stages.remove(stage)
self.markers.remove(marker)
if not self.has_stages: if not self.has_stages:
return None return None
# pylint: disable=not-callable # pylint: disable=not-callable
return self.next() return self.next(offset + 1)
return marked_stage return marked_stage
def pop(self): def pop(self):

View File

@ -157,10 +157,6 @@ class FlowExecutorView(View):
stage_class=class_to_path(self.current_stage_view.__class__), stage_class=class_to_path(self.current_stage_view.__class__),
flow_slug=self.flow.slug, flow_slug=self.flow.slug,
) )
# We call plan.next here to check for re-evaluate markers
# this is important so we can save the result
# and we don't have to re-evaluate the policies each request
self.plan.next()
self.plan.pop() self.plan.pop()
self.request.session[SESSION_KEY_PLAN] = self.plan self.request.session[SESSION_KEY_PLAN] = self.plan
if self.plan.stages: if self.plan.stages: