Skip to content

Commit 2bea418

Browse files
committed
integrate xstate
1 parent 6ac1ba2 commit 2bea418

File tree

15 files changed

+251
-56
lines changed

15 files changed

+251
-56
lines changed

coderd/apidoc/docs.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/autobuild/lifecycle_executor.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func (e *Executor) runOnce(t time.Time) Stats {
178178
// Lock the workspace if it has breached the template's
179179
// threshold for inactivity.
180180
if reason == database.BuildReasonAutolock {
181-
err = tx.UpdateWorkspaceLockedDeletingAt(e.ctx, database.UpdateWorkspaceLockedDeletingAtParams{
181+
ws, err = tx.UpdateWorkspaceLockedDeletingAt(e.ctx, database.UpdateWorkspaceLockedDeletingAtParams{
182182
ID: ws.ID,
183183
LockedAt: sql.NullTime{
184184
Time: database.Now(),

coderd/database/dbauthz/dbauthz.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -2511,11 +2511,11 @@ func (q *querier) UpdateWorkspaceLastUsedAt(ctx context.Context, arg database.Up
25112511
return update(q.log, q.auth, fetch, q.db.UpdateWorkspaceLastUsedAt)(ctx, arg)
25122512
}
25132513

2514-
func (q *querier) UpdateWorkspaceLockedDeletingAt(ctx context.Context, arg database.UpdateWorkspaceLockedDeletingAtParams) error {
2514+
func (q *querier) UpdateWorkspaceLockedDeletingAt(ctx context.Context, arg database.UpdateWorkspaceLockedDeletingAtParams) (database.Workspace, error) {
25152515
fetch := func(ctx context.Context, arg database.UpdateWorkspaceLockedDeletingAtParams) (database.Workspace, error) {
25162516
return q.db.GetWorkspaceByID(ctx, arg.ID)
25172517
}
2518-
return update(q.log, q.auth, fetch, q.db.UpdateWorkspaceLockedDeletingAt)(ctx, arg)
2518+
return updateWithReturn(q.log, q.auth, fetch, q.db.UpdateWorkspaceLockedDeletingAt)(ctx, arg)
25192519
}
25202520

25212521
func (q *querier) UpdateWorkspaceProxy(ctx context.Context, arg database.UpdateWorkspaceProxyParams) (database.WorkspaceProxy, error) {

coderd/database/dbfake/dbfake.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -5082,9 +5082,9 @@ func (q *FakeQuerier) UpdateWorkspaceLastUsedAt(_ context.Context, arg database.
50825082
return sql.ErrNoRows
50835083
}
50845084

5085-
func (q *FakeQuerier) UpdateWorkspaceLockedDeletingAt(_ context.Context, arg database.UpdateWorkspaceLockedDeletingAtParams) error {
5085+
func (q *FakeQuerier) UpdateWorkspaceLockedDeletingAt(_ context.Context, arg database.UpdateWorkspaceLockedDeletingAtParams) (database.Workspace, error) {
50865086
if err := validateDatabaseType(arg); err != nil {
5087-
return err
5087+
return database.Workspace{}, err
50885088
}
50895089
q.mutex.Lock()
50905090
defer q.mutex.Unlock()
@@ -5106,7 +5106,7 @@ func (q *FakeQuerier) UpdateWorkspaceLockedDeletingAt(_ context.Context, arg dat
51065106
}
51075107
}
51085108
if template.ID == uuid.Nil {
5109-
return xerrors.Errorf("unable to find workspace template")
5109+
return database.Workspace{}, xerrors.Errorf("unable to find workspace template")
51105110
}
51115111
if template.LockedTTL > 0 {
51125112
workspace.DeletingAt = sql.NullTime{
@@ -5116,9 +5116,9 @@ func (q *FakeQuerier) UpdateWorkspaceLockedDeletingAt(_ context.Context, arg dat
51165116
}
51175117
}
51185118
q.workspaces[index] = workspace
5119-
return nil
5119+
return workspace, nil
51205120
}
5121-
return sql.ErrNoRows
5121+
return database.Workspace{}, sql.ErrNoRows
51225122
}
51235123

51245124
func (q *FakeQuerier) UpdateWorkspaceProxy(_ context.Context, arg database.UpdateWorkspaceProxyParams) (database.WorkspaceProxy, error) {

coderd/database/dbmetrics/dbmetrics.go

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

+4-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+25-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

+3-2
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ WHERE
482482
)
483483
) AND workspaces.deleted = 'false';
484484

485-
-- name: UpdateWorkspaceLockedDeletingAt :exec
485+
-- name: UpdateWorkspaceLockedDeletingAt :one
486486
UPDATE
487487
workspaces
488488
SET
@@ -498,7 +498,8 @@ FROM
498498
WHERE
499499
workspaces.template_id = templates.id
500500
AND
501-
workspaces.id = $1;
501+
workspaces.id = $1
502+
RETURNING workspaces.*;
502503

503504
-- name: UpdateWorkspacesDeletingAtByTemplateID :exec
504505
UPDATE

coderd/workspaces.go

+17-9
Original file line numberDiff line numberDiff line change
@@ -767,7 +767,7 @@ func (api *API) putWorkspaceTTL(rw http.ResponseWriter, r *http.Request) {
767767
// @Tags Workspaces
768768
// @Param workspace path string true "Workspace ID" format(uuid)
769769
// @Param request body codersdk.UpdateWorkspaceLock true "Lock or unlock a workspace"
770-
// @Success 200 {object} codersdk.Response
770+
// @Success 200 {object} codersdk.Workspace
771771
// @Router /workspaces/{workspace}/lock [put]
772772
func (api *API) putWorkspaceLock(rw http.ResponseWriter, r *http.Request) {
773773
ctx := r.Context()
@@ -778,9 +778,6 @@ func (api *API) putWorkspaceLock(rw http.ResponseWriter, r *http.Request) {
778778
return
779779
}
780780

781-
code := http.StatusOK
782-
resp := codersdk.Response{}
783-
784781
// If the workspace is already in the desired state do nothing!
785782
if workspace.LockedAt.Valid == req.Lock {
786783
httpapi.Write(ctx, rw, http.StatusNotModified, codersdk.Response{
@@ -796,7 +793,7 @@ func (api *API) putWorkspaceLock(rw http.ResponseWriter, r *http.Request) {
796793
lockedAt.Time = database.Now()
797794
}
798795

799-
err := api.Database.UpdateWorkspaceLockedDeletingAt(ctx, database.UpdateWorkspaceLockedDeletingAtParams{
796+
workspace, err := api.Database.UpdateWorkspaceLockedDeletingAt(ctx, database.UpdateWorkspaceLockedDeletingAtParams{
800797
ID: workspace.ID,
801798
LockedAt: lockedAt,
802799
})
@@ -808,10 +805,21 @@ func (api *API) putWorkspaceLock(rw http.ResponseWriter, r *http.Request) {
808805
return
809806
}
810807

811-
// TODO should we kick off a build to stop the workspace if it's started
812-
// from this endpoint? I'm leaning no to keep things simple and kick
813-
// the responsibility back to the client.
814-
httpapi.Write(ctx, rw, code, resp)
808+
data, err := api.workspaceData(ctx, []database.Workspace{workspace})
809+
if err != nil {
810+
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
811+
Message: "Internal error fetching workspace resources.",
812+
Detail: err.Error(),
813+
})
814+
return
815+
}
816+
817+
httpapi.Write(ctx, rw, http.StatusOK, convertWorkspace(
818+
workspace,
819+
data.builds[0],
820+
data.templates[0],
821+
findUser(workspace.OwnerID, data.users),
822+
))
815823
}
816824

817825
// @Summary Extend workspace deadline by ID

0 commit comments

Comments
 (0)