mirror of
https://github.com/coder/coder.git
synced 2026-09-22 05:05:20 +08:00
chore: improve build deadline code (#19203)
- Adds/improves a lot of comments to make the autostop calculation code clearer - Changes the behavior of the enterprise template schedule store to match the behavior of the workspace TTL endpoint when the new TTL is zero - Fixes a bug in the workspace TTL endpoint where it could unset the build deadline, even though a max_deadline was specified - Adds a new constraint to the workspace_builds table that enforces the deadline is non-zero and below the max_deadline if it is set - Adds CHECK constraint enum generation to scripts/dbgen, used for testing the above constraint - Adds Dean and Danielle as CODEOWNERS for the autostop calculation code
This commit is contained in:
+20
-6
@@ -45,8 +45,8 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
ttlMin = time.Minute //nolint:revive // min here means 'minimum' not 'minutes'
|
||||
ttlMax = 30 * 24 * time.Hour
|
||||
ttlMinimum = time.Minute
|
||||
ttlMaximum = 30 * 24 * time.Hour
|
||||
|
||||
errTTLMin = xerrors.New("time until shutdown must be at least one minute")
|
||||
errTTLMax = xerrors.New("time until shutdown must be less than 30 days")
|
||||
@@ -1190,8 +1190,22 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) {
|
||||
|
||||
if build.Transition == database.WorkspaceTransitionStart {
|
||||
if err = s.UpdateWorkspaceBuildDeadlineByID(ctx, database.UpdateWorkspaceBuildDeadlineByIDParams{
|
||||
ID: build.ID,
|
||||
Deadline: time.Time{},
|
||||
ID: build.ID,
|
||||
// Use the max_deadline as the new build deadline. It will
|
||||
// either be zero (our target), or a non-zero value that we
|
||||
// need to abide by anyway due to template policy.
|
||||
//
|
||||
// Previously, we would always set the deadline to zero,
|
||||
// which was incorrect behavior. When max_deadline is
|
||||
// non-zero, deadline must be set to a non-zero value that
|
||||
// is less than max_deadline.
|
||||
//
|
||||
// Disabling TTL autostop (at a workspace or template level)
|
||||
// does not trump the template's autostop requirement.
|
||||
//
|
||||
// Refer to the comments on schedule.CalculateAutostop for
|
||||
// more information.
|
||||
Deadline: build.MaxDeadline,
|
||||
MaxDeadline: build.MaxDeadline,
|
||||
UpdatedAt: dbtime.Time(api.Clock.Now()),
|
||||
}); err != nil {
|
||||
@@ -2391,11 +2405,11 @@ func validWorkspaceTTLMillis(millis *int64, templateDefault time.Duration) (sql.
|
||||
|
||||
dur := time.Duration(*millis) * time.Millisecond
|
||||
truncated := dur.Truncate(time.Minute)
|
||||
if truncated < ttlMin {
|
||||
if truncated < ttlMinimum {
|
||||
return sql.NullInt64{}, errTTLMin
|
||||
}
|
||||
|
||||
if truncated > ttlMax {
|
||||
if truncated > ttlMaximum {
|
||||
return sql.NullInt64{}, errTTLMax
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user