Skip to content

Commit b12e19e

Browse files
committed
address PR comments
1 parent e3df43a commit b12e19e

File tree

4 files changed

+10
-11
lines changed

4 files changed

+10
-11
lines changed

coderd/autobuild/executor/lifecycle_executor.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,7 @@ func (e *Executor) runOnce(t time.Time) error {
9898
)
9999
continue
100100
}
101-
// Truncate to nearest minute for consistency with autostart
102-
// behavior, and add one minute for padding.
101+
// Truncate to nearest minute for consistency with autostart behavior
103102
nextTransition = priorHistory.Deadline.Truncate(time.Minute)
104103
case database.WorkspaceTransitionStop:
105104
validTransition = database.WorkspaceTransitionStart

coderd/provisionerdaemons.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
550550
workspace, err := db.GetWorkspaceByID(ctx, workspaceBuild.WorkspaceID)
551551
if err == nil {
552552
if workspace.Ttl.Valid {
553-
workspaceDeadline = now.Add(time.Duration(workspace.Ttl.Int64))
553+
workspaceDeadline = now.Add(time.Duration(workspace.Ttl.Int64)).Truncate(time.Minute)
554554
}
555555
} else {
556556
// Huh? Did the workspace get deleted?
@@ -569,8 +569,8 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
569569
return xerrors.Errorf("update provisioner job: %w", err)
570570
}
571571
err = db.UpdateWorkspaceBuildByID(ctx, database.UpdateWorkspaceBuildByIDParams{
572-
Deadline: workspaceDeadline,
573572
ID: workspaceBuild.ID,
573+
Deadline: workspaceDeadline,
574574
ProvisionerState: jobType.WorkspaceBuild.State,
575575
UpdatedAt: now,
576576
})

coderd/workspaces.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -574,8 +574,7 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) {
574574
func (api *API) putExtendWorkspace(rw http.ResponseWriter, r *http.Request) {
575575
workspace := httpmw.WorkspaceParam(r)
576576

577-
if !api.Authorize(rw, r, rbac.ActionUpdate, rbac.ResourceWorkspace.
578-
InOrg(workspace.OrganizationID).WithOwner(workspace.OwnerID.String()).WithID(workspace.ID.String())) {
577+
if !api.Authorize(rw, r, rbac.ActionUpdate, workspace) {
579578
return
580579
}
581580

@@ -598,18 +597,19 @@ func (api *API) putExtendWorkspace(rw http.ResponseWriter, r *http.Request) {
598597
return xerrors.Errorf("workspace must be started, current status: %s", build.Transition)
599598
}
600599

601-
newDeadline := req.Deadline.UTC()
600+
newDeadline := req.Deadline.Truncate(time.Minute).UTC()
602601
if newDeadline.IsZero() {
603602
// This should not be possible because the struct validation field enforces a non-zero value.
604603
code = http.StatusBadRequest
605604
return xerrors.New("new deadline cannot be zero")
606605
}
607606

608-
if newDeadline.Before(build.Deadline) {
607+
if newDeadline.Before(build.Deadline) || newDeadline.Before(time.Now()) {
609608
code = http.StatusBadRequest
610609
return xerrors.Errorf("new deadline %q must be after existing deadline %q", newDeadline.Format(time.RFC3339), build.Deadline.Format(time.RFC3339))
611610
}
612611

612+
// both newDeadline and build.Deadline are truncated to time.Minute
613613
if newDeadline == build.Deadline {
614614
code = http.StatusNotModified
615615
return nil

coderd/workspaces_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ func TestWorkspaceExtend(t *testing.T) {
633633

634634
workspace, err := client.Workspace(ctx, workspace.ID)
635635
require.NoError(t, err, "fetch provisioned workspace")
636-
require.InDelta(t, oldDeadline.Unix(), workspace.LatestBuild.Deadline.Unix(), 1)
636+
require.InDelta(t, oldDeadline.Unix(), workspace.LatestBuild.Deadline.Unix(), 60)
637637

638638
// Updating the deadline should succeed
639639
req := codersdk.PutExtendWorkspaceRequest{
@@ -645,7 +645,7 @@ func TestWorkspaceExtend(t *testing.T) {
645645
// Ensure deadline set correctly
646646
updated, err := client.Workspace(ctx, workspace.ID)
647647
require.NoError(t, err, "failed to fetch updated workspace")
648-
require.InDelta(t, newDeadline.Unix(), updated.LatestBuild.Deadline.Unix(), 1)
648+
require.InDelta(t, newDeadline.Unix(), updated.LatestBuild.Deadline.Unix(), 60)
649649

650650
// Zero time should fail
651651
err = client.PutExtendWorkspace(ctx, workspace.ID, codersdk.PutExtendWorkspaceRequest{
@@ -662,7 +662,7 @@ func TestWorkspaceExtend(t *testing.T) {
662662
// Ensure deadline still set correctly
663663
updated, err = client.Workspace(ctx, workspace.ID)
664664
require.NoError(t, err, "failed to fetch updated workspace")
665-
require.InDelta(t, newDeadline.Unix(), updated.LatestBuild.Deadline.Unix(), 1)
665+
require.InDelta(t, newDeadline.Unix(), updated.LatestBuild.Deadline.Unix(), 60)
666666
}
667667

668668
func TestWorkspaceWatcher(t *testing.T) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy