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

Commitf2fe379

Browse files
fix: make GetWorkspacesEligibleForTransition return less false-positives (#15429)
Relates to#15082The old implementation of `GetWorkspacesEligibleForTransition` returnsmany workspaces that are not actually eligible for transition. This newimplementation reduces this number significantly (at least on ourdogfood instance).
1 parentfa69d1c commitf2fe379

File tree

7 files changed

+210
-116
lines changed

7 files changed

+210
-116
lines changed

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2803,7 +2803,7 @@ func (q *querier) GetWorkspacesAndAgentsByOwnerID(ctx context.Context, ownerID u
28032803
returnq.db.GetAuthorizedWorkspacesAndAgentsByOwnerID(ctx,ownerID,prep)
28042804
}
28052805

2806-
func (q*querier)GetWorkspacesEligibleForTransition(ctx context.Context,now time.Time) ([]database.WorkspaceTable,error) {
2806+
func (q*querier)GetWorkspacesEligibleForTransition(ctx context.Context,now time.Time) ([]database.GetWorkspacesEligibleForTransitionRow,error) {
28072807
returnq.db.GetWorkspacesEligibleForTransition(ctx,now)
28082808
}
28092809

‎coderd/database/dbmem/dbmem.go

Lines changed: 68 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6868,60 +6868,99 @@ func (q *FakeQuerier) GetWorkspacesAndAgentsByOwnerID(ctx context.Context, owner
68686868
returnq.GetAuthorizedWorkspacesAndAgentsByOwnerID(ctx,ownerID,nil)
68696869
}
68706870

6871-
func (q*FakeQuerier)GetWorkspacesEligibleForTransition(ctx context.Context,now time.Time) ([]database.WorkspaceTable,error) {
6871+
func (q*FakeQuerier)GetWorkspacesEligibleForTransition(ctx context.Context,now time.Time) ([]database.GetWorkspacesEligibleForTransitionRow,error) {
68726872
q.mutex.RLock()
68736873
deferq.mutex.RUnlock()
68746874

6875-
workspaces:= []database.WorkspaceTable{}
6875+
workspaces:= []database.GetWorkspacesEligibleForTransitionRow{}
68766876
for_,workspace:=rangeq.workspaces {
68776877
build,err:=q.getLatestWorkspaceBuildByWorkspaceIDNoLock(ctx,workspace.ID)
68786878
iferr!=nil {
6879-
returnnil,err
6880-
}
6881-
6882-
ifbuild.Transition==database.WorkspaceTransitionStart&&
6883-
!build.Deadline.IsZero()&&
6884-
build.Deadline.Before(now)&&
6885-
!workspace.DormantAt.Valid {
6886-
workspaces=append(workspaces,workspace)
6887-
continue
6879+
returnnil,xerrors.Errorf("get workspace build by ID: %w",err)
68886880
}
68896881

6890-
ifbuild.Transition==database.WorkspaceTransitionStop&&
6891-
workspace.AutostartSchedule.Valid&&
6892-
!workspace.DormantAt.Valid {
6893-
workspaces=append(workspaces,workspace)
6894-
continue
6882+
user,err:=q.getUserByIDNoLock(workspace.OwnerID)
6883+
iferr!=nil {
6884+
returnnil,xerrors.Errorf("get user by ID: %w",err)
68956885
}
68966886

68976887
job,err:=q.getProvisionerJobByIDNoLock(ctx,build.JobID)
68986888
iferr!=nil {
68996889
returnnil,xerrors.Errorf("get provisioner job by ID: %w",err)
69006890
}
6901-
ifcodersdk.ProvisionerJobStatus(job.JobStatus)==codersdk.ProvisionerJobFailed {
6902-
workspaces=append(workspaces,workspace)
6903-
continue
6904-
}
69056891

69066892
template,err:=q.getTemplateByIDNoLock(ctx,workspace.TemplateID)
69076893
iferr!=nil {
69086894
returnnil,xerrors.Errorf("get template by ID: %w",err)
69096895
}
6910-
if!workspace.DormantAt.Valid&&template.TimeTilDormant>0 {
6911-
workspaces=append(workspaces,workspace)
6896+
6897+
ifworkspace.Deleted {
69126898
continue
69136899
}
6914-
ifworkspace.DormantAt.Valid&&template.TimeTilDormantAutoDelete>0 {
6915-
workspaces=append(workspaces,workspace)
6900+
6901+
ifjob.JobStatus!=database.ProvisionerJobStatusFailed&&
6902+
!workspace.DormantAt.Valid&&
6903+
build.Transition==database.WorkspaceTransitionStart&&
6904+
(user.Status==database.UserStatusSuspended|| (!build.Deadline.IsZero()&&build.Deadline.Before(now))) {
6905+
workspaces=append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
6906+
ID:workspace.ID,
6907+
Name:workspace.Name,
6908+
})
69166909
continue
69176910
}
69186911

6919-
user,err:=q.getUserByIDNoLock(workspace.OwnerID)
6920-
iferr!=nil {
6921-
returnnil,xerrors.Errorf("get user by ID: %w",err)
6912+
ifuser.Status==database.UserStatusActive&&
6913+
job.JobStatus!=database.ProvisionerJobStatusFailed&&
6914+
build.Transition==database.WorkspaceTransitionStop&&
6915+
workspace.AutostartSchedule.Valid {
6916+
workspaces=append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
6917+
ID:workspace.ID,
6918+
Name:workspace.Name,
6919+
})
6920+
continue
69226921
}
6923-
ifuser.Status==database.UserStatusSuspended&&build.Transition==database.WorkspaceTransitionStart {
6924-
workspaces=append(workspaces,workspace)
6922+
6923+
if!workspace.DormantAt.Valid&&
6924+
template.TimeTilDormant>0&&
6925+
now.Sub(workspace.LastUsedAt)>time.Duration(template.TimeTilDormant) {
6926+
workspaces=append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
6927+
ID:workspace.ID,
6928+
Name:workspace.Name,
6929+
})
6930+
continue
6931+
}
6932+
6933+
ifworkspace.DormantAt.Valid&&
6934+
workspace.DeletingAt.Valid&&
6935+
workspace.DeletingAt.Time.Before(now)&&
6936+
template.TimeTilDormantAutoDelete>0 {
6937+
ifbuild.Transition==database.WorkspaceTransitionDelete&&
6938+
job.JobStatus==database.ProvisionerJobStatusFailed {
6939+
ifjob.CanceledAt.Valid&&now.Sub(job.CanceledAt.Time)<=24*time.Hour {
6940+
continue
6941+
}
6942+
6943+
ifjob.CompletedAt.Valid&&now.Sub(job.CompletedAt.Time)<=24*time.Hour {
6944+
continue
6945+
}
6946+
}
6947+
6948+
workspaces=append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
6949+
ID:workspace.ID,
6950+
Name:workspace.Name,
6951+
})
6952+
continue
6953+
}
6954+
6955+
iftemplate.FailureTTL>0&&
6956+
build.Transition==database.WorkspaceTransitionStart&&
6957+
job.JobStatus==database.ProvisionerJobStatusFailed&&
6958+
job.CompletedAt.Valid&&
6959+
now.Sub(job.CompletedAt.Time)>time.Duration(template.FailureTTL) {
6960+
workspaces=append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
6961+
ID:workspace.ID,
6962+
Name:workspace.Name,
6963+
})
69256964
continue
69266965
}
69276966
}

‎coderd/database/dbmetrics/querymetrics.go

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

‎coderd/database/dbmock/dbmock.go

Lines changed: 2 additions & 2 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 & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/queries.sql.go

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

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp