Skip to content

Commit 0f21e44

Browse files
committed
chore: alternate optimization for GetRunningPrebuiltWorkspaces
1 parent 0c0c015 commit 0f21e44

File tree

2 files changed

+75
-22
lines changed

2 files changed

+75
-22
lines changed

coderd/database/queries.sql.go

Lines changed: 37 additions & 11 deletions
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: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,45 @@ WHERE tvp.desired_instances IS NOT NULL -- Consider only presets that have a pre
4949
AND (t.id = sqlc.narg('template_id')::uuid OR sqlc.narg('template_id') IS NULL);
5050

5151
-- name: GetRunningPrebuiltWorkspaces :many
52+
WITH latest_prebuilds AS (
53+
SELECT
54+
workspaces.id,
55+
workspaces.name,
56+
workspaces.template_id,
57+
workspace_latest_builds.template_version_id,
58+
workspace_latest_builds.template_version_preset_id,
59+
workspace_latest_builds.job_id,
60+
workspaces.created_at
61+
FROM workspace_latest_builds
62+
JOIN workspaces ON workspaces.id = workspace_latest_builds.workspace_id
63+
WHERE workspace_latest_builds.transition = 'start'::workspace_transition
64+
AND workspace_latest_builds.job_status = 'succeeded'::provisioner_job_status
65+
AND workspaces.owner_id = 'c42fdf75-3097-471c-8c33-fb52454d81c0'::UUID
66+
AND NOT workspaces.deleted
67+
),
68+
ready_agents AS (
69+
SELECT
70+
latest_prebuilds.job_id,
71+
BOOL_AND(workspace_agents.lifecycle_state = 'ready'::workspace_agent_lifecycle_state)::boolean AS ready
72+
FROM latest_prebuilds
73+
JOIN workspace_resources ON workspace_resources.job_id = latest_prebuilds.job_id
74+
JOIN workspace_agents ON workspace_agents.resource_id = workspace_resources.id
75+
WHERE workspace_agents.deleted = false
76+
AND workspace_agents.parent_id IS NULL
77+
GROUP BY latest_prebuilds.job_id
78+
)
5279
SELECT
53-
p.id,
54-
p.name,
55-
p.template_id,
56-
b.template_version_id,
57-
p.current_preset_id AS current_preset_id,
58-
p.ready,
59-
p.created_at
60-
FROM workspace_prebuilds p
61-
INNER JOIN workspace_latest_builds b ON b.workspace_id = p.id
62-
WHERE (b.transition = 'start'::workspace_transition
63-
AND b.job_status = 'succeeded'::provisioner_job_status);
80+
latest_prebuilds.id,
81+
latest_prebuilds.name,
82+
latest_prebuilds.template_id,
83+
latest_prebuilds.template_version_id,
84+
-- TODO(cian): this can be null, which differs from prebuilt_workspaces view.
85+
latest_prebuilds.template_version_preset_id AS current_preset_id,
86+
COALESCE(ready_agents.ready, false)::boolean AS ready,
87+
latest_prebuilds.created_at
88+
FROM latest_prebuilds
89+
LEFT JOIN ready_agents ON ready_agents.job_id = latest_prebuilds.job_id
90+
;
6491

6592
-- name: CountInProgressPrebuilds :many
6693
-- CountInProgressPrebuilds returns the number of in-progress prebuilds, grouped by preset ID and transition.

0 commit comments

Comments
 (0)