MCPcopy Index your code
hub / github.com/coder/coder / FailJob

Method FailJob

coderd/provisionerdserver/provisionerdserver.go:1184–1382  ·  view source on GitHub ↗
(ctx context.Context, failJob *proto.FailedJob)

Source from the content-addressed store, hash-verified

1182}
1183
1184func (s *server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*proto.Empty, error) {
1185 ctx, span := s.startTrace(ctx, tracing.FuncName())
1186 defer span.End()
1187
1188 //nolint:gocritic // Provisionerd has specific authz rules.
1189 ctx = dbauthz.AsProvisionerd(ctx)
1190 jobID, err := uuid.Parse(failJob.JobId)
1191 if err != nil {
1192 return nil, xerrors.Errorf("parse job id: %w", err)
1193 }
1194 s.Logger.Debug(ctx, "stage FailJob starting", slog.F("job_id", jobID))
1195 job, err := s.Database.GetProvisionerJobByID(ctx, jobID)
1196 if err != nil {
1197 return nil, xerrors.Errorf("get provisioner job: %w", err)
1198 }
1199 if job.WorkerID.UUID.String() != s.ID.String() {
1200 return nil, xerrors.New("you don't own this job")
1201 }
1202 if job.CompletedAt.Valid {
1203 return nil, xerrors.Errorf("job already completed")
1204 }
1205 job.CompletedAt = sql.NullTime{
1206 Time: s.timeNow(),
1207 Valid: true,
1208 }
1209 job.Error = sql.NullString{
1210 String: failJob.Error,
1211 Valid: failJob.Error != "",
1212 }
1213 job.ErrorCode = sql.NullString{
1214 String: failJob.ErrorCode,
1215 Valid: failJob.ErrorCode != "",
1216 }
1217
1218 err = s.Database.UpdateProvisionerJobWithCompleteByID(ctx, database.UpdateProvisionerJobWithCompleteByIDParams{
1219 ID: jobID,
1220 CompletedAt: job.CompletedAt,
1221 UpdatedAt: s.timeNow(),
1222 Error: job.Error,
1223 ErrorCode: job.ErrorCode,
1224 })
1225 if err != nil {
1226 return nil, xerrors.Errorf("update provisioner job: %w", err)
1227 }
1228 s.Telemetry.Report(&telemetry.Snapshot{
1229 ProvisionerJobs: []telemetry.ProvisionerJob{telemetry.ConvertProvisionerJob(job)},
1230 })
1231
1232 switch jobType := failJob.Type.(type) {
1233 case *proto.FailedJob_WorkspaceBuild_:
1234 var input WorkspaceProvisionJob
1235 err = json.Unmarshal(job.Input, &input)
1236 if err != nil {
1237 return nil, xerrors.Errorf("unmarshal workspace provision input: %w", err)
1238 }
1239
1240 var build database.WorkspaceBuild
1241 var workspace database.Workspace

Callers

nothing calls this directly

Calls 15

startTraceMethod · 0.95
timeNowMethod · 0.95
IsPrebuildMethod · 0.95
FuncNameFunction · 0.92
AsProvisionerdFunction · 0.92
ConvertProvisionerJobFunction · 0.92
WorkspaceEventChannelFunction · 0.92
BuildReasonTypeAlias · 0.92
BaggageFromContextFunction · 0.92
BackgroundAuditFunction · 0.92

Tested by

no test coverage detected