fix: implement prebuild schedules methods for dbmem (#18469)

Follow-up to https://github.com/coder/coder/pull/18126
This commit is contained in:
Yevhenii Shcherbina
2025-06-20 10:06:06 -04:00
committed by GitHub
parent 4ceb549c3f
commit da5d5ba96a
2 changed files with 51 additions and 6 deletions
+2 -4
View File
@@ -999,8 +999,7 @@ func (s *MethodTestSuite) TestOrganization() {
PresetID: preset.ID,
}
check.Args(arg).
Asserts(rbac.ResourceTemplate, policy.ActionUpdate).
ErrorsWithInMemDB(dbmem.ErrUnimplemented)
Asserts(rbac.ResourceTemplate, policy.ActionUpdate)
}))
s.Run("DeleteOrganizationMember", s.Subtest(func(db database.Store, check *expects) {
o := dbgen.Organization(s.T(), db, database.Organization{})
@@ -4942,8 +4941,7 @@ func (s *MethodTestSuite) TestPrebuilds() {
s.Run("GetActivePresetPrebuildSchedules", s.Subtest(func(db database.Store, check *expects) {
check.Args().
Asserts(rbac.ResourceTemplate.All(), policy.ActionRead).
Returns([]database.TemplateVersionPresetPrebuildSchedule{}).
ErrorsWithInMemDB(dbmem.ErrUnimplemented)
Returns([]database.TemplateVersionPresetPrebuildSchedule{})
}))
s.Run("GetPresetsByTemplateVersionID", s.Subtest(func(db database.Store, check *expects) {
ctx := context.Background()
+49 -2
View File
@@ -75,6 +75,7 @@ func New() database.Store {
parameterSchemas: make([]database.ParameterSchema, 0),
presets: make([]database.TemplateVersionPreset, 0),
presetParameters: make([]database.TemplateVersionPresetParameter, 0),
presetPrebuildSchedules: make([]database.TemplateVersionPresetPrebuildSchedule, 0),
provisionerDaemons: make([]database.ProvisionerDaemon, 0),
provisionerJobs: make([]database.ProvisionerJob, 0),
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
@@ -299,6 +300,7 @@ type data struct {
telemetryItems []database.TelemetryItem
presets []database.TemplateVersionPreset
presetParameters []database.TemplateVersionPresetParameter
presetPrebuildSchedules []database.TemplateVersionPresetPrebuildSchedule
}
func tryPercentileCont(fs []float64, p float64) float64 {
@@ -2779,7 +2781,42 @@ func (q *FakeQuerier) GetAPIKeysLastUsedAfter(_ context.Context, after time.Time
}
func (q *FakeQuerier) GetActivePresetPrebuildSchedules(ctx context.Context) ([]database.TemplateVersionPresetPrebuildSchedule, error) {
return nil, ErrUnimplemented
q.mutex.RLock()
defer q.mutex.RUnlock()
var activeSchedules []database.TemplateVersionPresetPrebuildSchedule
// Create a map of active template version IDs for quick lookup
activeTemplateVersions := make(map[uuid.UUID]bool)
for _, template := range q.templates {
if !template.Deleted && template.Deprecated == "" {
activeTemplateVersions[template.ActiveVersionID] = true
}
}
// Create a map of presets for quick lookup
presetMap := make(map[uuid.UUID]database.TemplateVersionPreset)
for _, preset := range q.presets {
presetMap[preset.ID] = preset
}
// Filter preset prebuild schedules to only include those for active template versions
for _, schedule := range q.presetPrebuildSchedules {
// Look up the preset using the map
preset, exists := presetMap[schedule.PresetID]
if !exists {
continue
}
// Check if preset's template version is active
if !activeTemplateVersions[preset.TemplateVersionID] {
continue
}
activeSchedules = append(activeSchedules, schedule)
}
return activeSchedules, nil
}
// 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
return database.TemplateVersionPresetPrebuildSchedule{}, err
}
return database.TemplateVersionPresetPrebuildSchedule{}, ErrUnimplemented
q.mutex.Lock()
defer q.mutex.Unlock()
presetPrebuildSchedule := database.TemplateVersionPresetPrebuildSchedule{
ID: uuid.New(),
PresetID: arg.PresetID,
CronExpression: arg.CronExpression,
DesiredInstances: arg.DesiredInstances,
}
q.presetPrebuildSchedules = append(q.presetPrebuildSchedules, presetPrebuildSchedule)
return presetPrebuildSchedule, nil
}
func (q *FakeQuerier) InsertProvisionerJob(_ context.Context, arg database.InsertProvisionerJobParams) (database.ProvisionerJob, error) {