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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy