Skip to content

Commit fc1fd3e

Browse files
committed
init fix of multi connection race condition
1 parent 02fc173 commit fc1fd3e

File tree

4 files changed

+7
-22
lines changed

4 files changed

+7
-22
lines changed

coderd/database/dbgen/dbgen.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,6 @@ func WorkspaceBuild(t testing.TB, db database.Store, orig database.WorkspaceBuil
446446
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
447447
WorkspaceID: takeFirst(orig.WorkspaceID, uuid.New()),
448448
TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()),
449-
BuildNumber: takeFirst(orig.BuildNumber, 1),
450449
Transition: takeFirst(orig.Transition, database.WorkspaceTransitionStart),
451450
InitiatorID: takeFirst(orig.InitiatorID, uuid.New()),
452451
JobID: jobID,

coderd/database/queries.sql.go

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspacebuilds.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ INSERT INTO
110110
template_version_preset_id
111111
)
112112
VALUES
113-
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14);
113+
($1, $2, $3, $4, $5,
114+
COALESCE((SELECT MAX("build_number") + 1 FROM workspace_builds WHERE workspace_id = $4), 1),
115+
$6, $7, $8, $9, $10, $11, $12, $13);
114116

115117
-- name: UpdateWorkspaceBuildCostByID :exec
116118
UPDATE

coderd/wsbuilder/wsbuilder.go

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,7 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
432432
if err != nil {
433433
return nil, nil, nil, BuildError{http.StatusInternalServerError, "compute template version ID", err}
434434
}
435-
buildNum, err := b.getBuildNumber()
436-
if err != nil {
437-
return nil, nil, nil, BuildError{http.StatusInternalServerError, "compute build number", err}
438-
}
435+
439436
state, err := b.getState()
440437
if err != nil {
441438
return nil, nil, nil, BuildError{http.StatusInternalServerError, "compute build state", err}
@@ -463,7 +460,6 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object
463460
UpdatedAt: now,
464461
WorkspaceID: b.workspace.ID,
465462
TemplateVersionID: templateVersionID,
466-
BuildNumber: buildNum,
467463
ProvisionerState: state,
468464
InitiatorID: b.initiator,
469465
Transition: b.trans,
@@ -716,18 +712,6 @@ func (b *Builder) firstBuild() (bool, error) {
716712
return false, nil
717713
}
718714

719-
func (b *Builder) getBuildNumber() (int32, error) {
720-
bld, err := b.getLastBuild()
721-
if xerrors.Is(err, sql.ErrNoRows) {
722-
// first build!
723-
return 1, nil
724-
}
725-
if err != nil {
726-
return 0, xerrors.Errorf("get last build to compute build number: %w", err)
727-
}
728-
return bld.BuildNumber + 1, nil
729-
}
730-
731715
func (b *Builder) getState() ([]byte, error) {
732716
if b.state.orphan {
733717
// Orphan means empty state.

0 commit comments

Comments
 (0)