(ctx context.Context, job database.ProvisionerJob)
| 443 | } |
| 444 | |
| 445 | func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJob) (*proto.AcquiredJob, error) { |
| 446 | // Marks the acquired job as failed with the error message provided. |
| 447 | failJob := func(errorMessage string) error { |
| 448 | err := s.Database.UpdateProvisionerJobWithCompleteByID(ctx, database.UpdateProvisionerJobWithCompleteByIDParams{ |
| 449 | ID: job.ID, |
| 450 | CompletedAt: sql.NullTime{ |
| 451 | Time: s.timeNow(), |
| 452 | Valid: true, |
| 453 | }, |
| 454 | Error: sql.NullString{ |
| 455 | String: errorMessage, |
| 456 | Valid: true, |
| 457 | }, |
| 458 | ErrorCode: job.ErrorCode, |
| 459 | UpdatedAt: s.timeNow(), |
| 460 | }) |
| 461 | if err != nil { |
| 462 | return xerrors.Errorf("update provisioner job: %w", err) |
| 463 | } |
| 464 | return xerrors.Errorf("request job was invalidated: %s", errorMessage) |
| 465 | } |
| 466 | |
| 467 | user, err := s.Database.GetUserByID(ctx, job.InitiatorID) |
| 468 | if err != nil { |
| 469 | return nil, failJob(fmt.Sprintf("get user: %s", err)) |
| 470 | } |
| 471 | |
| 472 | jobTraceMetadata := map[string]string{} |
| 473 | if job.TraceMetadata.Valid { |
| 474 | err := json.Unmarshal(job.TraceMetadata.RawMessage, &jobTraceMetadata) |
| 475 | if err != nil { |
| 476 | return nil, failJob(fmt.Sprintf("unmarshal metadata: %s", err)) |
| 477 | } |
| 478 | } |
| 479 | |
| 480 | protoJob := &proto.AcquiredJob{ |
| 481 | JobId: job.ID.String(), |
| 482 | CreatedAt: job.CreatedAt.UnixMilli(), |
| 483 | Provisioner: string(job.Provisioner), |
| 484 | UserName: user.Username, |
| 485 | TraceMetadata: jobTraceMetadata, |
| 486 | } |
| 487 | |
| 488 | // jobTransition and jobBuildReason are used for metrics; only set for workspace builds. |
| 489 | var jobTransition string |
| 490 | var jobBuildReason string |
| 491 | |
| 492 | switch job.Type { |
| 493 | case database.ProvisionerJobTypeWorkspaceBuild: |
| 494 | var input WorkspaceProvisionJob |
| 495 | err = json.Unmarshal(job.Input, &input) |
| 496 | if err != nil { |
| 497 | return nil, failJob(fmt.Sprintf("unmarshal job input %q: %s", job.Input, err)) |
| 498 | } |
| 499 | workspaceBuild, err := s.Database.GetWorkspaceBuildByID(ctx, input.WorkspaceBuildID) |
| 500 | if err != nil { |
| 501 | return nil, failJob(fmt.Sprintf("get workspace build: %s", err)) |
| 502 | } |
no test coverage detected