Skip to content

Commit c3f67f8

Browse files
committed
Claim prebuild by preset ID
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent 2b29624 commit c3f67f8

File tree

5 files changed

+22
-10
lines changed

5 files changed

+22
-10
lines changed

coderd/database/queries.sql.go

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

coderd/database/queries/prebuilds.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ WHERE w.id IN (SELECT p.id
105105
WHERE (b.transition = 'start'::workspace_transition
106106
AND pj.job_status IN ('succeeded'::provisioner_job_status))
107107
AND b.template_version_id = t.active_version_id
108+
AND b.template_version_preset_id = @preset_id::uuid
108109
ORDER BY random()
109110
LIMIT 1 FOR UPDATE OF p SKIP LOCKED)
110111
RETURNING w.id, w.name;

coderd/prebuilds/claim.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"golang.org/x/xerrors"
1010
)
1111

12-
func Claim(ctx context.Context, store database.Store, userID uuid.UUID, name string) (*uuid.UUID, error) {
12+
func Claim(ctx context.Context, store database.Store, userID uuid.UUID, name string, presetID uuid.UUID) (*uuid.UUID, error) {
1313
var prebuildID *uuid.UUID
1414
err := store.InTx(func(db database.Store) error {
1515
// TODO: do we need this?
@@ -22,6 +22,7 @@ func Claim(ctx context.Context, store database.Store, userID uuid.UUID, name str
2222
result, err := db.ClaimPrebuild(ctx, database.ClaimPrebuildParams{
2323
NewUserID: userID,
2424
NewName: name,
25+
PresetID: presetID,
2526
})
2627
if err != nil {
2728
switch {

coderd/presets.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ func (api *API) templateVersionPresets(rw http.ResponseWriter, r *http.Request)
4545
Name: preset.Name,
4646
}
4747
for _, presetParam := range presetParams {
48+
if presetParam.TemplateVersionPresetID != preset.ID {
49+
continue
50+
}
51+
4852
sdkPreset.Parameters = append(sdkPreset.Parameters, codersdk.PresetParameter{
4953
Name: presetParam.Name,
5054
Value: presetParam.Value,

coderd/workspaces.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -633,12 +633,18 @@ func createWorkspace(
633633
runningWorkspaceAgentID uuid.UUID
634634
)
635635
err = api.Database.InTx(func(db database.Store) error {
636-
var workspaceID uuid.UUID
636+
var (
637+
workspaceID uuid.UUID
638+
claimedWorkspace *database.Workspace
639+
)
637640

638-
// Try and claim an eligible prebuild, if available.
639-
claimedWorkspace, err := claimPrebuild(ctx, db, api.Logger, req, owner)
640-
if err != nil {
641-
return xerrors.Errorf("claim prebuild: %w", err)
641+
// If a template preset was chosen, try claim a prebuild.
642+
if req.TemplateVersionPresetID != uuid.Nil {
643+
// Try and claim an eligible prebuild, if available.
644+
claimedWorkspace, err = claimPrebuild(ctx, db, api.Logger, req, owner)
645+
if err != nil {
646+
return xerrors.Errorf("claim prebuild: %w", err)
647+
}
642648
}
643649

644650
// No prebuild found; regular flow.
@@ -813,9 +819,7 @@ func claimPrebuild(ctx context.Context, db database.Store, logger slog.Logger, r
813819
claimCtx, cancel := context.WithTimeout(ownerCtx, time.Second*10) // TODO: don't use elevated authz context
814820
defer cancel()
815821

816-
// TODO: implement matching logic
817-
// TODO: pass down rich params for matching
818-
claimedID, err := prebuilds.Claim(claimCtx, db, owner.ID, req.Name)
822+
claimedID, err := prebuilds.Claim(claimCtx, db, owner.ID, req.Name, req.TemplateVersionPresetID)
819823
if err != nil {
820824
// TODO: enhance this by clarifying whether this *specific* prebuild failed or whether there are none to claim.
821825
return nil, xerrors.Errorf("claim prebuild: %w", err)

0 commit comments

Comments
 (0)