Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit52f68e6

Browse files
committed
The point at which I realized I'm doing this wrong
1 parentc43c2ff commit52f68e6

File tree

1 file changed

+57
-46
lines changed

1 file changed

+57
-46
lines changed

‎coderd/httpmw/workspaceactivitybump.go

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -26,62 +26,73 @@ func ActivityBumpWorkspace(log slog.Logger, db database.Store) func(h http.Handl
2626
// We run the bump logic asynchronously since the result doesn't
2727
// affect the response.
2828
gofunc() {
29-
// We cannot use the Request context since the goroutine
30-
// may be around after the request terminates.
31-
// We set a short timeout so if the app is under load, these
32-
// low priority operations fail first.
33-
ctx,cancel:=context.WithTimeout(context.Background(),time.Second*5)
34-
defercancel()
29+
bump:=func() {
30+
// We cannot use the Request context since the goroutine
31+
// may be around after the request terminates.
32+
// We set a short timeout so if the app is under load, these
33+
// low priority operations fail first.
34+
ctx,cancel:=context.WithTimeout(context.Background(),time.Second*5)
35+
defercancel()
3536

36-
err:=db.InTx(func(s database.Store)error {
37-
build,err:=s.GetLatestWorkspaceBuildByWorkspaceID(ctx,workspace.ID)
38-
log.Debug(ctx,"build",slog.F("build",build))
39-
iferrors.Is(err,sql.ErrNoRows) {
40-
returnnil
41-
}elseiferr!=nil {
42-
returnxerrors.Errorf("get latest workspace build: %w",err)
43-
}
37+
err:=db.InTx(func(s database.Store)error {
38+
build,err:=s.GetLatestWorkspaceBuildByWorkspaceID(ctx,workspace.ID)
39+
log.Debug(ctx,"build",slog.F("build",build))
40+
iferrors.Is(err,sql.ErrNoRows) {
41+
returnnil
42+
}elseiferr!=nil {
43+
returnxerrors.Errorf("get latest workspace build: %w",err)
44+
}
4445

45-
job,err:=s.GetProvisionerJobByID(ctx,build.JobID)
46-
iferr!=nil {
47-
returnxerrors.Errorf("get provisioner job: %w",err)
48-
}
46+
job,err:=s.GetProvisionerJobByID(ctx,build.JobID)
47+
iferr!=nil {
48+
returnxerrors.Errorf("get provisioner job: %w",err)
49+
}
4950

50-
ifbuild.Transition!=database.WorkspaceTransitionStart||!job.CompletedAt.Valid {
51-
returnnil
52-
}
51+
ifbuild.Transition!=database.WorkspaceTransitionStart||!job.CompletedAt.Valid {
52+
returnnil
53+
}
5354

54-
ifbuild.Deadline.IsZero() {
55-
// Workspace shutdown is manual
56-
returnnil
57-
}
55+
ifbuild.Deadline.IsZero() {
56+
// Workspace shutdown is manual
57+
returnnil
58+
}
5859

59-
// We sent bumpThreshold slightly under bumpAmount to minimize DB writes.
60-
const (
61-
bumpAmount=time.Hour
62-
bumpThreshold=time.Hour- (time.Minute*10)
63-
)
60+
// We sent bumpThreshold slightly under bumpAmount to minimize DB writes.
61+
const (
62+
bumpAmount=time.Hour
63+
bumpThreshold=time.Hour- (time.Minute*10)
64+
)
6465

65-
if!build.Deadline.Before(time.Now().Add(bumpThreshold)) {
66-
returnnil
67-
}
66+
if!build.Deadline.Before(time.Now().Add(bumpThreshold)) {
67+
returnnil
68+
}
6869

69-
newDeadline:=time.Now().Add(bumpAmount)
70+
newDeadline:=time.Now().Add(bumpAmount)
7071

71-
iferr:=s.UpdateWorkspaceBuildByID(ctx, database.UpdateWorkspaceBuildByIDParams{
72-
ID:build.ID,
73-
UpdatedAt:build.UpdatedAt,
74-
ProvisionerState:build.ProvisionerState,
75-
Deadline:newDeadline,
76-
});err!=nil {
77-
returnxerrors.Errorf("update workspace build: %w",err)
78-
}
79-
returnnil
80-
})
72+
iferr:=s.UpdateWorkspaceBuildByID(ctx, database.UpdateWorkspaceBuildByIDParams{
73+
ID:build.ID,
74+
UpdatedAt:build.UpdatedAt,
75+
ProvisionerState:build.ProvisionerState,
76+
Deadline:newDeadline,
77+
});err!=nil {
78+
returnxerrors.Errorf("update workspace build: %w",err)
79+
}
80+
returnnil
81+
})
8182

82-
iferr!=nil {
83-
log.Error(ctx,"bump failed",slog.Error(err))
83+
iferr!=nil {
84+
log.Error(ctx,"bump failed",slog.Error(err))
85+
}else {
86+
log.Debug(
87+
ctx,"bumped deadline from activity",
88+
slog.F("workspace_id",workspace.ID),
89+
)
90+
}
8491
}
92+
// For long running connections (e.g. web terminal), we need
93+
// to bump periodically
94+
// ticker := time.NewTicker(time.Minute)
95+
bump()
8596
}()
8697
next.ServeHTTP(w,r)
8798
})

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp