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

Commit799b243

Browse files
feat: implement autoscaling mechanism for prebuilds
1 parent9b9b894 commit799b243

File tree

33 files changed

+2263
-822
lines changed

33 files changed

+2263
-822
lines changed

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2282,6 +2282,13 @@ func (q *querier) GetPresetParametersByTemplateVersionID(ctx context.Context, ar
22822282
returnq.db.GetPresetParametersByTemplateVersionID(ctx,args)
22832283
}
22842284

2285+
func (q*querier)GetPresetPrebuildSchedules(ctx context.Context) ([]database.TemplateVersionPresetPrebuildSchedule,error) {
2286+
iferr:=q.authorizeContext(ctx,policy.ActionRead,rbac.ResourceTemplate.All());err!=nil {
2287+
returnnil,err
2288+
}
2289+
returnq.db.GetPresetPrebuildSchedules(ctx)
2290+
}
2291+
22852292
func (q*querier)GetPresetsAtFailureLimit(ctx context.Context,hardLimitint64) ([]database.GetPresetsAtFailureLimitRow,error) {
22862293
// GetPresetsAtFailureLimit returns a list of template version presets that have reached the hard failure limit.
22872294
// Request the same authorization permissions as GetPresetsBackoff, since the methods are similar.
@@ -3633,6 +3640,15 @@ func (q *querier) InsertPresetParameters(ctx context.Context, arg database.Inser
36333640
returnq.db.InsertPresetParameters(ctx,arg)
36343641
}
36353642

3643+
func (q*querier)InsertPresetPrebuildSchedule(ctx context.Context,arg database.InsertPresetPrebuildScheduleParams) (database.TemplateVersionPresetPrebuildSchedule,error) {
3644+
err:=q.authorizeContext(ctx,policy.ActionUpdate,rbac.ResourceTemplate)
3645+
iferr!=nil {
3646+
return database.TemplateVersionPresetPrebuildSchedule{},err
3647+
}
3648+
3649+
returnq.db.InsertPresetPrebuildSchedule(ctx,arg)
3650+
}
3651+
36363652
func (q*querier)InsertProvisionerJob(ctx context.Context,arg database.InsertProvisionerJobParams) (database.ProvisionerJob,error) {
36373653
// TODO: Remove this once we have a proper rbac check for provisioner jobs.
36383654
// Details in https://github.com/coder/coder/issues/16160

‎coderd/database/dbauthz/dbauthz_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,30 @@ func (s *MethodTestSuite) TestOrganization() {
979979
}
980980
check.Args(insertPresetParametersParams).Asserts(rbac.ResourceTemplate,policy.ActionUpdate)
981981
}))
982+
s.Run("InsertPresetPrebuildSchedule",s.Subtest(func(db database.Store,check*expects) {
983+
org:=dbgen.Organization(s.T(),db, database.Organization{})
984+
user:=dbgen.User(s.T(),db, database.User{})
985+
template:=dbgen.Template(s.T(),db, database.Template{
986+
CreatedBy:user.ID,
987+
OrganizationID:org.ID,
988+
})
989+
templateVersion:=dbgen.TemplateVersion(s.T(),db, database.TemplateVersion{
990+
TemplateID: uuid.NullUUID{UUID:template.ID,Valid:true},
991+
OrganizationID:org.ID,
992+
CreatedBy:user.ID,
993+
})
994+
insertPresetParams:= database.InsertPresetParams{
995+
TemplateVersionID:templateVersion.ID,
996+
Name:"test",
997+
}
998+
preset:=dbgen.Preset(s.T(),db,insertPresetParams)
999+
insertPresetPrebuildScheduleParams:= database.InsertPresetPrebuildScheduleParams{
1000+
PresetID:preset.ID,
1001+
}
1002+
check.Args(insertPresetPrebuildScheduleParams).
1003+
Asserts(rbac.ResourceTemplate,policy.ActionUpdate).
1004+
ErrorsWithInMemDB(dbmem.ErrUnimplemented)
1005+
}))
9821006
s.Run("DeleteOrganizationMember",s.Subtest(func(db database.Store,check*expects) {
9831007
o:=dbgen.Organization(s.T(),db, database.Organization{})
9841008
u:=dbgen.User(s.T(),db, database.User{})
@@ -4913,6 +4937,12 @@ func (s *MethodTestSuite) TestPrebuilds() {
49134937
Asserts(template.RBACObject(),policy.ActionRead).
49144938
Returns(insertedParameters)
49154939
}))
4940+
s.Run("GetPresetPrebuildSchedules",s.Subtest(func(db database.Store,check*expects) {
4941+
check.Args().
4942+
Asserts(rbac.ResourceTemplate.All(),policy.ActionRead).
4943+
Returns([]database.TemplateVersionPresetPrebuildSchedule{}).
4944+
ErrorsWithInMemDB(dbmem.ErrUnimplemented)
4945+
}))
49164946
s.Run("GetPresetsByTemplateVersionID",s.Subtest(func(db database.Store,check*expects) {
49174947
ctx:=context.Background()
49184948
org:=dbgen.Organization(s.T(),db, database.Organization{})

‎coderd/database/dbfake/dbfake.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,8 @@ func (t TemplateVersionBuilder) Do() TemplateVersionResponse {
395395
CreatedAt:version.CreatedAt,
396396
DesiredInstances:preset.DesiredInstances,
397397
InvalidateAfterSecs:preset.InvalidateAfterSecs,
398+
AutoscalingEnabled:preset.AutoscalingEnabled,
399+
AutoscalingTimezone:preset.AutoscalingTimezone,
398400
})
399401
}
400402

‎coderd/database/dbgen/dbgen.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,11 +1259,23 @@ func Preset(t testing.TB, db database.Store, seed database.InsertPresetParams) d
12591259
CreatedAt:takeFirst(seed.CreatedAt,dbtime.Now()),
12601260
DesiredInstances:seed.DesiredInstances,
12611261
InvalidateAfterSecs:seed.InvalidateAfterSecs,
1262+
AutoscalingEnabled:seed.AutoscalingEnabled,
1263+
AutoscalingTimezone:seed.AutoscalingTimezone,
12621264
})
12631265
require.NoError(t,err,"insert preset")
12641266
returnpreset
12651267
}
12661268

1269+
funcPresetPrebuildSchedule(t testing.TB,db database.Store,seed database.InsertPresetPrebuildScheduleParams) database.TemplateVersionPresetPrebuildSchedule {
1270+
schedule,err:=db.InsertPresetPrebuildSchedule(genCtx, database.InsertPresetPrebuildScheduleParams{
1271+
PresetID:seed.PresetID,
1272+
CronExpression:seed.CronExpression,
1273+
Instances:seed.Instances,
1274+
})
1275+
require.NoError(t,err,"insert preset")
1276+
returnschedule
1277+
}
1278+
12671279
funcPresetParameter(t testing.TB,db database.Store,seed database.InsertPresetParametersParams) []database.TemplateVersionPresetParameter {
12681280
parameters,err:=db.InsertPresetParameters(genCtx, database.InsertPresetParametersParams{
12691281
TemplateVersionPresetID:takeFirst(seed.TemplateVersionPresetID,uuid.New()),

‎coderd/database/dbmem/dbmem.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4369,6 +4369,10 @@ func (q *FakeQuerier) GetPresetParametersByTemplateVersionID(_ context.Context,
43694369
returnparameters,nil
43704370
}
43714371

4372+
func (q*FakeQuerier)GetPresetPrebuildSchedules(ctx context.Context) ([]database.TemplateVersionPresetPrebuildSchedule,error) {
4373+
returnnil,ErrUnimplemented
4374+
}
4375+
43724376
func (q*FakeQuerier)GetPresetsAtFailureLimit(ctx context.Context,hardLimitint64) ([]database.GetPresetsAtFailureLimitRow,error) {
43734377
returnnil,ErrUnimplemented
43744378
}
@@ -9158,6 +9162,15 @@ func (q *FakeQuerier) InsertPresetParameters(_ context.Context, arg database.Ins
91589162
returnpresetParameters,nil
91599163
}
91609164

9165+
func (q*FakeQuerier)InsertPresetPrebuildSchedule(ctx context.Context,arg database.InsertPresetPrebuildScheduleParams) (database.TemplateVersionPresetPrebuildSchedule,error) {
9166+
err:=validateDatabaseType(arg)
9167+
iferr!=nil {
9168+
return database.TemplateVersionPresetPrebuildSchedule{},err
9169+
}
9170+
9171+
return database.TemplateVersionPresetPrebuildSchedule{},ErrUnimplemented
9172+
}
9173+
91619174
func (q*FakeQuerier)InsertProvisionerJob(_ context.Context,arg database.InsertProvisionerJobParams) (database.ProvisionerJob,error) {
91629175
iferr:=validateDatabaseType(arg);err!=nil {
91639176
return database.ProvisionerJob{},err

‎coderd/database/dbmetrics/querymetrics.go

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

‎coderd/database/dbmock/dbmock.go

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

‎coderd/database/dump.sql

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

‎coderd/database/foreign_key_constraint.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
-- Drop the autoscaling schedules table
2+
DROPTABLE template_version_preset_prebuild_schedules;
3+
4+
-- Remove added columns from template_version_presets table
5+
ALTERTABLE template_version_presets
6+
DROP COLUMN autoscaling_enabled,
7+
DROP COLUMN autoscaling_timezone;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- Add new columns to template_version_presets table
2+
ALTERTABLE template_version_presets
3+
ADD COLUMN autoscaling_enabledBOOLEAN DEFAULT falseNOT NULL,-- Do we need it?
4+
ADD COLUMN autoscaling_timezoneTEXT DEFAULT'UTC'NOT NULL;
5+
6+
-- New table for autoscaling schedules
7+
CREATETABLEtemplate_version_preset_prebuild_schedules (
8+
id UUIDPRIMARY KEY DEFAULT gen_random_uuid()NOT NULL,
9+
preset_id UUIDNOT NULL,
10+
cron_expressionTEXTNOT NULL,
11+
instancesINTEGERNOT NULL,
12+
FOREIGN KEY (preset_id)REFERENCES template_version_presets (id)ON DELETE CASCADE
13+
);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
INSERT INTO
2+
template_version_preset_prebuild_schedules (
3+
id,
4+
preset_id,
5+
cron_expression,
6+
instances
7+
)
8+
VALUES (
9+
'e387cac1-9bf1-4fb6-8a34-db8cfb750dd0',
10+
'28b42cc0-c4fe-4907-a0fe-e4d20f1e9bfe',
11+
'* 8-18 * * 1-5',
12+
1
13+
);

‎coderd/database/models.go

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

‎coderd/database/querier.go

Lines changed: 2 additions & 0 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