Skip to content

Commit feb7b3c

Browse files
committed
feat: apply template max TTL to workspace TTL on update
1 parent 89ccfc8 commit feb7b3c

File tree

9 files changed

+352
-76
lines changed

9 files changed

+352
-76
lines changed

coderd/database/dbauthz/querier.go

+7
Original file line numberDiff line numberDiff line change
@@ -1499,6 +1499,13 @@ func (q *querier) UpdateWorkspaceLastUsedAt(ctx context.Context, arg database.Up
14991499
return update(q.log, q.auth, fetch, q.db.UpdateWorkspaceLastUsedAt)(ctx, arg)
15001500
}
15011501

1502+
func (q *querier) UpdateWorkspaceTTLToBeWithinTemplateMax(ctx context.Context, arg database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams) error {
1503+
fetch := func(ctx context.Context, arg database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams) (database.Template, error) {
1504+
return q.db.GetTemplateByID(ctx, arg.TemplateID)
1505+
}
1506+
return fetchAndExec(q.log, q.auth, rbac.ActionUpdate, fetch, q.db.UpdateWorkspaceTTLToBeWithinTemplateMax)(ctx, arg)
1507+
}
1508+
15021509
func (q *querier) UpdateWorkspaceTTL(ctx context.Context, arg database.UpdateWorkspaceTTLParams) error {
15031510
fetch := func(ctx context.Context, arg database.UpdateWorkspaceTTLParams) (database.Workspace, error) {
15041511
return q.db.GetWorkspaceByID(ctx, arg.ID)

coderd/database/dbfake/databasefake.go

+21
Original file line numberDiff line numberDiff line change
@@ -3515,6 +3515,26 @@ func (q *fakeQuerier) UpdateWorkspaceLastUsedAt(_ context.Context, arg database.
35153515
return sql.ErrNoRows
35163516
}
35173517

3518+
func (q *fakeQuerier) UpdateWorkspaceTTLToBeWithinTemplateMax(_ context.Context, arg database.UpdateWorkspaceTTLToBeWithinTemplateMaxParams) error {
3519+
if err := validateDatabaseType(arg); err != nil {
3520+
return err
3521+
}
3522+
3523+
q.mutex.Lock()
3524+
defer q.mutex.Unlock()
3525+
3526+
for index, workspace := range q.workspaces {
3527+
if workspace.TemplateID != arg.TemplateID || !workspace.Ttl.Valid || workspace.Ttl.Int64 < arg.TemplateMaxTTL {
3528+
continue
3529+
}
3530+
3531+
workspace.Ttl = sql.NullInt64{Int64: arg.TemplateMaxTTL, Valid: true}
3532+
q.workspaces[index] = workspace
3533+
}
3534+
3535+
return nil
3536+
}
3537+
35183538
func (q *fakeQuerier) UpdateWorkspaceBuildByID(_ context.Context, arg database.UpdateWorkspaceBuildByIDParams) (database.WorkspaceBuild, error) {
35193539
if err := validateDatabaseType(arg); err != nil {
35203540
return database.WorkspaceBuild{}, err
@@ -3530,6 +3550,7 @@ func (q *fakeQuerier) UpdateWorkspaceBuildByID(_ context.Context, arg database.U
35303550
workspaceBuild.UpdatedAt = arg.UpdatedAt
35313551
workspaceBuild.ProvisionerState = arg.ProvisionerState
35323552
workspaceBuild.Deadline = arg.Deadline
3553+
workspaceBuild.MaxDeadline = arg.MaxDeadline
35333554
q.workspaceBuilds[index] = workspaceBuild
35343555
return workspaceBuild, nil
35353556
}

coderd/database/querier.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+25
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

+14
Original file line numberDiff line numberDiff line change
@@ -316,3 +316,17 @@ SET
316316
last_used_at = $2
317317
WHERE
318318
id = $1;
319+
320+
-- name: UpdateWorkspaceTTLToBeWithinTemplateMax :exec
321+
UPDATE
322+
workspaces
323+
SET
324+
ttl = LEAST(ttl, @template_max_ttl::bigint)
325+
WHERE
326+
template_id = @template_id
327+
-- LEAST() does not pick NULL, so filter it out as we don't want to set a
328+
-- TTL on the workspace if it's unset.
329+
--
330+
-- During build time, the template max TTL will still be used if the
331+
-- workspace TTL is NULL.
332+
AND ttl IS NOT NULL;

coderd/database/sqlc.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ overrides:
4343
troubleshooting_url: TroubleshootingURL
4444
default_ttl: DefaultTTL
4545
max_ttl: MaxTTL
46+
template_max_ttl: TemplateMaxTTL
4647
motd_file: MOTDFile
4748
uuid: UUID
4849

0 commit comments

Comments
 (0)