Skip to content

Commit 0f6f77a

Browse files
committed
chore: continued removal of max_ttl
1 parent d5f828e commit 0f6f77a

File tree

8 files changed

+15
-310
lines changed

8 files changed

+15
-310
lines changed

cli/templatecreate.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ func (r *RootCmd) templateCreate() *serpent.Command {
2929
failureTTL time.Duration
3030
dormancyThreshold time.Duration
3131
dormancyAutoDeletion time.Duration
32-
maxTTL time.Duration
3332

3433
uploadFlags templateUploadFlags
3534
)
@@ -46,7 +45,7 @@ func (r *RootCmd) templateCreate() *serpent.Command {
4645
r.InitClient(client),
4746
),
4847
Handler: func(inv *serpent.Invocation) error {
49-
isTemplateSchedulingOptionsSet := failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 || maxTTL != 0
48+
isTemplateSchedulingOptionsSet := failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0
5049

5150
if isTemplateSchedulingOptionsSet || requireActiveVersion {
5251
entitlements, err := client.Entitlements(inv.Context())
@@ -154,7 +153,6 @@ func (r *RootCmd) templateCreate() *serpent.Command {
154153
VersionID: job.ID,
155154
DefaultTTLMillis: ptr.Ref(defaultTTL.Milliseconds()),
156155
FailureTTLMillis: ptr.Ref(failureTTL.Milliseconds()),
157-
MaxTTLMillis: ptr.Ref(maxTTL.Milliseconds()),
158156
TimeTilDormantMillis: ptr.Ref(dormancyThreshold.Milliseconds()),
159157
TimeTilDormantAutoDeleteMillis: ptr.Ref(dormancyAutoDeletion.Milliseconds()),
160158
DisableEveryoneGroupAccess: disableEveryone,
@@ -229,12 +227,6 @@ func (r *RootCmd) templateCreate() *serpent.Command {
229227
Default: "0h",
230228
Value: serpent.DurationOf(&dormancyAutoDeletion),
231229
},
232-
233-
{
234-
Flag: "max-ttl",
235-
Description: "Edit the template maximum time before shutdown - workspaces created from this template must shutdown within the given duration after starting. This is an enterprise-only feature.",
236-
Value: serpent.DurationOf(&maxTTL),
237-
},
238230
{
239231
Flag: "test.provisioner",
240232
Description: "Customize the provisioner backend.",

cli/templateedit_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,6 @@ func TestTemplateEdit(t *testing.T) {
564564
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
565565
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
566566
ctr.DefaultTTLMillis = nil
567-
ctr.MaxTTLMillis = nil
568567
})
569568

570569
// Test the cli command.
@@ -590,7 +589,6 @@ func TestTemplateEdit(t *testing.T) {
590589
assert.Equal(t, template.Icon, updated.Icon)
591590
assert.Equal(t, template.DisplayName, updated.DisplayName)
592591
assert.Equal(t, template.DefaultTTLMillis, updated.DefaultTTLMillis)
593-
assert.Equal(t, template.MaxTTLMillis, updated.MaxTTLMillis)
594592
})
595593

596594
t.Run("BlockedNotEntitled", func(t *testing.T) {
@@ -602,7 +600,6 @@ func TestTemplateEdit(t *testing.T) {
602600
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
603601
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
604602
ctr.DefaultTTLMillis = nil
605-
ctr.MaxTTLMillis = nil
606603
})
607604

608605
// Make a proxy server that will return a valid entitlements
@@ -668,7 +665,6 @@ func TestTemplateEdit(t *testing.T) {
668665
assert.Equal(t, template.Icon, updated.Icon)
669666
assert.Equal(t, template.DisplayName, updated.DisplayName)
670667
assert.Equal(t, template.DefaultTTLMillis, updated.DefaultTTLMillis)
671-
assert.Equal(t, template.MaxTTLMillis, updated.MaxTTLMillis)
672668
})
673669
t.Run("Entitled", func(t *testing.T) {
674670
t.Parallel()
@@ -679,7 +675,6 @@ func TestTemplateEdit(t *testing.T) {
679675
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
680676
template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version.ID, func(ctr *codersdk.CreateTemplateRequest) {
681677
ctr.DefaultTTLMillis = nil
682-
ctr.MaxTTLMillis = nil
683678
})
684679

685680
// Make a proxy server that will return a valid entitlements
@@ -715,7 +710,6 @@ func TestTemplateEdit(t *testing.T) {
715710
var req codersdk.UpdateTemplateMeta
716711
err = json.Unmarshal(body, &req)
717712
require.NoError(t, err)
718-
assert.Equal(t, time.Hour.Milliseconds(), req.MaxTTLMillis)
719713

720714
r.Body = io.NopCloser(bytes.NewReader(body))
721715
atomic.AddInt64(&updateTemplateCalled, 1)
@@ -763,7 +757,6 @@ func TestTemplateEdit(t *testing.T) {
763757
assert.Equal(t, template.Icon, updated.Icon)
764758
assert.Equal(t, template.DisplayName, updated.DisplayName)
765759
assert.Equal(t, template.DefaultTTLMillis, updated.DefaultTTLMillis)
766-
assert.Equal(t, template.MaxTTLMillis, updated.MaxTTLMillis)
767760
})
768761
})
769762
t.Run("AllowUserScheduling", func(t *testing.T) {

coderd/provisionerdserver/provisionerdserver_test.go

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,104 +1032,84 @@ func TestCompleteJob(t *testing.T) {
10321032
name string
10331033
templateAllowAutostop bool
10341034
templateDefaultTTL time.Duration
1035-
templateMaxTTL time.Duration
10361035
workspaceTTL time.Duration
10371036
transition database.WorkspaceTransition
10381037
// The TTL is actually a deadline time on the workspace_build row,
10391038
// so during the test this will be compared to be within 15 seconds
10401039
// of the expected value.
1041-
expectedTTL time.Duration
1042-
expectedMaxTTL time.Duration
1040+
expectedTTL time.Duration
10431041
}{
10441042
{
10451043
name: "OK",
10461044
templateAllowAutostop: true,
10471045
templateDefaultTTL: 0,
1048-
templateMaxTTL: 0,
10491046
workspaceTTL: 0,
10501047
transition: database.WorkspaceTransitionStart,
10511048
expectedTTL: 0,
1052-
expectedMaxTTL: 0,
10531049
},
10541050
{
10551051
name: "Delete",
10561052
templateAllowAutostop: true,
10571053
templateDefaultTTL: 0,
1058-
templateMaxTTL: 0,
10591054
workspaceTTL: 0,
10601055
transition: database.WorkspaceTransitionDelete,
10611056
expectedTTL: 0,
1062-
expectedMaxTTL: 0,
10631057
},
10641058
{
10651059
name: "WorkspaceTTL",
10661060
templateAllowAutostop: true,
10671061
templateDefaultTTL: 0,
1068-
templateMaxTTL: 0,
10691062
workspaceTTL: time.Hour,
10701063
transition: database.WorkspaceTransitionStart,
10711064
expectedTTL: time.Hour,
1072-
expectedMaxTTL: 0,
10731065
},
10741066
{
10751067
name: "TemplateDefaultTTLIgnored",
10761068
templateAllowAutostop: true,
10771069
templateDefaultTTL: time.Hour,
1078-
templateMaxTTL: 0,
10791070
workspaceTTL: 0,
10801071
transition: database.WorkspaceTransitionStart,
10811072
expectedTTL: 0,
1082-
expectedMaxTTL: 0,
10831073
},
10841074
{
10851075
name: "WorkspaceTTLOverridesTemplateDefaultTTL",
10861076
templateAllowAutostop: true,
10871077
templateDefaultTTL: 2 * time.Hour,
1088-
templateMaxTTL: 0,
10891078
workspaceTTL: time.Hour,
10901079
transition: database.WorkspaceTransitionStart,
10911080
expectedTTL: time.Hour,
1092-
expectedMaxTTL: 0,
10931081
},
10941082
{
10951083
name: "TemplateMaxTTL",
10961084
templateAllowAutostop: true,
10971085
templateDefaultTTL: 0,
1098-
templateMaxTTL: time.Hour,
10991086
workspaceTTL: 0,
11001087
transition: database.WorkspaceTransitionStart,
1101-
expectedTTL: time.Hour,
1102-
expectedMaxTTL: time.Hour,
1088+
expectedTTL: 0,
11031089
},
11041090
{
11051091
name: "TemplateMaxTTLOverridesWorkspaceTTL",
11061092
templateAllowAutostop: true,
11071093
templateDefaultTTL: 0,
1108-
templateMaxTTL: 2 * time.Hour,
11091094
workspaceTTL: 3 * time.Hour,
11101095
transition: database.WorkspaceTransitionStart,
1111-
expectedTTL: 2 * time.Hour,
1112-
expectedMaxTTL: 2 * time.Hour,
1096+
expectedTTL: 3 * time.Hour,
11131097
},
11141098
{
11151099
name: "TemplateMaxTTLOverridesTemplateDefaultTTL",
11161100
templateAllowAutostop: true,
11171101
templateDefaultTTL: 3 * time.Hour,
1118-
templateMaxTTL: 2 * time.Hour,
11191102
workspaceTTL: 0,
11201103
transition: database.WorkspaceTransitionStart,
1121-
expectedTTL: 2 * time.Hour,
1122-
expectedMaxTTL: 2 * time.Hour,
1104+
expectedTTL: 0,
11231105
},
11241106
{
11251107
name: "TemplateBlockWorkspaceTTL",
11261108
templateAllowAutostop: false,
11271109
templateDefaultTTL: 3 * time.Hour,
1128-
templateMaxTTL: 6 * time.Hour,
11291110
workspaceTTL: 4 * time.Hour,
11301111
transition: database.WorkspaceTransitionStart,
11311112
expectedTTL: 3 * time.Hour,
1132-
expectedMaxTTL: 6 * time.Hour,
11331113
},
11341114
}
11351115

@@ -1148,8 +1128,6 @@ func TestCompleteJob(t *testing.T) {
11481128
UserAutostartEnabled: false,
11491129
UserAutostopEnabled: c.templateAllowAutostop,
11501130
DefaultTTL: c.templateDefaultTTL,
1151-
MaxTTL: c.templateMaxTTL,
1152-
UseMaxTTL: true,
11531131
}, nil
11541132
},
11551133
}
@@ -1174,7 +1152,6 @@ func TestCompleteJob(t *testing.T) {
11741152
UpdatedAt: dbtime.Now(),
11751153
AllowUserAutostart: c.templateAllowAutostop,
11761154
DefaultTTL: int64(c.templateDefaultTTL),
1177-
MaxTTL: int64(c.templateMaxTTL),
11781155
})
11791156
require.NoError(t, err)
11801157
file := dbgen.File(t, db, database.File{CreatedBy: user.ID})
@@ -1253,12 +1230,10 @@ func TestCompleteJob(t *testing.T) {
12531230
} else {
12541231
require.WithinDuration(t, time.Now().Add(c.expectedTTL), workspaceBuild.Deadline, 15*time.Second, "deadline does not match expected")
12551232
}
1256-
if c.expectedMaxTTL == 0 {
1257-
require.True(t, workspaceBuild.MaxDeadline.IsZero())
1258-
} else {
1259-
require.WithinDuration(t, time.Now().Add(c.expectedMaxTTL), workspaceBuild.MaxDeadline, 15*time.Second, "max deadline does not match expected")
1260-
require.GreaterOrEqual(t, workspaceBuild.MaxDeadline.Unix(), workspaceBuild.Deadline.Unix(), "max deadline is smaller than deadline")
1261-
}
1233+
1234+
// Legacy TTL does not use scheduling requirements that will set
1235+
// a max deadline.
1236+
require.True(t, workspaceBuild.MaxDeadline.IsZero())
12621237
})
12631238
}
12641239
})
@@ -1368,7 +1343,6 @@ func TestCompleteJob(t *testing.T) {
13681343
UserAutostartEnabled: false,
13691344
UserAutostopEnabled: true,
13701345
DefaultTTL: 0,
1371-
UseMaxTTL: false,
13721346
AutostopRequirement: c.templateAutostopRequirement,
13731347
}, nil
13741348
},

