diff --git a/api-contracts/openapi/paths/v1/workflow-runs/workflow_run.yaml b/api-contracts/openapi/paths/v1/workflow-runs/workflow_run.yaml index 41a98f986d..00df447952 100644 --- a/api-contracts/openapi/paths/v1/workflow-runs/workflow_run.yaml +++ b/api-contracts/openapi/paths/v1/workflow-runs/workflow_run.yaml @@ -469,6 +469,12 @@ trigger: schema: $ref: "../../../components/schemas/_index.yaml#/APIErrors" description: Forbidden + "429": + content: + application/json: + schema: + $ref: "../../../components/schemas/_index.yaml#/APIErrors" + description: Resource limit exceeded summary: Create workflow run tags: - Workflow Runs diff --git a/api/v1/server/handlers/v1/workflow-runs/trigger.go b/api/v1/server/handlers/v1/workflow-runs/trigger.go index 34fa6bf852..199f57e9d9 100644 --- a/api/v1/server/handlers/v1/workflow-runs/trigger.go +++ b/api/v1/server/handlers/v1/workflow-runs/trigger.go @@ -20,6 +20,55 @@ import ( "github.com/hatchet-dev/hatchet/pkg/repository/sqlcv1" ) +func (t *V1WorkflowRunsService) getTaskCount(ctx echo.Context, tenantId uuid.UUID, workflowName string) (int32, error) { + workflow, err := t.config.V1.Workflows().GetWorkflowByName(ctx.Request().Context(), tenantId, workflowName) + + if err != nil { + return 0, fmt.Errorf("could not get workflow by name: %w", err) + } + + version, err := t.config.V1.Workflows().GetLatestWorkflowVersion(ctx.Request().Context(), tenantId, workflow.ID) + + if err != nil { + return 0, fmt.Errorf("could not get latest workflow version: %w", err) + } + + shape, err := t.config.V1.Workflows().GetWorkflowShape(ctx.Request().Context(), version.WorkflowVersion.ID) + + if err != nil { + return 0, fmt.Errorf("could not get workflow shape: %w", err) + } + + return int32(len(shape)), nil +} + +func (t *V1WorkflowRunsService) checkTaskRunLimit(ctx echo.Context, tenantId uuid.UUID, workflowName string) (gen.V1WorkflowRunCreateResponseObject, error) { + numberOfTasks, err := t.getTaskCount(ctx, tenantId, workflowName) + + if err != nil { + return nil, fmt.Errorf("could not get task count: %w", err) + } + + canCreate, trLimit, err := t.config.V1.TenantLimit().CanCreate( + ctx.Request().Context(), + sqlcv1.LimitResourceTASKRUN, + tenantId, + numberOfTasks, + ) + + if err != nil { + return nil, fmt.Errorf("could not check tenant limit: %w", err) + } + + if !canCreate { + return gen.V1WorkflowRunCreate429JSONResponse( + apierrors.NewAPIErrors(fmt.Sprintf("tenant has reached %d%% of its task runs limit", trLimit)), + ), nil + } + + return nil, nil +} + func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request gen.V1WorkflowRunCreateRequestObject) (gen.V1WorkflowRunCreateResponseObject, error) { tenant := ctx.Get("tenant").(*sqlcv1.Tenant) tenantId := tenant.ID @@ -58,6 +107,10 @@ func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request ge priority = &newPrio } + if limitResp, limitErr := t.checkTaskRunLimit(ctx, tenantId, request.Body.WorkflowName); limitResp != nil || limitErr != nil { + return limitResp, limitErr + } + grpcReq := &contracts.TriggerWorkflowRunRequest{ WorkflowName: request.Body.WorkflowName, Input: inputBytes, @@ -79,7 +132,7 @@ func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request ge apierrors.NewAPIErrors(e.Message()), ), nil case codes.ResourceExhausted: - return gen.V1WorkflowRunCreate400JSONResponse( + return gen.V1WorkflowRunCreate429JSONResponse( apierrors.NewAPIErrors(e.Message()), ), nil } @@ -118,6 +171,10 @@ func (t *V1WorkflowRunsService) V1WorkflowRunCreate(ctx echo.Context, request ge } if rawWorkflowRun == nil || rawWorkflowRun.WorkflowRun == nil { + if limitResp, _ := t.checkTaskRunLimit(ctx, tenantId, request.Body.WorkflowName); limitResp != nil { + return limitResp, nil + } + return nil, fmt.Errorf("rawWorkflowRun not populated, we are likely seeing high latency in creating tasks") } diff --git a/api/v1/server/oas/gen/openapi.gen.go b/api/v1/server/oas/gen/openapi.gen.go index 61f5142e2c..576c51c06f 100644 --- a/api/v1/server/oas/gen/openapi.gen.go +++ b/api/v1/server/oas/gen/openapi.gen.go @@ -8995,6 +8995,15 @@ func (response V1WorkflowRunCreate403JSONResponse) VisitV1WorkflowRunCreateRespo return json.NewEncoder(w).Encode(response) } +type V1WorkflowRunCreate429JSONResponse APIErrors + +func (response V1WorkflowRunCreate429JSONResponse) VisitV1WorkflowRunCreateResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(429) + + return json.NewEncoder(w).Encode(response) +} + type V1WorkflowRunGetRequestObject struct { V1WorkflowRun openapi_types.UUID `json:"v1-workflow-run"` } @@ -16363,98 +16372,98 @@ var swaggerSpec = []string{ "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/pkg/client/rest/gen.go b/pkg/client/rest/gen.go index 6111f1ede8..b2560ecb41 100644 --- a/pkg/client/rest/gen.go +++ b/pkg/client/rest/gen.go @@ -14646,6 +14646,7 @@ type V1WorkflowRunCreateResponse struct { JSON200 *V1WorkflowRunDetails JSON400 *APIErrors JSON403 *APIErrors + JSON429 *APIErrors } // Status returns HTTPResponse.Status @@ -20140,6 +20141,13 @@ func ParseV1WorkflowRunCreateResponse(rsp *http.Response) (*V1WorkflowRunCreateR } response.JSON403 = &dest + case strings.Contains(rsp.Header.Get("Content-Type"), "json") && rsp.StatusCode == 429: + var dest APIErrors + if err := json.Unmarshal(bodyBytes, &dest); err != nil { + return nil, err + } + response.JSON429 = &dest + } return response, nil