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

Commit4699393

Browse files
authored
fix: upsertcoder_app resources in case they are persistent (#18509)
1 parent82af2e0 commit4699393

File tree

12 files changed

+297
-161
lines changed

12 files changed

+297
-161
lines changed

‎coderd/agentapi/subagent.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ import (
1212
"golang.org/x/xerrors"
1313

1414
"cdr.dev/slog"
15+
"github.com/coder/quartz"
16+
1517
agentproto"github.com/coder/coder/v2/agent/proto"
1618
"github.com/coder/coder/v2/coderd/database"
1719
"github.com/coder/coder/v2/coderd/database/dbauthz"
1820
"github.com/coder/coder/v2/codersdk"
1921
"github.com/coder/coder/v2/provisioner"
20-
"github.com/coder/quartz"
2122
)
2223

2324
typeSubAgentAPIstruct {
@@ -164,8 +165,8 @@ func (a *SubAgentAPI) CreateSubAgent(ctx context.Context, req *agentproto.Create
164165
}
165166
}
166167

167-
_,err:=a.Database.InsertWorkspaceApp(ctx, database.InsertWorkspaceAppParams{
168-
ID:uuid.New(),
168+
_,err:=a.Database.UpsertWorkspaceApp(ctx, database.UpsertWorkspaceAppParams{
169+
ID:uuid.New(),// NOTE: we may need to maintain the app's ID here for stability, but for now we'll leave this as-is.
169170
CreatedAt:createdAt,
170171
AgentID:subAgent.ID,
171172
Slug:app.Slug,

‎coderd/database/dbauthz/dbauthz.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3938,23 +3938,6 @@ func (q *querier) InsertWorkspaceAgentStats(ctx context.Context, arg database.In
39383938
returnq.db.InsertWorkspaceAgentStats(ctx,arg)
39393939
}
39403940

3941-
func (q*querier)InsertWorkspaceApp(ctx context.Context,arg database.InsertWorkspaceAppParams) (database.WorkspaceApp,error) {
3942-
// NOTE(DanielleMaywood):
3943-
// It is possible for there to exist an agent without a workspace.
3944-
// This means that we want to allow execution to continue if
3945-
// there isn't a workspace found to allow this behavior to continue.
3946-
workspace,err:=q.db.GetWorkspaceByAgentID(ctx,arg.AgentID)
3947-
iferr!=nil&&!errors.Is(err,sql.ErrNoRows) {
3948-
return database.WorkspaceApp{},err
3949-
}
3950-
3951-
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,workspace);err!=nil {
3952-
return database.WorkspaceApp{},err
3953-
}
3954-
3955-
returnq.db.InsertWorkspaceApp(ctx,arg)
3956-
}
3957-
39583941
func (q*querier)InsertWorkspaceAppStats(ctx context.Context,arg database.InsertWorkspaceAppStatsParams)error {
39593942
iferr:=q.authorizeContext(ctx,policy.ActionCreate,rbac.ResourceSystem);err!=nil {
39603943
returnerr
@@ -5181,6 +5164,23 @@ func (q *querier) UpsertWorkspaceAgentPortShare(ctx context.Context, arg databas
51815164
returnq.db.UpsertWorkspaceAgentPortShare(ctx,arg)
51825165
}
51835166

5167+
func (q*querier)UpsertWorkspaceApp(ctx context.Context,arg database.UpsertWorkspaceAppParams) (database.WorkspaceApp,error) {
5168+
// NOTE(DanielleMaywood):
5169+
// It is possible for there to exist an agent without a workspace.
5170+
// This means that we want to allow execution to continue if
5171+
// there isn't a workspace found to allow this behavior to continue.
5172+
workspace,err:=q.db.GetWorkspaceByAgentID(ctx,arg.AgentID)
5173+
iferr!=nil&&!errors.Is(err,sql.ErrNoRows) {
5174+
return database.WorkspaceApp{},err
5175+
}
5176+
5177+
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,workspace);err!=nil {
5178+
return database.WorkspaceApp{},err
5179+
}
5180+
5181+
returnq.db.UpsertWorkspaceApp(ctx,arg)
5182+
}
5183+
51845184
func (q*querier)UpsertWorkspaceAppAuditSession(ctx context.Context,arg database.UpsertWorkspaceAppAuditSessionParams) (bool,error) {
51855185
iferr:=q.authorizeContext(ctx,policy.ActionUpdate,rbac.ResourceSystem);err!=nil {
51865186
returnfalse,err

‎coderd/database/dbauthz/dbauthz_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4114,7 +4114,7 @@ func (s *MethodTestSuite) TestSystemFunctions() {
41144114
APIKeyScope:database.AgentKeyScopeEnumAll,
41154115
}).Asserts(ws,policy.ActionCreateAgent)
41164116
}))
4117-
s.Run("InsertWorkspaceApp",s.Subtest(func(db database.Store,check*expects) {
4117+
s.Run("UpsertWorkspaceApp",s.Subtest(func(db database.Store,check*expects) {
41184118
_=dbgen.User(s.T(),db, database.User{})
41194119
u:=dbgen.User(s.T(),db, database.User{})
41204120
o:=dbgen.Organization(s.T(),db, database.Organization{})
@@ -4130,7 +4130,7 @@ func (s *MethodTestSuite) TestSystemFunctions() {
41304130
_=dbgen.WorkspaceBuild(s.T(),db, database.WorkspaceBuild{WorkspaceID:ws.ID,JobID:j.ID,TemplateVersionID:tv.ID})
41314131
res:=dbgen.WorkspaceResource(s.T(),db, database.WorkspaceResource{JobID:j.ID})
41324132
agent:=dbgen.WorkspaceAgent(s.T(),db, database.WorkspaceAgent{ResourceID:res.ID})
4133-
check.Args(database.InsertWorkspaceAppParams{
4133+
check.Args(database.UpsertWorkspaceAppParams{
41344134
ID:uuid.New(),
41354135
AgentID:agent.ID,
41364136
Health:database.WorkspaceAppHealthDisabled,

‎coderd/database/dbgen/dbgen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,7 @@ func ProvisionerKey(t testing.TB, db database.Store, orig database.ProvisionerKe
778778
}
779779

780780
funcWorkspaceApp(t testing.TB,db database.Store,orig database.WorkspaceApp) database.WorkspaceApp {
781-
resource,err:=db.InsertWorkspaceApp(genCtx, database.InsertWorkspaceAppParams{
781+
resource,err:=db.UpsertWorkspaceApp(genCtx, database.UpsertWorkspaceAppParams{
782782
ID:takeFirst(orig.ID,uuid.New()),
783783
CreatedAt:takeFirst(orig.CreatedAt,dbtime.Now()),
784784
AgentID:takeFirst(orig.AgentID,uuid.New()),

‎coderd/database/dbmem/dbmem.go

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10018,48 +10018,6 @@ func (q *FakeQuerier) InsertWorkspaceAgentStats(_ context.Context, arg database.
1001810018
returnnil
1001910019
}
1002010020

10021-
func (q*FakeQuerier)InsertWorkspaceApp(_ context.Context,arg database.InsertWorkspaceAppParams) (database.WorkspaceApp,error) {
10022-
iferr:=validateDatabaseType(arg);err!=nil {
10023-
return database.WorkspaceApp{},err
10024-
}
10025-
10026-
q.mutex.Lock()
10027-
deferq.mutex.Unlock()
10028-
10029-
ifarg.SharingLevel=="" {
10030-
arg.SharingLevel=database.AppSharingLevelOwner
10031-
}
10032-
10033-
ifarg.OpenIn=="" {
10034-
arg.OpenIn=database.WorkspaceAppOpenInSlimWindow
10035-
}
10036-
10037-
// nolint:gosimple
10038-
workspaceApp:= database.WorkspaceApp{
10039-
ID:arg.ID,
10040-
AgentID:arg.AgentID,
10041-
CreatedAt:arg.CreatedAt,
10042-
Slug:arg.Slug,
10043-
DisplayName:arg.DisplayName,
10044-
Icon:arg.Icon,
10045-
Command:arg.Command,
10046-
Url:arg.Url,
10047-
External:arg.External,
10048-
Subdomain:arg.Subdomain,
10049-
SharingLevel:arg.SharingLevel,
10050-
HealthcheckUrl:arg.HealthcheckUrl,
10051-
HealthcheckInterval:arg.HealthcheckInterval,
10052-
HealthcheckThreshold:arg.HealthcheckThreshold,
10053-
Health:arg.Health,
10054-
Hidden:arg.Hidden,
10055-
DisplayOrder:arg.DisplayOrder,
10056-
OpenIn:arg.OpenIn,
10057-
DisplayGroup:arg.DisplayGroup,
10058-
}
10059-
q.workspaceApps=append(q.workspaceApps,workspaceApp)
10060-
returnworkspaceApp,nil
10061-
}
10062-
1006310021
func (q*FakeQuerier)InsertWorkspaceAppStats(_ context.Context,arg database.InsertWorkspaceAppStatsParams)error {
1006410022
err:=validateDatabaseType(arg)
1006510023
iferr!=nil {
@@ -13192,6 +13150,58 @@ func (q *FakeQuerier) UpsertWorkspaceAgentPortShare(_ context.Context, arg datab
1319213150
returnpsl,nil
1319313151
}
1319413152

13153+
func (q*FakeQuerier)UpsertWorkspaceApp(ctx context.Context,arg database.UpsertWorkspaceAppParams) (database.WorkspaceApp,error) {
13154+
err:=validateDatabaseType(arg)
13155+
iferr!=nil {
13156+
return database.WorkspaceApp{},err
13157+
}
13158+
13159+
q.mutex.Lock()
13160+
deferq.mutex.Unlock()
13161+
13162+
ifarg.SharingLevel=="" {
13163+
arg.SharingLevel=database.AppSharingLevelOwner
13164+
}
13165+
ifarg.OpenIn=="" {
13166+
arg.OpenIn=database.WorkspaceAppOpenInSlimWindow
13167+
}
13168+
13169+
buildApp:=func(id uuid.UUID,createdAt time.Time) database.WorkspaceApp {
13170+
return database.WorkspaceApp{
13171+
ID:id,
13172+
CreatedAt:createdAt,
13173+
AgentID:arg.AgentID,
13174+
Slug:arg.Slug,
13175+
DisplayName:arg.DisplayName,
13176+
Icon:arg.Icon,
13177+
Command:arg.Command,
13178+
Url:arg.Url,
13179+
External:arg.External,
13180+
Subdomain:arg.Subdomain,
13181+
SharingLevel:arg.SharingLevel,
13182+
HealthcheckUrl:arg.HealthcheckUrl,
13183+
HealthcheckInterval:arg.HealthcheckInterval,
13184+
HealthcheckThreshold:arg.HealthcheckThreshold,
13185+
Health:arg.Health,
13186+
Hidden:arg.Hidden,
13187+
DisplayOrder:arg.DisplayOrder,
13188+
OpenIn:arg.OpenIn,
13189+
DisplayGroup:arg.DisplayGroup,
13190+
}
13191+
}
13192+
13193+
fori,app:=rangeq.workspaceApps {
13194+
ifapp.ID==arg.ID {
13195+
q.workspaceApps[i]=buildApp(app.ID,app.CreatedAt)
13196+
returnq.workspaceApps[i],nil
13197+
}
13198+
}
13199+
13200+
workspaceApp:=buildApp(arg.ID,arg.CreatedAt)
13201+
q.workspaceApps=append(q.workspaceApps,workspaceApp)
13202+
returnworkspaceApp,nil
13203+
}
13204+
1319513205
func (q*FakeQuerier)UpsertWorkspaceAppAuditSession(_ context.Context,arg database.UpsertWorkspaceAppAuditSessionParams) (bool,error) {
1319613206
err:=validateDatabaseType(arg)
1319713207
iferr!=nil {

‎coderd/database/dbmetrics/querymetrics.go

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/dbmock/dbmock.go

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

‎coderd/database/querier.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more aboutcustomizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp