Skip to content

Commit 5aff6e3

Browse files
fix: update dbmem.go to match new query
1 parent 18e9550 commit 5aff6e3

File tree

1 file changed

+49
-28
lines changed

1 file changed

+49
-28
lines changed

coderd/database/dbmem/dbmem.go

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6876,66 +6876,87 @@ func (q *FakeQuerier) GetWorkspacesEligibleForTransition(ctx context.Context, no
68766876
for _, workspace := range q.workspaces {
68776877
build, err := q.getLatestWorkspaceBuildByWorkspaceIDNoLock(ctx, workspace.ID)
68786878
if err != nil {
6879-
return nil, err
6879+
return nil, xerrors.Errorf("get workspace build by ID: %w", err)
68806880
}
68816881

6882-
if build.Transition == database.WorkspaceTransitionStart &&
6883-
!build.Deadline.IsZero() &&
6884-
build.Deadline.Before(now) &&
6885-
!workspace.DormantAt.Valid {
6886-
workspaces = append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
6887-
ID: workspace.ID,
6888-
Name: workspace.Name,
6889-
})
6882+
user, err := q.getUserByIDNoLock(workspace.OwnerID)
6883+
if err != nil {
6884+
return nil, xerrors.Errorf("get user by ID: %w", err)
6885+
}
6886+
6887+
job, err := q.getProvisionerJobByIDNoLock(ctx, build.JobID)
6888+
if err != nil {
6889+
return nil, xerrors.Errorf("get provisioner job by ID: %w", err)
6890+
}
6891+
6892+
template, err := q.getTemplateByIDNoLock(ctx, workspace.TemplateID)
6893+
if err != nil {
6894+
return nil, xerrors.Errorf("get template by ID: %w", err)
6895+
}
6896+
6897+
if workspace.Deleted {
68906898
continue
68916899
}
68926900

6893-
if build.Transition == database.WorkspaceTransitionStop &&
6894-
workspace.AutostartSchedule.Valid &&
6895-
!workspace.DormantAt.Valid {
6901+
if job.JobStatus != database.ProvisionerJobStatusFailed &&
6902+
!workspace.DormantAt.Valid &&
6903+
build.Transition == database.WorkspaceTransitionStart &&
6904+
(user.Status == database.UserStatusSuspended || (!build.Deadline.IsZero() && build.Deadline.Before(now))) {
68966905
workspaces = append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
68976906
ID: workspace.ID,
68986907
Name: workspace.Name,
68996908
})
69006909
continue
69016910
}
69026911

6903-
job, err := q.getProvisionerJobByIDNoLock(ctx, build.JobID)
6904-
if err != nil {
6905-
return nil, xerrors.Errorf("get provisioner job by ID: %w", err)
6906-
}
6907-
if codersdk.ProvisionerJobStatus(job.JobStatus) == codersdk.ProvisionerJobFailed {
6912+
if user.Status == database.UserStatusActive &&
6913+
job.JobStatus != database.ProvisionerJobStatusFailed &&
6914+
build.Transition == database.WorkspaceTransitionStop &&
6915+
workspace.AutostartSchedule.Valid {
69086916
workspaces = append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
69096917
ID: workspace.ID,
69106918
Name: workspace.Name,
69116919
})
69126920
continue
69136921
}
69146922

6915-
template, err := q.getTemplateByIDNoLock(ctx, workspace.TemplateID)
6916-
if err != nil {
6917-
return nil, xerrors.Errorf("get template by ID: %w", err)
6918-
}
6919-
if !workspace.DormantAt.Valid && template.TimeTilDormant > 0 {
6923+
if !workspace.DormantAt.Valid &&
6924+
template.TimeTilDormant > 0 &&
6925+
now.Sub(workspace.LastUsedAt) > time.Duration(template.TimeTilDormant) {
69206926
workspaces = append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
69216927
ID: workspace.ID,
69226928
Name: workspace.Name,
69236929
})
69246930
continue
69256931
}
6926-
if workspace.DormantAt.Valid && template.TimeTilDormantAutoDelete > 0 {
6932+
6933+
if workspace.DormantAt.Valid &&
6934+
workspace.DeletingAt.Valid &&
6935+
workspace.DeletingAt.Time.Before(now) &&
6936+
template.TimeTilDormantAutoDelete > 0 {
6937+
if build.Transition == database.WorkspaceTransitionDelete &&
6938+
job.JobStatus == database.ProvisionerJobStatusFailed {
6939+
if job.CanceledAt.Valid && now.Sub(job.CanceledAt.Time) <= 24*time.Hour {
6940+
continue
6941+
}
6942+
6943+
if job.CompletedAt.Valid && now.Sub(job.CompletedAt.Time) <= 24*time.Hour {
6944+
continue
6945+
}
6946+
}
6947+
69276948
workspaces = append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
69286949
ID: workspace.ID,
69296950
Name: workspace.Name,
69306951
})
69316952
continue
69326953
}
69336954

6934-
user, err := q.getUserByIDNoLock(workspace.OwnerID)
6935-
if err != nil {
6936-
return nil, xerrors.Errorf("get user by ID: %w", err)
6937-
}
6938-
if user.Status == database.UserStatusSuspended && build.Transition == database.WorkspaceTransitionStart {
6955+
if template.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) {
69396960
workspaces = append(workspaces, database.GetWorkspacesEligibleForTransitionRow{
69406961
ID: workspace.ID,
69416962
Name: workspace.Name,

0 commit comments

Comments
 (0)