def stop_runs(view, request, actor, *args, **kwargs): # Immediate stop queryset = ( get_run_model() .objects.filter(project=view.project, uuid__in=request.data.get("uuids", [])) .filter(status__in=LifeCycle.SAFE_STOP_VALUES) ) condition = V1StatusCondition.get_condition( type=V1Statuses.STOPPED, status="True", reason="EventHandler", message="User requested to stop the run.", ) bulk_new_run_status(queryset, condition) queryset = ( get_run_model() .objects.filter(project=view.project, uuid__in=request.data.get("uuids", [])) .exclude(status__in=LifeCycle.DONE_OR_IN_PROGRESS_VALUES) ) runs = [r for r in queryset] condition = V1StatusCondition.get_condition( type=V1Statuses.STOPPING, status="True", reason="EventHandler", message="User requested to stop the run.", ) bulk_new_run_status(runs, condition) for run in runs: auditor.record( event_type=RUN_STOPPED_ACTOR, instance=run, actor_id=actor.id, actor_name=actor.username, owner_id=view.project.owner_id, owner_name=view.owner_name, project_name=view.project_name, ) return Response(status=status.HTTP_200_OK, data={})
def test_bulk_run_status(self): run1 = RunFactory(project=self.project, kind=V1RunKind.JOB) run2 = RunFactory(project=self.project, kind=V1RunKind.JOB) run3 = RunFactory(project=self.project, kind=V1RunKind.SERVICE) # Patch all runs to be managed Run.all.update(is_managed=True) assert run1.status != V1Statuses.QUEUED assert run2.status != V1Statuses.QUEUED assert run3.status != V1Statuses.QUEUED condition = V1StatusCondition.get_condition( type=V1Statuses.QUEUED, status="True", reason="PolyaxonRunQueued", message="Run is queued", ) bulk_new_run_status([run1, run2, run3], condition) run1.refresh_from_db() assert run1.status == V1Statuses.QUEUED run2.refresh_from_db() assert run2.status == V1Statuses.QUEUED run3.refresh_from_db() assert run3.status == V1Statuses.QUEUED