Skip to content

Commit e8e1e04

Browse files
committed
Update resource query with build number change
1 parent ec7ffbf commit e8e1e04

File tree

5 files changed

+96
-67
lines changed

5 files changed

+96
-67
lines changed

coderd/database/databasefake/databasefake.go

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,35 @@ func (q *fakeQuerier) GetLatestWorkspaceBuildsByWorkspaceIDs(_ context.Context,
486486
return returnBuilds, nil
487487
}
488488

489+
func (q *fakeQuerier) GetLatestWorkspaceResources(ctx context.Context) ([]database.WorkspaceResource, error) {
490+
q.mutex.RLock()
491+
defer q.mutex.RUnlock()
492+
493+
// Get latest workspace builds.
494+
builds := make(map[uuid.UUID]database.WorkspaceBuild)
495+
buildNumbers := make(map[uuid.UUID]int32)
496+
for _, workspaceBuild := range q.workspaceBuilds {
497+
if workspaceBuild.BuildNumber > buildNumbers[workspaceBuild.WorkspaceID] {
498+
builds[workspaceBuild.WorkspaceID] = workspaceBuild
499+
buildNumbers[workspaceBuild.WorkspaceID] = workspaceBuild.BuildNumber
500+
}
501+
}
502+
503+
// Get resources for each latest build.
504+
resources := make([]database.WorkspaceResource, 0)
505+
for _, workspaceBuild := range q.workspaceBuilds {
506+
rs, err := q.GetWorkspaceResourcesByJobID(ctx, workspaceBuild.JobID)
507+
if err != nil {
508+
return nil, err
509+
}
510+
resources = append(resources, rs...)
511+
}
512+
if len(resources) == 0 {
513+
return nil, sql.ErrNoRows
514+
}
515+
return resources, nil
516+
}
517+
489518
func (q *fakeQuerier) GetWorkspaceBuildByWorkspaceID(_ context.Context,
490519
params database.GetWorkspaceBuildByWorkspaceIDParams) ([]database.WorkspaceBuild, error) {
491520
q.mutex.RLock()
@@ -1044,26 +1073,6 @@ func (q *fakeQuerier) GetWorkspaceResourceByID(_ context.Context, id uuid.UUID)
10441073
return database.WorkspaceResource{}, sql.ErrNoRows
10451074
}
10461075

1047-
func (q *fakeQuerier) GetWorkspaceResources(ctx context.Context) ([]database.WorkspaceResource, error) {
1048-
q.mutex.RLock()
1049-
defer q.mutex.RUnlock()
1050-
1051-
resources := make([]database.WorkspaceResource, 0)
1052-
for _, workspaceBuild := range q.workspaceBuilds {
1053-
if !workspaceBuild.AfterID.Valid {
1054-
rs, err := q.GetWorkspaceResourcesByJobID(ctx, workspaceBuild.JobID)
1055-
if err != nil {
1056-
return nil, err
1057-
}
1058-
resources = append(resources, rs...)
1059-
}
1060-
}
1061-
if len(resources) == 0 {
1062-
return nil, sql.ErrNoRows
1063-
}
1064-
return resources, nil
1065-
}
1066-
10671076
func (q *fakeQuerier) GetWorkspaceResourcesByJobID(_ context.Context, jobID uuid.UUID) ([]database.WorkspaceResource, error) {
10681077
q.mutex.RLock()
10691078
defer q.mutex.RUnlock()

coderd/database/querier.go

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

coderd/database/queries.sql.go

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

coderd/database/queries/workspaceresources.sql

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,22 @@ INSERT INTO
2020
VALUES
2121
($1, $2, $3, $4, $5, $6) RETURNING *;
2222

23-
-- name: GetWorkspaceResources :many
24-
SELECT
25-
workspace_resources.*
26-
FROM
27-
workspace_resources
28-
INNER JOIN workspace_builds
29-
ON workspace_resources.job_id = workspace_builds.job_id
30-
WHERE
31-
workspace_builds.after_id IS NULL;
23+
-- name: GetLatestWorkspaceResources :many
24+
SELECT workspace_resources.*
25+
FROM (
26+
SELECT
27+
workspace_id, MAX(build_number) as max_build_number
28+
FROM
29+
workspace_builds
30+
GROUP BY
31+
workspace_id
32+
) latest_workspace_builds
33+
INNER JOIN
34+
workspace_builds
35+
ON
36+
workspace_builds.workspace_id = latest_workspace_builds.workspace_id
37+
AND workspace_builds.build_number = latest_workspace_builds.max_build_number
38+
INNER JOIN
39+
workspace_resources
40+
ON
41+
workspace_resources.job_id = workspace_builds.job_id;

coderd/monitoring/collector.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) {
9797
go func() {
9898
defer wg.Done()
9999

100-
dbWorkspaceResources, err := c.db.GetWorkspaceResources(c.ctx)
100+
dbWorkspaceResources, err := c.db.GetLatestWorkspaceResources(c.ctx)
101101
if err != nil && !xerrors.Is(err, sql.ErrNoRows) {
102102
ch <- prometheus.NewInvalidMetric(c.workspaceResources, err)
103103
return

0 commit comments

Comments
 (0)