FanOutTaskRuns creates designated sibling runs for one task.
(c *gin.Context)
| 1367 | |
| 1368 | // FanOutTaskRuns creates designated sibling runs for one task. |
| 1369 | func (h *BaseHandlers) FanOutTaskRuns(c *gin.Context) { |
| 1370 | manager, ok := h.requireTaskManager(c) |
| 1371 | if !ok { |
| 1372 | return |
| 1373 | } |
| 1374 | networkStore, err := h.networkStoreRequired() |
| 1375 | if err != nil { |
| 1376 | h.respondError(c, http.StatusInternalServerError, err) |
| 1377 | return |
| 1378 | } |
| 1379 | taskID, err := requiredPathID(c.Param("id"), "task id") |
| 1380 | if err != nil { |
| 1381 | h.respondError(c, StatusForTaskError(err), err) |
| 1382 | return |
| 1383 | } |
| 1384 | var req contract.FanOutTaskRunsRequest |
| 1385 | if err := c.ShouldBindJSON(&req); err != nil { |
| 1386 | h.respondError( |
| 1387 | c, |
| 1388 | http.StatusBadRequest, |
| 1389 | NewTaskValidationError(fmt.Errorf("%s: decode fan-out task runs request: %w", h.transportName(), err)), |
| 1390 | ) |
| 1391 | return |
| 1392 | } |
| 1393 | maxDesignations := h.Config.Task.Orchestration.DesignatedRunMax |
| 1394 | if maxDesignations <= 0 { |
| 1395 | maxDesignations = aghconfig.DefaultTaskDesignatedRunMax |
| 1396 | } |
| 1397 | prepared, err := prepareFanOutTaskRunsRequest(req, maxDesignations) |
| 1398 | if err != nil { |
| 1399 | h.respondError(c, StatusForTaskError(err), err) |
| 1400 | return |
| 1401 | } |
| 1402 | actor, err := h.taskActorContext(c, taskActionFanOutRuns) |
| 1403 | if err != nil { |
| 1404 | h.respondError(c, StatusForTaskError(err), err) |
| 1405 | return |
| 1406 | } |
| 1407 | groupID := store.NewID("tdg") |
| 1408 | runs, err := enqueueFanOutTaskRuns(c.Request.Context(), manager, actor, taskID, groupID, req, prepared) |
| 1409 | if err != nil { |
| 1410 | h.respondError(c, StatusForTaskError(err), err) |
| 1411 | return |
| 1412 | } |
| 1413 | now := h.nowUTC() |
| 1414 | if err := networkStore.PutTaskDesignationRollup( |
| 1415 | c.Request.Context(), |
| 1416 | store.TaskDesignationRollup{ |
| 1417 | DesignationGroupID: groupID, |
| 1418 | TaskID: taskID, |
| 1419 | SummaryJSON: fanOutDesignationRollupJSON(runs, now), |
| 1420 | CreatedAt: now, |
| 1421 | }, |
| 1422 | ); err != nil { |
| 1423 | h.respondError(c, StatusForNetworkError(err), err) |
| 1424 | return |
| 1425 | } |
| 1426 | c.JSON(http.StatusCreated, contract.FanOutTaskRunsResponse{ |
nothing calls this directly
no test coverage detected