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)