Skip to content

Commit 71ec1ac

Browse files
chore: move prep of builder and notify out of tx
1 parent 90380f7 commit 71ec1ac

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

coderd/workspacebuilds.go

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,12 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
328328
return
329329
}
330330

331+
builder := wsbuilder.New(workspace, database.WorkspaceTransition(createBuild.Transition)).
332+
Initiator(apiKey.UserID).
333+
RichParameterValues(createBuild.RichParameterValues).
334+
LogLevel(string(createBuild.LogLevel)).
335+
DeploymentValues(api.Options.DeploymentValues)
336+
331337
var (
332338
previousWorkspaceBuild database.WorkspaceBuild
333339
workspaceBuild *database.WorkspaceBuild
@@ -348,12 +354,6 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
348354
return nil
349355
}
350356

351-
builder := wsbuilder.New(workspace, database.WorkspaceTransition(createBuild.Transition)).
352-
Initiator(apiKey.UserID).
353-
RichParameterValues(createBuild.RichParameterValues).
354-
LogLevel(string(createBuild.LogLevel)).
355-
DeploymentValues(api.Options.DeploymentValues)
356-
357357
if createBuild.TemplateVersionID != uuid.Nil {
358358
builder = builder.VersionID(createBuild.TemplateVersionID)
359359
}
@@ -385,17 +385,7 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
385385
},
386386
audit.WorkspaceBuildBaggageFromRequest(r),
387387
)
388-
if err != nil {
389-
return err
390-
}
391-
392-
// If this workspace build has a different template version ID to the previous build
393-
// we can assume it has just been updated.
394-
if createBuild.TemplateVersionID != uuid.Nil && createBuild.TemplateVersionID != previousWorkspaceBuild.TemplateVersionID {
395-
api.notifyWorkspaceUpdated(ctx, tx, apiKey.UserID, workspace, createBuild.RichParameterValues)
396-
}
397-
398-
return nil
388+
return err
399389
}, nil)
400390
var buildErr wsbuilder.BuildError
401391
if xerrors.As(err, &buildErr) {
@@ -453,6 +443,12 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
453443
return
454444
}
455445

446+
// If this workspace build has a different template version ID to the previous build
447+
// we can assume it has just been updated.
448+
if createBuild.TemplateVersionID != uuid.Nil && createBuild.TemplateVersionID != previousWorkspaceBuild.TemplateVersionID {
449+
api.notifyWorkspaceUpdated(ctx, apiKey.UserID, workspace, createBuild.RichParameterValues)
450+
}
451+
456452
api.publishWorkspaceUpdate(ctx, workspace.OwnerID, wspubsub.WorkspaceEvent{
457453
Kind: wspubsub.WorkspaceEventKindStateChange,
458454
WorkspaceID: workspace.ID,
@@ -463,32 +459,31 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
463459

464460
func (api *API) notifyWorkspaceUpdated(
465461
ctx context.Context,
466-
db database.Store,
467462
initiatorID uuid.UUID,
468463
workspace database.Workspace,
469464
parameters []codersdk.WorkspaceBuildParameter,
470465
) {
471466
log := api.Logger.With(slog.F("workspace_id", workspace.ID))
472467

473-
template, err := db.GetTemplateByID(ctx, workspace.TemplateID)
468+
template, err := api.Database.GetTemplateByID(ctx, workspace.TemplateID)
474469
if err != nil {
475470
log.Warn(ctx, "failed to fetch template for workspace creation notification", slog.F("template_id", workspace.TemplateID), slog.Error(err))
476471
return
477472
}
478473

479-
version, err := db.GetTemplateVersionByID(ctx, template.ActiveVersionID)
474+
version, err := api.Database.GetTemplateVersionByID(ctx, template.ActiveVersionID)
480475
if err != nil {
481476
log.Warn(ctx, "failed to fetch template version for workspace creation notification", slog.F("template_id", workspace.TemplateID), slog.Error(err))
482477
return
483478
}
484479

485-
initiator, err := db.GetUserByID(ctx, initiatorID)
480+
initiator, err := api.Database.GetUserByID(ctx, initiatorID)
486481
if err != nil {
487482
log.Warn(ctx, "failed to fetch user for workspace update notification", slog.F("initiator_id", initiatorID), slog.Error(err))
488483
return
489484
}
490485

491-
owner, err := db.GetUserByID(ctx, workspace.OwnerID)
486+
owner, err := api.Database.GetUserByID(ctx, workspace.OwnerID)
492487
if err != nil {
493488
log.Warn(ctx, "failed to fetch user for workspace update notification", slog.F("owner_id", workspace.OwnerID), slog.Error(err))
494489
return

0 commit comments

Comments
 (0)