Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit53c3ba5

Browse files
committed
run both queries and diff results
1 parent6b4d6dc commit53c3ba5

File tree

9 files changed

+317
-6
lines changed

9 files changed

+317
-6
lines changed

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2560,6 +2560,14 @@ func (q *querier) GetRunningPrebuiltWorkspaces(ctx context.Context) ([]database.
25602560
returnq.db.GetRunningPrebuiltWorkspaces(ctx)
25612561
}
25622562

2563+
func (q*querier)GetRunningPrebuiltWorkspacesOptimized(ctx context.Context) ([]database.GetRunningPrebuiltWorkspacesOptimizedRow,error) {
2564+
// This query returns only prebuilt workspaces, but we decided to require permissions for all workspaces.
2565+
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceWorkspace.All());err!=nil {
2566+
returnnil,err
2567+
}
2568+
returnq.db.GetRunningPrebuiltWorkspacesOptimized(ctx)
2569+
}
2570+
25632571
func (q*querier)GetRuntimeConfig(ctx context.Context,keystring) (string,error) {
25642572
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceSystem);err!=nil {
25652573
return"",err

‎coderd/database/dbmem/dbmem.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5101,6 +5101,10 @@ func (q *FakeQuerier) GetRunningPrebuiltWorkspaces(ctx context.Context) ([]datab
51015101
returnnil,ErrUnimplemented
51025102
}
51035103

5104+
func (q*FakeQuerier)GetRunningPrebuiltWorkspacesOptimized(ctx context.Context) ([]database.GetRunningPrebuiltWorkspacesOptimizedRow,error) {
5105+
panic("not implemented")
5106+
}
5107+
51045108
func (q*FakeQuerier)GetRuntimeConfig(_ context.Context,keystring) (string,error) {
51055109
q.mutex.Lock()
51065110
deferq.mutex.Unlock()

‎coderd/database/dbmetrics/querymetrics.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/dbmock/dbmock.go

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/querier.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries.sql.go

Lines changed: 63 additions & 5 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries/prebuilds.sql

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ WHERE tvp.desired_instances IS NOT NULL -- Consider only presets that have a pre
4848
-- AND NOT t.deleted -- We don't exclude deleted templates because there's no constraint in the DB preventing a soft deletion on a template while workspaces are running.
4949
AND (t.id=sqlc.narg('template_id')::uuidORsqlc.narg('template_id') ISNULL);
5050

51-
-- name:GetRunningPrebuiltWorkspaces :many
51+
-- name:GetRunningPrebuiltWorkspacesOptimized :many
5252
WITH latest_prebuildsAS (
5353
SELECT
5454
workspaces.id,
@@ -96,6 +96,23 @@ SELECT
9696
FROM latest_prebuilds
9797
LEFT JOIN ready_agentsONready_agents.job_id=latest_prebuilds.job_id
9898
LEFT JOIN workspace_latest_presetsONworkspace_latest_presets.workspace_id=latest_prebuilds.id
99+
ORDER BYlatest_prebuilds.id
100+
;
101+
102+
-- name: GetRunningPrebuiltWorkspaces :many
103+
SELECT
104+
p.id,
105+
p.name,
106+
p.template_id,
107+
b.template_version_id,
108+
p.current_preset_idAS current_preset_id,
109+
p.ready,
110+
p.created_at
111+
FROM workspace_prebuilds p
112+
INNER JOIN workspace_latest_builds bONb.workspace_id=p.id
113+
WHERE (b.transition='start'::workspace_transition
114+
ANDb.job_status='succeeded'::provisioner_job_status)
115+
ORDER BYp.id;
99116
;
100117

101118
-- name: CountInProgressPrebuilds :many

‎enterprise/coderd/prebuilds/reconcile.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
"sync/atomic"
1313
"time"
1414

15+
"github.com/google/go-cmp/cmp"
16+
1517
"github.com/hashicorp/go-multierror"
1618
"github.com/prometheus/client_golang/prometheus"
1719

@@ -398,11 +400,21 @@ func (c *StoreReconciler) SnapshotState(ctx context.Context, store database.Stor
398400
returnxerrors.Errorf("failed to get preset prebuild schedules: %w",err)
399401
}
400402

403+
// Get results from both original and optimized queries for comparison
401404
allRunningPrebuilds,err:=db.GetRunningPrebuiltWorkspaces(ctx)
402405
iferr!=nil {
403406
returnxerrors.Errorf("failed to get running prebuilds: %w",err)
404407
}
405408

409+
// Compare with optimized query to ensure behavioral correctness
410+
optimized,err:=db.GetRunningPrebuiltWorkspacesOptimized(ctx)
411+
iferr!=nil {
412+
// Log the error but continue with original results
413+
c.logger.Error(ctx,"optimized GetRunningPrebuiltWorkspacesOptimized failed",slog.Error(err))
414+
}else {
415+
CompareGetRunningPrebuiltWorkspacesResults(ctx,c.logger,allRunningPrebuilds,optimized)
416+
}
417+
406418
allPrebuildsInProgress,err:=db.CountInProgressPrebuilds(ctx)
407419
iferr!=nil {
408420
returnxerrors.Errorf("failed to get prebuilds in progress: %w",err)
@@ -922,3 +934,29 @@ func SetPrebuildsReconciliationPaused(ctx context.Context, db database.Store, pa
922934
}
923935
returndb.UpsertPrebuildsSettings(ctx,string(settingsJSON))
924936
}
937+
938+
// CompareGetRunningPrebuiltWorkspacesResults compares the original and optimized
939+
// query results and logs any differences found. This function can be easily
940+
// removed once we're confident the optimized query works correctly.
941+
funcCompareGetRunningPrebuiltWorkspacesResults(
942+
ctx context.Context,
943+
logger slog.Logger,
944+
original []database.GetRunningPrebuiltWorkspacesRow,
945+
optimized []database.GetRunningPrebuiltWorkspacesOptimizedRow,
946+
) {
947+
// Convert optimized results to the same type as original for comparison
948+
varoptimizedConverted []database.GetRunningPrebuiltWorkspacesRow
949+
iforiginal!=nil {
950+
optimizedConverted:=make([]database.GetRunningPrebuiltWorkspacesRow,len(optimized))
951+
fori,row:=rangeoptimized {
952+
optimizedConverted[i]=database.GetRunningPrebuiltWorkspacesRow(row)
953+
}
954+
}
955+
956+
// Compare the results and log an error if they differ.
957+
// NOTE: explicitly not sorting here as both query results are ordered by ID.
958+
ifdiff:=cmp.Diff(original,optimizedConverted);diff!="" {
959+
logger.Error(ctx,"results differ for GetRunningPrebuiltWorkspacesOptimized",
960+
slog.F("diff",diff))
961+
}
962+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp