Skip to content

Commit b25cef5

Browse files
committed
chore: continued removal of max_ttl
1 parent dc1cccf commit b25cef5

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
@@ -1047,104 +1047,84 @@ func TestCompleteJob(t *testing.T) {
10471047
name string
10481048
templateAllowAutostop bool
10491049
templateDefaultTTL time.Duration
1050-
templateMaxTTL time.Duration
10511050
workspaceTTL time.Duration
10521051
transition database.WorkspaceTransition
10531052
// The TTL is actually a deadline time on the workspace_build row,
10541053
// so during the test this will be compared to be within 15 seconds
10551054
// of the expected value.
1056-
expectedTTL time.Duration
1057-
expectedMaxTTL time.Duration
1055+
expectedTTL time.Duration
10581056
}{
10591057
{
10601058
name: "OK",
10611059
templateAllowAutostop: true,
10621060
templateDefaultTTL: 0,
1063-
templateMaxTTL: 0,
10641061
workspaceTTL: 0,
10651062
transition: database.WorkspaceTransitionStart,
10661063
expectedTTL: 0,
1067-
expectedMaxTTL: 0,
10681064
},
10691065
{
10701066
name: "Delete",
10711067
templateAllowAutostop: true,
10721068
templateDefaultTTL: 0,
1073-
templateMaxTTL: 0,
10741069
workspaceTTL: 0,
10751070
transition: database.WorkspaceTransitionDelete,
10761071
expectedTTL: 0,
1077-
expectedMaxTTL: 0,
10781072
},
10791073
{
10801074
name: "WorkspaceTTL",
10811075
templateAllowAutostop: true,
10821076
templateDefaultTTL: 0,
1083-
templateMaxTTL: 0,
10841077
workspaceTTL: time.Hour,
10851078
transition: database.WorkspaceTransitionStart,
10861079
expectedTTL: time.Hour,
1087-
expectedMaxTTL: 0,
10881080
},
10891081
{
10901082
name: "TemplateDefaultTTLIgnored",
10911083
templateAllowAutostop: true,
10921084
templateDefaultTTL: time.Hour,
1093-
templateMaxTTL: 0,
10941085
workspaceTTL: 0,
10951086
transition: database.WorkspaceTransitionStart,
10961087
expectedTTL: 0,
1097-
expectedMaxTTL: 0,
10981088
},
10991089
{
11001090
name: "WorkspaceTTLOverridesTemplateDefaultTTL",
11011091
templateAllowAutostop: true,
11021092
templateDefaultTTL: 2 * time.Hour,
1103-
templateMaxTTL: 0,
11041093
workspaceTTL: time.Hour,
11051094
transition: database.WorkspaceTransitionStart,
11061095
expectedTTL: time.Hour,
1107-
expectedMaxTTL: 0,
11081096
},
11091097
{
11101098
name: "TemplateMaxTTL",
11111099
templateAllowAutostop: true,
11121100
templateDefaultTTL: 0,
1113-
templateMaxTTL: time.Hour,
11141101
workspaceTTL: 0,
11151102
transition: database.WorkspaceTransitionStart,
1116-
expectedTTL: time.Hour,
1117-
expectedMaxTTL: time.Hour,
1103+
expectedTTL: 0,
11181104
},
11191105
{
11201106
name: "TemplateMaxTTLOverridesWorkspaceTTL",
11211107
templateAllowAutostop: true,
11221108
templateDefaultTTL: 0,
1123-
templateMaxTTL: 2 * time.Hour,
11241109
workspaceTTL: 3 * time.Hour,
11251110
transition: database.WorkspaceTransitionStart,
1126-
expectedTTL: 2 * time.Hour,
1127-
expectedMaxTTL: 2 * time.Hour,
1111+
expectedTTL: 3 * time.Hour,
11281112
},
11291113
{
11301114
name: "TemplateMaxTTLOverridesTemplateDefaultTTL",
11311115
templateAllowAutostop: true,
11321116
templateDefaultTTL: 3 * time.Hour,
1133-
templateMaxTTL: 2 * time.Hour,
11341117
workspaceTTL: 0,
11351118
transition: database.WorkspaceTransitionStart,
1136-
expectedTTL: 2 * time.Hour,
1137-
expectedMaxTTL: 2 * time.Hour,
1119+
expectedTTL: 0,
11381120
},
11391121
{
11401122
name: "TemplateBlockWorkspaceTTL",
11411123
templateAllowAutostop: false,
11421124
templateDefaultTTL: 3 * time.Hour,
1143-
templateMaxTTL: 6 * time.Hour,
11441125
workspaceTTL: 4 * time.Hour,
11451126
transition: database.WorkspaceTransitionStart,
11461127
expectedTTL: 3 * time.Hour,
1147-
expectedMaxTTL: 6 * time.Hour,
11481128
},
11491129
}
11501130

@@ -1163,8 +1143,6 @@ func TestCompleteJob(t *testing.T) {
11631143
UserAutostartEnabled: false,
11641144
UserAutostopEnabled: c.templateAllowAutostop,
11651145
DefaultTTL: c.templateDefaultTTL,
1166-
MaxTTL: c.templateMaxTTL,
1167-
UseMaxTTL: true,
11681146
}, nil
11691147
},
11701148
}
@@ -1189,7 +1167,6 @@ func TestCompleteJob(t *testing.T) {
11891167
UpdatedAt: dbtime.Now(),
11901168
AllowUserAutostart: c.templateAllowAutostop,
11911169
DefaultTTL: int64(c.templateDefaultTTL),
1192-
MaxTTL: int64(c.templateMaxTTL),
11931170
})
11941171
require.NoError(t, err)
11951172
file := dbgen.File(t, db, database.File{CreatedBy: user.ID})
@@ -1271,12 +1248,10 @@ func TestCompleteJob(t *testing.T) {
12711248
} else {
12721249
require.WithinDuration(t, time.Now().Add(c.expectedTTL), workspaceBuild.Deadline, 15*time.Second, "deadline does not match expected")
12731250
}
1274-
if c.expectedMaxTTL == 0 {
1275-
require.True(t, workspaceBuild.MaxDeadline.IsZero())
1276-
} else {
1277-
require.WithinDuration(t, time.Now().Add(c.expectedMaxTTL), workspaceBuild.MaxDeadline, 15*time.Second, "max deadline does not match expected")
1278-
require.GreaterOrEqual(t, workspaceBuild.MaxDeadline.Unix(), workspaceBuild.Deadline.Unix(), "max deadline is smaller than deadline")
1279-
}
1251+
1252+
// Legacy TTL does not use scheduling requirements that will set
1253+
// a max deadline.
1254+
require.True(t, workspaceBuild.MaxDeadline.IsZero())
12801255
})
12811256
}
12821257
})
@@ -1386,7 +1361,6 @@ func TestCompleteJob(t *testing.T) {
13861361
UserAutostartEnabled: false,
13871362
UserAutostopEnabled: true,
13881363
DefaultTTL: 0,
1389-
UseMaxTTL: false,
13901364
AutostopRequirement: c.templateAutostopRequirement,
13911365
}, nil
13921366
},

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)