Skip to content

Commit da5d5ba

Browse files
fix: implement prebuild schedules methods for dbmem (#18469)
Follow-up to #18126
1 parent 4ceb549 commit da5d5ba

File tree

2 files changed

+51
-6
lines changed

2 files changed

+51
-6
lines changed

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -999,8 +999,7 @@ func (s *MethodTestSuite) TestOrganization() {
999999
PresetID: preset.ID,
10001000
}
10011001
check.Args(arg).
1002-
Asserts(rbac.ResourceTemplate, policy.ActionUpdate).
1003-
ErrorsWithInMemDB(dbmem.ErrUnimplemented)
1002+
Asserts(rbac.ResourceTemplate, policy.ActionUpdate)
10041003
}))
10051004
s.Run("DeleteOrganizationMember", s.Subtest(func(db database.Store, check *expects) {
10061005
o := dbgen.Organization(s.T(), db, database.Organization{})
@@ -4942,8 +4941,7 @@ func (s *MethodTestSuite) TestPrebuilds() {
49424941
s.Run("GetActivePresetPrebuildSchedules", s.Subtest(func(db database.Store, check *expects) {
49434942
check.Args().
49444943
Asserts(rbac.ResourceTemplate.All(), policy.ActionRead).
4945-
Returns([]database.TemplateVersionPresetPrebuildSchedule{}).
4946-
ErrorsWithInMemDB(dbmem.ErrUnimplemented)
4944+
Returns([]database.TemplateVersionPresetPrebuildSchedule{})
49474945
}))
49484946
s.Run("GetPresetsByTemplateVersionID", s.Subtest(func(db database.Store, check *expects) {
49494947
ctx := context.Background()

coderd/database/dbmem/dbmem.go

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ func New() database.Store {
7575
parameterSchemas: make([]database.ParameterSchema, 0),
7676
presets: make([]database.TemplateVersionPreset, 0),
7777
presetParameters: make([]database.TemplateVersionPresetParameter, 0),
78+
presetPrebuildSchedules: make([]database.TemplateVersionPresetPrebuildSchedule, 0),
7879
provisionerDaemons: make([]database.ProvisionerDaemon, 0),
7980
provisionerJobs: make([]database.ProvisionerJob, 0),
8081
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
@@ -299,6 +300,7 @@ type data struct {
299300
telemetryItems []database.TelemetryItem
300301
presets []database.TemplateVersionPreset
301302
presetParameters []database.TemplateVersionPresetParameter
303+
presetPrebuildSchedules []database.TemplateVersionPresetPrebuildSchedule
302304
}
303305

304306
func tryPercentileCont(fs []float64, p float64) float64 {
@@ -2779,7 +2781,42 @@ func (q *FakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time
27792781
}
27802782

27812783
func (q *FakeQuerier) GetActivePresetPrebuildSchedules(ctx context.Context) ([]database.TemplateVersionPresetPrebuildSchedule, error) {
2782-
return nil, ErrUnimplemented
2784+
q.mutex.RLock()
2785+
defer q.mutex.RUnlock()
2786+
2787+
var activeSchedules []database.TemplateVersionPresetPrebuildSchedule
2788+
2789+
// Create a map of active template version IDs for quick lookup
2790+
activeTemplateVersions := make(map[uuid.UUID]bool)
2791+
for _, template := range q.templates {
2792+
if !template.Deleted && template.Deprecated == "" {
2793+
activeTemplateVersions[template.ActiveVersionID] = true
2794+
}
2795+
}
2796+
2797+
// Create a map of presets for quick lookup
2798+
presetMap := make(map[uuid.UUID]database.TemplateVersionPreset)
2799+
for _, preset := range q.presets {
2800+
presetMap[preset.ID] = preset
2801+
}
2802+
2803+
// Filter preset prebuild schedules to only include those for active template versions
2804+
for _, schedule := range q.presetPrebuildSchedules {
2805+
// Look up the preset using the map
2806+
preset, exists := presetMap[schedule.PresetID]
2807+
if !exists {
2808+
continue
2809+
}
2810+
2811+
// Check if preset's template version is active
2812+
if !activeTemplateVersions[preset.TemplateVersionID] {
2813+
continue
2814+
}
2815+
2816+
activeSchedules = append(activeSchedules, schedule)
2817+
}
2818+
2819+
return activeSchedules, nil
27832820
}
27842821

27852822
// nolint:revive // It's not a control flag, it's a filter.
@@ -9201,7 +9238,17 @@ func (q *FakeQuerier) InsertPresetPrebuildSchedule(ctx context.Context, arg data
92019238
return database.TemplateVersionPresetPrebuildSchedule{}, err
92029239
}
92039240

9204-
return database.TemplateVersionPresetPrebuildSchedule{}, ErrUnimplemented
9241+
q.mutex.Lock()
9242+
defer q.mutex.Unlock()
9243+
9244+
presetPrebuildSchedule := database.TemplateVersionPresetPrebuildSchedule{
9245+
ID: uuid.New(),
9246+
PresetID: arg.PresetID,
9247+
CronExpression: arg.CronExpression,
9248+
DesiredInstances: arg.DesiredInstances,
9249+
}
9250+
q.presetPrebuildSchedules = append(q.presetPrebuildSchedules, presetPrebuildSchedule)
9251+
return presetPrebuildSchedule, nil
92059252
}
92069253

92079254
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {

0 commit comments

Comments
 (0)