Skip to content

Commit e95ca7f

Browse files
committed
fixup! Fix data race
1 parent 0045806 commit e95ca7f

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

coderd/database/dbfake/databasefake.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -371,28 +371,28 @@ func (q *fakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
371371
deleteTimes []float64
372372
)
373373
q.mutex.RLock()
374-
workspaceBuilds := slices.Clone(q.workspaceBuilds)
375-
q.mutex.RUnlock()
376-
for _, wb := range workspaceBuilds {
377-
version, err := q.GetTemplateVersionByID(ctx, wb.TemplateVersionID)
374+
defer q.mutex.RUnlock()
375+
for _, wb := range q.workspaceBuilds {
376+
version, err := q.getTemplateVersionByIDNoLock(ctx, wb.TemplateVersionID)
378377
if err != nil {
379378
return emptyRow, err
380379
}
381380
if version.TemplateID != arg.TemplateID {
382381
continue
383382
}
384383

385-
job, err := q.GetProvisionerJobByID(ctx, wb.JobID)
384+
job, err := q.getProvisionerJobByIDNoLock(ctx, wb.JobID)
386385
if err != nil {
387386
return emptyRow, err
388387
}
389388
if job.CompletedAt.Valid {
390389
took := job.CompletedAt.Time.Sub(job.StartedAt.Time).Seconds()
391-
if wb.Transition == database.WorkspaceTransitionStart {
390+
switch wb.Transition {
391+
case database.WorkspaceTransitionStart:
392392
startTimes = append(startTimes, took)
393-
} else if wb.Transition == database.WorkspaceTransitionStop {
393+
case database.WorkspaceTransitionStop:
394394
stopTimes = append(stopTimes, took)
395-
} else if wb.Transition == database.WorkspaceTransitionDelete {
395+
case database.WorkspaceTransitionDelete:
396396
deleteTimes = append(deleteTimes, took)
397397
}
398398
}
@@ -1800,10 +1800,14 @@ func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe
18001800
return parameters, nil
18011801
}
18021802

1803-
func (q *fakeQuerier) GetTemplateVersionByID(_ context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) {
1803+
func (q *fakeQuerier) GetTemplateVersionByID(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) {
18041804
q.mutex.RLock()
18051805
defer q.mutex.RUnlock()
18061806

1807+
return q.getTemplateVersionByIDNoLock(ctx, templateVersionID)
1808+
}
1809+
1810+
func (q *fakeQuerier) getTemplateVersionByIDNoLock(_ context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) {
18071811
for _, templateVersion := range q.templateVersions {
18081812
if templateVersion.ID != templateVersionID {
18091813
continue
@@ -2235,10 +2239,14 @@ func (q *fakeQuerier) GetWorkspaceAppByAgentIDAndSlug(_ context.Context, arg dat
22352239
return database.WorkspaceApp{}, sql.ErrNoRows
22362240
}
22372241

2238-
func (q *fakeQuerier) GetProvisionerJobByID(_ context.Context, id uuid.UUID) (database.ProvisionerJob, error) {
2242+
func (q *fakeQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID) (database.ProvisionerJob, error) {
22392243
q.mutex.RLock()
22402244
defer q.mutex.RUnlock()
22412245

2246+
return q.getProvisionerJobByIDNoLock(ctx, id)
2247+
}
2248+
2249+
func (q *fakeQuerier) getProvisionerJobByIDNoLock(_ context.Context, id uuid.UUID) (database.ProvisionerJob, error) {
22422250
for _, provisionerJob := range q.provisionerJobs {
22432251
if provisionerJob.ID != id {
22442252
continue

0 commit comments

Comments
 (0)