@@ -332,7 +332,7 @@ func (q *fakeQuerier) GetWorkspaceAgentsInLatestBuildByWorkspaceID(ctx context.C
332
332
}
333
333
334
334
// Get resources for build.
335
- resources , err := q .GetWorkspaceResourcesByJobID (ctx , workspaceBuild .JobID )
335
+ resources , err := q .getWorkspaceResourcesByJobIDNoLock (ctx , workspaceBuild .JobID )
336
336
if err != nil {
337
337
return nil , xerrors .Errorf ("get workspace resources: %w" , err )
338
338
}
@@ -345,7 +345,7 @@ func (q *fakeQuerier) GetWorkspaceAgentsInLatestBuildByWorkspaceID(ctx context.C
345
345
resourceIDs [i ] = resource .ID
346
346
}
347
347
348
- agents , err := q .GetWorkspaceAgentsByResourceIDs (ctx , resourceIDs )
348
+ agents , err := q .getWorkspaceAgentsByResourceIDsNoLock (ctx , resourceIDs )
349
349
if err != nil {
350
350
return nil , xerrors .Errorf ("get workspace agents: %w" , err )
351
351
}
@@ -435,8 +435,8 @@ func (q *fakeQuerier) InsertWorkspaceAgentStat(_ context.Context, p database.Ins
435
435
}
436
436
437
437
func (q * fakeQuerier ) GetTemplateDAUs (_ context.Context , templateID uuid.UUID ) ([]database.GetTemplateDAUsRow , error ) {
438
- q .mutex .Lock ()
439
- defer q .mutex .Unlock ()
438
+ q .mutex .RLock ()
439
+ defer q .mutex .RUnlock ()
440
440
441
441
seens := make (map [time.Time ]map [uuid.UUID ]struct {})
442
442
@@ -478,8 +478,8 @@ func (q *fakeQuerier) GetTemplateDAUs(_ context.Context, templateID uuid.UUID) (
478
478
}
479
479
480
480
func (q * fakeQuerier ) GetDeploymentDAUs (_ context.Context ) ([]database.GetDeploymentDAUsRow , error ) {
481
- q .mutex .Lock ()
482
- defer q .mutex .Unlock ()
481
+ q .mutex .RLock ()
482
+ defer q .mutex .RUnlock ()
483
483
484
484
seens := make (map [time.Time ]map [uuid.UUID ]struct {})
485
485
@@ -571,8 +571,8 @@ func (q *fakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
571
571
}
572
572
573
573
func (q * fakeQuerier ) ParameterValue (_ context.Context , id uuid.UUID ) (database.ParameterValue , error ) {
574
- q .mutex .Lock ()
575
- defer q .mutex .Unlock ()
574
+ q .mutex .RLock ()
575
+ defer q .mutex .RUnlock ()
576
576
577
577
for _ , parameterValue := range q .parameterValues {
578
578
if parameterValue .ID != id {
@@ -1181,7 +1181,7 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
1181
1181
return nil , xerrors .Errorf ("get latest build: %w" , err )
1182
1182
}
1183
1183
1184
- job , err := q .GetProvisionerJobByID (ctx , build .JobID )
1184
+ job , err := q .getProvisionerJobByIDNoLock (ctx , build .JobID )
1185
1185
if err != nil {
1186
1186
return nil , xerrors .Errorf ("get provisioner job: %w" , err )
1187
1187
}
@@ -1270,12 +1270,12 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
1270
1270
return nil , xerrors .Errorf ("get latest build: %w" , err )
1271
1271
}
1272
1272
1273
- job , err := q .GetProvisionerJobByID (ctx , build .JobID )
1273
+ job , err := q .getProvisionerJobByIDNoLock (ctx , build .JobID )
1274
1274
if err != nil {
1275
1275
return nil , xerrors .Errorf ("get provisioner job: %w" , err )
1276
1276
}
1277
1277
1278
- workspaceResources , err := q .GetWorkspaceResourcesByJobID (ctx , job .ID )
1278
+ workspaceResources , err := q .getWorkspaceResourcesByJobIDNoLock (ctx , job .ID )
1279
1279
if err != nil {
1280
1280
return nil , xerrors .Errorf ("get workspace resources: %w" , err )
1281
1281
}
@@ -1285,7 +1285,7 @@ func (q *fakeQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg database.
1285
1285
workspaceResourceIDs = append (workspaceResourceIDs , wr .ID )
1286
1286
}
1287
1287
1288
- workspaceAgents , err := q .GetWorkspaceAgentsByResourceIDs (ctx , workspaceResourceIDs )
1288
+ workspaceAgents , err := q .getWorkspaceAgentsByResourceIDsNoLock (ctx , workspaceResourceIDs )
1289
1289
if err != nil {
1290
1290
return nil , xerrors .Errorf ("get workspace agents: %w" , err )
1291
1291
}
@@ -1395,10 +1395,14 @@ func convertToWorkspaceRows(workspaces []database.Workspace, count int64) []data
1395
1395
return rows
1396
1396
}
1397
1397
1398
- func (q * fakeQuerier ) GetWorkspaceByID (_ context.Context , id uuid.UUID ) (database.Workspace , error ) {
1398
+ func (q * fakeQuerier ) GetWorkspaceByID (ctx context.Context , id uuid.UUID ) (database.Workspace , error ) {
1399
1399
q .mutex .RLock ()
1400
1400
defer q .mutex .RUnlock ()
1401
1401
1402
+ return q .getWorkspaceByIDNoLock (ctx , id )
1403
+ }
1404
+
1405
+ func (q * fakeQuerier ) getWorkspaceByIDNoLock (_ context.Context , id uuid.UUID ) (database.Workspace , error ) {
1402
1406
for _ , workspace := range q .workspaces {
1403
1407
if workspace .ID == id {
1404
1408
return workspace , nil
@@ -1407,10 +1411,14 @@ func (q *fakeQuerier) GetWorkspaceByID(_ context.Context, id uuid.UUID) (databas
1407
1411
return database.Workspace {}, sql .ErrNoRows
1408
1412
}
1409
1413
1410
- func (q * fakeQuerier ) GetWorkspaceByAgentID (_ context.Context , agentID uuid.UUID ) (database.Workspace , error ) {
1414
+ func (q * fakeQuerier ) GetWorkspaceByAgentID (ctx context.Context , agentID uuid.UUID ) (database.Workspace , error ) {
1411
1415
q .mutex .RLock ()
1412
1416
defer q .mutex .RUnlock ()
1413
1417
1418
+ return q .getWorkspaceByAgentIDNoLock (ctx , agentID )
1419
+ }
1420
+
1421
+ func (q * fakeQuerier ) getWorkspaceByAgentIDNoLock (_ context.Context , agentID uuid.UUID ) (database.Workspace , error ) {
1414
1422
var agent database.WorkspaceAgent
1415
1423
for _ , _agent := range q .workspaceAgents {
1416
1424
if _agent .ID == agentID {
@@ -1496,7 +1504,7 @@ func (q *fakeQuerier) GetWorkspaceByWorkspaceAppID(_ context.Context, workspaceA
1496
1504
for _ , workspaceApp := range q .workspaceApps {
1497
1505
workspaceApp := workspaceApp
1498
1506
if workspaceApp .ID == workspaceAppID {
1499
- return q .GetWorkspaceByAgentID (context .Background (), workspaceApp .AgentID )
1507
+ return q .getWorkspaceByAgentIDNoLock (context .Background (), workspaceApp .AgentID )
1500
1508
}
1501
1509
}
1502
1510
return database.Workspace {}, sql .ErrNoRows
@@ -1547,10 +1555,14 @@ func (q *fakeQuerier) GetWorkspaceAppsByAgentIDs(_ context.Context, ids []uuid.U
1547
1555
return apps , nil
1548
1556
}
1549
1557
1550
- func (q * fakeQuerier ) GetWorkspaceBuildByID (_ context.Context , id uuid.UUID ) (database.WorkspaceBuild , error ) {
1558
+ func (q * fakeQuerier ) GetWorkspaceBuildByID (ctx context.Context , id uuid.UUID ) (database.WorkspaceBuild , error ) {
1551
1559
q .mutex .RLock ()
1552
1560
defer q .mutex .RUnlock ()
1553
1561
1562
+ return q .getWorkspaceBuildByIDNoLock (ctx , id )
1563
+ }
1564
+
1565
+ func (q * fakeQuerier ) getWorkspaceBuildByIDNoLock (_ context.Context , id uuid.UUID ) (database.WorkspaceBuild , error ) {
1554
1566
for _ , history := range q .workspaceBuilds {
1555
1567
if history .ID == id {
1556
1568
return history , nil
@@ -2359,7 +2371,7 @@ func (q *fakeQuerier) GetTemplateGroupRoles(_ context.Context, id uuid.UUID) ([]
2359
2371
2360
2372
groups := make ([]database.TemplateGroup , 0 , len (template .GroupACL ))
2361
2373
for k , v := range template .GroupACL {
2362
- group , err := q .GetGroupByID (context .Background (), uuid .MustParse (k ))
2374
+ group , err := q .getGroupByIDNoLock (context .Background (), uuid .MustParse (k ))
2363
2375
if err != nil && ! xerrors .Is (err , sql .ErrNoRows ) {
2364
2376
return nil , xerrors .Errorf ("get group by ID: %w" , err )
2365
2377
}
@@ -2490,10 +2502,14 @@ func (q *fakeQuerier) GetWorkspaceAgentByAuthToken(_ context.Context, authToken
2490
2502
return database.WorkspaceAgent {}, sql .ErrNoRows
2491
2503
}
2492
2504
2493
- func (q * fakeQuerier ) GetWorkspaceAgentByID (_ context.Context , id uuid.UUID ) (database.WorkspaceAgent , error ) {
2505
+ func (q * fakeQuerier ) GetWorkspaceAgentByID (ctx context.Context , id uuid.UUID ) (database.WorkspaceAgent , error ) {
2494
2506
q .mutex .RLock ()
2495
2507
defer q .mutex .RUnlock ()
2496
2508
2509
+ return q .getWorkspaceAgentByIDNoLock (ctx , id )
2510
+ }
2511
+
2512
+ func (q * fakeQuerier ) getWorkspaceAgentByIDNoLock (_ context.Context , id uuid.UUID ) (database.WorkspaceAgent , error ) {
2497
2513
// The schema sorts this by created at, so we iterate the array backwards.
2498
2514
for i := len (q .workspaceAgents ) - 1 ; i >= 0 ; i -- {
2499
2515
agent := q .workspaceAgents [i ]
@@ -2518,10 +2534,14 @@ func (q *fakeQuerier) GetWorkspaceAgentByInstanceID(_ context.Context, instanceI
2518
2534
return database.WorkspaceAgent {}, sql .ErrNoRows
2519
2535
}
2520
2536
2521
- func (q * fakeQuerier ) GetWorkspaceAgentsByResourceIDs (_ context.Context , resourceIDs []uuid.UUID ) ([]database.WorkspaceAgent , error ) {
2537
+ func (q * fakeQuerier ) GetWorkspaceAgentsByResourceIDs (ctx context.Context , resourceIDs []uuid.UUID ) ([]database.WorkspaceAgent , error ) {
2522
2538
q .mutex .RLock ()
2523
2539
defer q .mutex .RUnlock ()
2524
2540
2541
+ return q .getWorkspaceAgentsByResourceIDsNoLock (ctx , resourceIDs )
2542
+ }
2543
+
2544
+ func (q * fakeQuerier ) getWorkspaceAgentsByResourceIDsNoLock (_ context.Context , resourceIDs []uuid.UUID ) ([]database.WorkspaceAgent , error ) {
2525
2545
workspaceAgents := make ([]database.WorkspaceAgent , 0 )
2526
2546
for _ , agent := range q .workspaceAgents {
2527
2547
for _ , resourceID := range resourceIDs {
@@ -2596,10 +2616,14 @@ func (q *fakeQuerier) GetWorkspaceResourceByID(_ context.Context, id uuid.UUID)
2596
2616
return database.WorkspaceResource {}, sql .ErrNoRows
2597
2617
}
2598
2618
2599
- func (q * fakeQuerier ) GetWorkspaceResourcesByJobID (_ context.Context , jobID uuid.UUID ) ([]database.WorkspaceResource , error ) {
2619
+ func (q * fakeQuerier ) GetWorkspaceResourcesByJobID (ctx context.Context , jobID uuid.UUID ) ([]database.WorkspaceResource , error ) {
2600
2620
q .mutex .RLock ()
2601
2621
defer q .mutex .RUnlock ()
2602
2622
2623
+ return q .getWorkspaceResourcesByJobIDNoLock (ctx , jobID )
2624
+ }
2625
+
2626
+ func (q * fakeQuerier ) getWorkspaceResourcesByJobIDNoLock (_ context.Context , jobID uuid.UUID ) ([]database.WorkspaceResource , error ) {
2603
2627
resources := make ([]database.WorkspaceResource , 0 )
2604
2628
for _ , resource := range q .workspaceResources {
2605
2629
if resource .JobID != jobID {
@@ -3674,8 +3698,8 @@ func (q *fakeQuerier) GetWorkspaceAgentStartupLogsAfter(_ context.Context, arg d
3674
3698
return nil , err
3675
3699
}
3676
3700
3677
- q .mutex .Lock ()
3678
- defer q .mutex .Unlock ()
3701
+ q .mutex .RLock ()
3702
+ defer q .mutex .RUnlock ()
3679
3703
3680
3704
logs := []database.WorkspaceAgentStartupLog {}
3681
3705
for _ , log := range q .workspaceAgentLogs {
@@ -4051,13 +4075,13 @@ func (q *fakeQuerier) GetWorkspaceAgentStatsAndLabels(ctx context.Context, creat
4051
4075
4052
4076
stat .Username = user .Username
4053
4077
4054
- workspace , err := q .GetWorkspaceByID (ctx , agentStat .WorkspaceID )
4078
+ workspace , err := q .getWorkspaceByIDNoLock (ctx , agentStat .WorkspaceID )
4055
4079
if err != nil {
4056
4080
return nil , err
4057
4081
}
4058
4082
stat .WorkspaceName = workspace .Name
4059
4083
4060
- agent , err := q .GetWorkspaceAgentByID (ctx , agentStat .AgentID )
4084
+ agent , err := q .getWorkspaceAgentByIDNoLock (ctx , agentStat .AgentID )
4061
4085
if err != nil {
4062
4086
return nil , err
4063
4087
}
@@ -4403,7 +4427,7 @@ func (q *fakeQuerier) GetAuditLogsOffset(_ context.Context, arg database.GetAudi
4403
4427
}
4404
4428
}
4405
4429
if arg .BuildReason != "" {
4406
- workspaceBuild , err := q .GetWorkspaceBuildByID (context .Background (), alog .ResourceID )
4430
+ workspaceBuild , err := q .getWorkspaceBuildByIDNoLock (context .Background (), alog .ResourceID )
4407
4431
if err == nil && ! strings .EqualFold (arg .BuildReason , string (workspaceBuild .Reason )) {
4408
4432
continue
4409
4433
}
@@ -4497,8 +4521,8 @@ func (q *fakeQuerier) GetDERPMeshKey(_ context.Context) (string, error) {
4497
4521
}
4498
4522
4499
4523
func (q * fakeQuerier ) UpsertLastUpdateCheck (_ context.Context , data string ) error {
4500
- q .mutex .RLock ()
4501
- defer q .mutex .RUnlock ()
4524
+ q .mutex .Lock ()
4525
+ defer q .mutex .Unlock ()
4502
4526
4503
4527
q .lastUpdateCheck = []byte (data )
4504
4528
return nil
@@ -4672,8 +4696,8 @@ func (q *fakeQuerier) GetUserLinkByUserIDLoginType(_ context.Context, params dat
4672
4696
}
4673
4697
4674
4698
func (q * fakeQuerier ) InsertUserLink (_ context.Context , args database.InsertUserLinkParams ) (database.UserLink , error ) {
4675
- q .mutex .RLock ()
4676
- defer q .mutex .RUnlock ()
4699
+ q .mutex .Lock ()
4700
+ defer q .mutex .Unlock ()
4677
4701
4678
4702
//nolint:gosimple
4679
4703
link := database.UserLink {
@@ -4695,8 +4719,8 @@ func (q *fakeQuerier) UpdateUserLinkedID(_ context.Context, params database.Upda
4695
4719
return database.UserLink {}, err
4696
4720
}
4697
4721
4698
- q .mutex .RLock ()
4699
- defer q .mutex .RUnlock ()
4722
+ q .mutex .Lock ()
4723
+ defer q .mutex .Unlock ()
4700
4724
4701
4725
for i , link := range q .userLinks {
4702
4726
if link .UserID == params .UserID && link .LoginType == params .LoginType {
@@ -4715,8 +4739,8 @@ func (q *fakeQuerier) UpdateUserLink(_ context.Context, params database.UpdateUs
4715
4739
return database.UserLink {}, err
4716
4740
}
4717
4741
4718
- q .mutex .RLock ()
4719
- defer q .mutex .RUnlock ()
4742
+ q .mutex .Lock ()
4743
+ defer q .mutex .Unlock ()
4720
4744
4721
4745
for i , link := range q .userLinks {
4722
4746
if link .UserID == params .UserID && link .LoginType == params .LoginType {
@@ -4732,10 +4756,14 @@ func (q *fakeQuerier) UpdateUserLink(_ context.Context, params database.UpdateUs
4732
4756
return database.UserLink {}, sql .ErrNoRows
4733
4757
}
4734
4758
4735
- func (q * fakeQuerier ) GetGroupByID (_ context.Context , id uuid.UUID ) (database.Group , error ) {
4759
+ func (q * fakeQuerier ) GetGroupByID (ctx context.Context , id uuid.UUID ) (database.Group , error ) {
4736
4760
q .mutex .RLock ()
4737
4761
defer q .mutex .RUnlock ()
4738
4762
4763
+ return q .getGroupByIDNoLock (ctx , id )
4764
+ }
4765
+
4766
+ func (q * fakeQuerier ) getGroupByIDNoLock (_ context.Context , id uuid.UUID ) (database.Group , error ) {
4739
4767
for _ , group := range q .groups {
4740
4768
if group .ID == id {
4741
4769
return group , nil
@@ -4776,8 +4804,8 @@ func (q *fakeQuerier) InsertGroup(_ context.Context, arg database.InsertGroupPar
4776
4804
return database.Group {}, err
4777
4805
}
4778
4806
4779
- q .mutex .RLock ()
4780
- defer q .mutex .RUnlock ()
4807
+ q .mutex .Lock ()
4808
+ defer q .mutex .Unlock ()
4781
4809
4782
4810
for _ , group := range q .groups {
4783
4811
if group .OrganizationID == arg .OrganizationID &&
@@ -4995,8 +5023,9 @@ func (q *fakeQuerier) UpdateGitAuthLink(_ context.Context, arg database.UpdateGi
4995
5023
}
4996
5024
4997
5025
func (q * fakeQuerier ) GetQuotaAllowanceForUser (_ context.Context , userID uuid.UUID ) (int64 , error ) {
4998
- q .mutex .Lock ()
4999
- defer q .mutex .Unlock ()
5026
+ q .mutex .RLock ()
5027
+ defer q .mutex .RUnlock ()
5028
+
5000
5029
var sum int64
5001
5030
for _ , member := range q .groupMembers {
5002
5031
if member .UserID != userID {
@@ -5012,8 +5041,9 @@ func (q *fakeQuerier) GetQuotaAllowanceForUser(_ context.Context, userID uuid.UU
5012
5041
}
5013
5042
5014
5043
func (q * fakeQuerier ) GetQuotaConsumedForUser (_ context.Context , userID uuid.UUID ) (int64 , error ) {
5015
- q .mutex .Lock ()
5016
- defer q .mutex .Unlock ()
5044
+ q .mutex .RLock ()
5045
+ defer q .mutex .RUnlock ()
5046
+
5017
5047
var sum int64
5018
5048
for _ , workspace := range q .workspaces {
5019
5049
if workspace .OwnerID != userID {
@@ -5072,8 +5102,8 @@ func (q *fakeQuerier) UpdateWorkspaceAgentStartupLogOverflowByID(_ context.Conte
5072
5102
}
5073
5103
5074
5104
func (q * fakeQuerier ) GetWorkspaceProxies (_ context.Context ) ([]database.WorkspaceProxy , error ) {
5075
- q .mutex .Lock ()
5076
- defer q .mutex .Unlock ()
5105
+ q .mutex .RLock ()
5106
+ defer q .mutex .RUnlock ()
5077
5107
5078
5108
cpy := make ([]database.WorkspaceProxy , 0 , len (q .workspaceProxies ))
5079
5109
@@ -5086,8 +5116,8 @@ func (q *fakeQuerier) GetWorkspaceProxies(_ context.Context) ([]database.Workspa
5086
5116
}
5087
5117
5088
5118
func (q * fakeQuerier ) GetWorkspaceProxyByID (_ context.Context , id uuid.UUID ) (database.WorkspaceProxy , error ) {
5089
- q .mutex .Lock ()
5090
- defer q .mutex .Unlock ()
5119
+ q .mutex .RLock ()
5120
+ defer q .mutex .RUnlock ()
5091
5121
5092
5122
for _ , proxy := range q .workspaceProxies {
5093
5123
if proxy .ID == id {
@@ -5098,8 +5128,8 @@ func (q *fakeQuerier) GetWorkspaceProxyByID(_ context.Context, id uuid.UUID) (da
5098
5128
}
5099
5129
5100
5130
func (q * fakeQuerier ) GetWorkspaceProxyByHostname (_ context.Context , hostname string ) (database.WorkspaceProxy , error ) {
5101
- q .mutex .Lock ()
5102
- defer q .mutex .Unlock ()
5131
+ q .mutex .RLock ()
5132
+ defer q .mutex .RUnlock ()
5103
5133
5104
5134
// Return zero rows if this is called with a non-sanitized hostname. The SQL
5105
5135
// version of this query does the same thing.
0 commit comments