Пример #1
0
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