coderd/schedule/autostop_test.go

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,10 @@ func TestCalculateAutoStop(t *testing.T) {
7070
t.Log("saturdayMidnightAfterDstOut", saturdayMidnightAfterDstOut)
7171

7272
cases := []struct {
73-
name string
74-
now time.Time
75-
templateAllowAutostop bool
76-
templateDefaultTTL time.Duration
77-
// TODO(@dean): remove max_ttl tests
78-
useMaxTTL bool
79-
templateMaxTTL time.Duration
73+
name string
74+
now time.Time
75+
templateAllowAutostop bool
76+
templateDefaultTTL time.Duration
8077
templateAutostopRequirement schedule.TemplateAutostopRequirement
8178
userQuietHoursSchedule string
8279
// workspaceTTL is usually copied from the template's TTL when the
@@ -367,40 +364,6 @@ func TestCalculateAutoStop(t *testing.T) {
367364
// expectedDeadline is copied from expectedMaxDeadline.
368365
expectedMaxDeadline: dstOutQuietHoursExpectedTime,
369366
},
370-
371-
// TODO(@dean): remove max_ttl tests
372-
{
373-
name: "AutostopRequirementIgnoresMaxTTL",
374-
now: fridayEveningSydney.In(time.UTC),
375-
templateAllowAutostop: false,
376-
templateDefaultTTL: 0,
377-
useMaxTTL: false,
378-
templateMaxTTL: time.Hour, // should be ignored
379-
userQuietHoursSchedule: sydneyQuietHours,
380-
templateAutostopRequirement: schedule.TemplateAutostopRequirement{
381-
DaysOfWeek: 0b00100000, // Saturday
382-
Weeks: 0, // weekly
383-
},
384-
workspaceTTL: 0,
385-
// expectedDeadline is copied from expectedMaxDeadline.
386-
expectedMaxDeadline: saturdayMidnightSydney.In(time.UTC),
387-
},
388-
{
389-
name: "MaxTTLIgnoresAutostopRequirement",
390-
now: fridayEveningSydney.In(time.UTC),
391-
templateAllowAutostop: false,
392-
templateDefaultTTL: 0,
393-
useMaxTTL: true,
394-
templateMaxTTL: time.Hour, // should NOT be ignored
395-
userQuietHoursSchedule: sydneyQuietHours,
396-
templateAutostopRequirement: schedule.TemplateAutostopRequirement{
397-
DaysOfWeek: 0b00100000, // Saturday
398-
Weeks: 0, // weekly
399-
},
400-
workspaceTTL: 0,
401-
// expectedDeadline is copied from expectedMaxDeadline.
402-
expectedMaxDeadline: fridayEveningSydney.Add(time.Hour).In(time.UTC),
403-
},
404367
}
405368

406369
for _, c := range cases {
@@ -418,8 +381,6 @@ func TestCalculateAutoStop(t *testing.T) {
418381
UserAutostartEnabled: false,
419382
UserAutostopEnabled: c.templateAllowAutostop,
420383
DefaultTTL: c.templateDefaultTTL,
421-
MaxTTL: c.templateMaxTTL,
422-
UseMaxTTL: c.useMaxTTL,
423384
AutostopRequirement: c.templateAutostopRequirement,
424385
}, nil
425386
},

coderd/templates.go

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
228228
var (
229229
defaultTTL time.Duration
230230
activityBump = time.Hour // default
231-
maxTTL time.Duration
232231
autostopRequirementDaysOfWeek []string
233232
autostartRequirementDaysOfWeek []string
234233
autostopRequirementWeeks int64
@@ -273,12 +272,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
273272
if activityBump < 0 {
274273
validErrs = append(validErrs, codersdk.ValidationError{Field: "activity_bump_ms", Detail: "Must be a positive integer."})
275274
}
276-
if maxTTL < 0 {
277-
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_ttl_ms", Detail: "Must be a positive integer."})
278-
}
279-
if maxTTL != 0 && defaultTTL > maxTTL {
280-
validErrs = append(validErrs, codersdk.ValidationError{Field: "default_ttl_ms", Detail: "Must be less than or equal to max_ttl_ms if max_ttl_ms is set."})
281-
}
275+
282276
if len(autostopRequirementDaysOfWeek) > 0 {
283277
autostopRequirementDaysOfWeekParsed, err = codersdk.WeekdaysToBitmap(autostopRequirementDaysOfWeek)
284278
if err != nil {
@@ -291,12 +285,7 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
291285
validErrs = append(validErrs, codersdk.ValidationError{Field: "autostart_requirement.days_of_week", Detail: err.Error()})
292286
}
293287
}
294-
if createTemplate.MaxTTLMillis != nil {
295-
maxTTL = time.Duration(*createTemplate.MaxTTLMillis) * time.Millisecond
296-
}
297-
if maxTTL != 0 && len(autostopRequirementDaysOfWeek) > 0 {
298-
validErrs = append(validErrs, codersdk.ValidationError{Field: "autostop_requirement.days_of_week", Detail: "Cannot be set if max_ttl_ms is set."})
299-
}
288+
300289
if autostopRequirementWeeks < 0 {
301290
validErrs = append(validErrs, codersdk.ValidationError{Field: "autostop_requirement.weeks", Detail: "Must be a positive integer."})
302291
}

0 commit comments

Comments
 (0)