Skip to content

Commit 1ee5403

Browse files
committed
update query
1 parent e25d8ab commit 1ee5403

File tree

8 files changed

+101
-53
lines changed

8 files changed

+101
-53
lines changed

coderd/activitybump.go

+1-5
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99

1010
"cdr.dev/slog"
1111
"github.com/coder/coder/v2/coderd/database"
12-
"github.com/coder/coder/v2/coderd/database/dbtime"
1312
)
1413

1514
// activityBumpWorkspace automatically bumps the workspace's auto-off timer
@@ -21,10 +20,7 @@ func activityBumpWorkspace(ctx context.Context, log slog.Logger, db database.Sto
2120
defer cancel()
2221

2322
err := db.InTx(func(s database.Store) error {
24-
if err := s.ActivityBumpWorkspace(ctx, database.ActivityBumpWorkspaceParams{
25-
WorkspaceID: workspaceID,
26-
UpdatedAt: dbtime.Now(),
27-
}); err != nil {
23+
if err := s.ActivityBumpWorkspace(ctx, workspaceID); err != nil {
2824
return xerrors.Errorf("activity bump workspace: %w", err)
2925
}
3026
// build, err := s.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspaceID)

coderd/database/dbauthz/dbauthz.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -657,8 +657,11 @@ func (q *querier) AcquireProvisionerJob(ctx context.Context, arg database.Acquir
657657
return q.db.AcquireProvisionerJob(ctx, arg)
658658
}
659659

660-
func (q *querier) ActivityBumpWorkspace(ctx context.Context, arg database.ActivityBumpWorkspaceParams) error {
661-
panic("not implemented")
660+
func (q *querier) ActivityBumpWorkspace(ctx context.Context, arg uuid.UUID) error {
661+
fetch := func(ctx context.Context, arg uuid.UUID) (database.Workspace, error) {
662+
return q.db.GetWorkspaceByID(ctx, arg)
663+
}
664+
return update(q.log, q.auth, fetch, q.db.ActivityBumpWorkspace)(ctx, arg)
662665
}
663666

664667
func (q *querier) CleanTailnetCoordinators(ctx context.Context) error {

coderd/database/dbfake/dbfake.go

+32-3
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,13 @@ func (q *FakeQuerier) GetActiveDBCryptKeys(_ context.Context) ([]database.DBCryp
685685
return ks, nil
686686
}
687687

688+
func minTime(t, u time.Time) time.Time {
689+
if t.Before(u) {
690+
return t
691+
}
692+
return u
693+
}
694+
688695
func (*FakeQuerier) AcquireLock(_ context.Context, _ int64) error {
689696
return xerrors.New("AcquireLock must only be called within a transaction")
690697
}
@@ -744,13 +751,35 @@ func (q *FakeQuerier) AcquireProvisionerJob(_ context.Context, arg database.Acqu
744751
return database.ProvisionerJob{}, sql.ErrNoRows
745752
}
746753

747-
func (q *FakeQuerier) ActivityBumpWorkspace(ctx context.Context, arg database.ActivityBumpWorkspaceParams) error {
748-
err := validateDatabaseType(arg)
754+
func (q *FakeQuerier) ActivityBumpWorkspace(ctx context.Context, workspaceID uuid.UUID) error {
755+
err := validateDatabaseType(workspaceID)
756+
if err != nil {
757+
return err
758+
}
759+
760+
q.mutex.Lock()
761+
defer q.mutex.Unlock()
762+
763+
workspace, err := q.getWorkspaceByIDNoLock(ctx, workspaceID)
749764
if err != nil {
750765
return err
751766
}
767+
latestBuild, err := q.getLatestWorkspaceBuildByWorkspaceIDNoLock(ctx, workspaceID)
768+
if err != nil {
769+
return err
770+
}
771+
772+
for i := range q.workspaceBuilds {
773+
if q.workspaceBuilds[i].BuildNumber != latestBuild.BuildNumber {
774+
continue
775+
}
776+
newDeadline := q.workspaceBuilds[i].Deadline.Add(time.Duration(workspace.Ttl.Int64))
777+
q.workspaceBuilds[i].UpdatedAt = latestBuild.UpdatedAt
778+
q.workspaceBuilds[i].Deadline = minTime(newDeadline, q.workspaceBuilds[i].MaxDeadline)
779+
return nil
780+
}
752781

753-
panic("not implemented")
782+
return sql.ErrNoRows
754783
}
755784

756785
func (*FakeQuerier) CleanTailnetCoordinators(_ context.Context) error {

coderd/database/dbmetrics/dbmetrics.go

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

coderd/database/dbmock/dbmock.go

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

coderd/database/querier.go

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

coderd/database/queries.sql.go

+31-24
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+29-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,33 @@
11
-- name: ActivityBumpWorkspace :exec
2+
WITH latest AS (
3+
SELECT
4+
workspace_builds.id,
5+
workspace_builds.deadline,
6+
workspace_builds.max_deadline,
7+
workspaces.ttl,
8+
(workspace_builds.deadline + (workspaces.ttl/1000 || ' microsecond')::interval ) AS new_deadline
9+
FROM workspace_builds
10+
JOIN provisioner_jobs
11+
ON provisioner_jobs.id = workspace_builds.job_id
12+
JOIN workspaces
13+
ON workspaces.id = workspace_builds.workspace_id
14+
WHERE workspace_builds.workspace_id = $1::uuid
15+
AND workspace_builds.transition = 'start'
16+
AND workspace_builds.deadline > NOW()
17+
AND provisioner_jobs.completed_at IS NOT NULL
18+
ORDER BY workspace_builds.build_number ASC
19+
LIMIT 1
20+
)
221
UPDATE
3-
workspace_builds
22+
workspace_builds wb
423
SET
5-
updated_at = $2,
6-
deadline = LEAST(workspace_builds.deadline + workspace.ttl, workspace_builds.max_deadline)
24+
updated_at = NOW(),
25+
deadline = CASE
26+
WHEN l.max_deadline = '0001-01-01 00:00:00'
27+
THEN l.new_deadline
28+
ELSE LEAST(l.new_deadline, l.max_deadline)
29+
END
30+
FROM latest l
731
WHERE
8-
workspace_builds.id IN (
9-
SELECT wb.id
10-
FROM workspace_builds wb
11-
JOIN provisioner_jobs pj
12-
ON pj.id = wb.job_id
13-
WHERE wb.workspace_id = $1
14-
AND wb.transition == 'start'
15-
AND wb.deadline > $2
16-
AND wb.deadline != wb.max_deadline
17-
AND pj.completed_at IS NOT NULL
18-
ORDER BY wb.build_number ASC
19-
LIMIT 1
20-
);
32+
wb.id = l.id
33+
;

0 commit comments

Comments
 (0)