Skip to content

Commit a56df46

Browse files
authored
fix: Update github.com/coder/retry to remove initial delay (#6160)
1 parent c0c83f1 commit a56df46

File tree

4 files changed

+49
-27
lines changed

4 files changed

+49
-27
lines changed

coderd/database/dbfake/databasefake.go

+18-7
Original file line numberDiff line numberDiff line change
@@ -370,26 +370,29 @@ func (q *fakeQuerier) GetTemplateAverageBuildTime(ctx context.Context, arg datab
370370
stopTimes []float64
371371
deleteTimes []float64
372372
)
373+
q.mutex.RLock()
374+
defer q.mutex.RUnlock()
373375
for _, wb := range q.workspaceBuilds {
374-
version, err := q.GetTemplateVersionByID(ctx, wb.TemplateVersionID)
376+
version, err := q.getTemplateVersionByIDNoLock(ctx, wb.TemplateVersionID)
375377
if err != nil {
376378
return emptyRow, err
377379
}
378380
if version.TemplateID != arg.TemplateID {
379381
continue
380382
}
381383

382-
job, err := q.GetProvisionerJobByID(ctx, wb.JobID)
384+
job, err := q.getProvisionerJobByIDNoLock(ctx, wb.JobID)
383385
if err != nil {
384386
return emptyRow, err
385387
}
386388
if job.CompletedAt.Valid {
387389
took := job.CompletedAt.Time.Sub(job.StartedAt.Time).Seconds()
388-
if wb.Transition == database.WorkspaceTransitionStart {
390+
switch wb.Transition {
391+
case database.WorkspaceTransitionStart:
389392
startTimes = append(startTimes, took)
390-
} else if wb.Transition == database.WorkspaceTransitionStop {
393+
case database.WorkspaceTransitionStop:
391394
stopTimes = append(stopTimes, took)
392-
} else if wb.Transition == database.WorkspaceTransitionDelete {
395+
case database.WorkspaceTransitionDelete:
393396
deleteTimes = append(deleteTimes, took)
394397
}
395398
}
@@ -1797,10 +1800,14 @@ func (q *fakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe
17971800
return parameters, nil
17981801
}
17991802

1800-
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) {
18011804
q.mutex.RLock()
18021805
defer q.mutex.RUnlock()
18031806

1807+
return q.getTemplateVersionByIDNoLock(ctx, templateVersionID)
1808+
}
1809+
1810+
func (q *fakeQuerier) getTemplateVersionByIDNoLock(_ context.Context, templateVersionID uuid.UUID) (database.TemplateVersion, error) {
18041811
for _, templateVersion := range q.templateVersions {
18051812
if templateVersion.ID != templateVersionID {
18061813
continue
@@ -2232,10 +2239,14 @@ func (q *fakeQuerier) GetWorkspaceAppByAgentIDAndSlug(_ context.Context, arg dat
22322239
return database.WorkspaceApp{}, sql.ErrNoRows
22332240
}
22342241

2235-
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) {
22362243
q.mutex.RLock()
22372244
defer q.mutex.RUnlock()
22382245

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

coderd/workspaces_test.go

+28-17
Original file line numberDiff line numberDiff line change
@@ -1529,28 +1529,34 @@ func TestWorkspaceWatcher(t *testing.T) {
15291529

15301530
// Wait events are easier to debug with timestamped logs.
15311531
logger := slogtest.Make(t, nil).Named(t.Name()).Leveled(slog.LevelDebug)
1532-
wait := func(event string) {
1533-
select {
1534-
case <-ctx.Done():
1535-
require.FailNow(t, "timed out waiting for event", event)
1536-
case <-wc:
1537-
logger.Info(ctx, "done waiting for event", slog.F("event", event))
1532+
wait := func(event string, ready func(w codersdk.Workspace) bool) {
1533+
for {
1534+
select {
1535+
case <-ctx.Done():
1536+
require.FailNow(t, "timed out waiting for event", event)
1537+
case w, ok := <-wc:
1538+
require.True(t, ok, "watch channel closed: %s", event)
1539+
if ready == nil || ready(w) {
1540+
logger.Info(ctx, "done waiting for event", slog.F("event", event))
1541+
return
1542+
}
1543+
}
15381544
}
15391545
}
15401546

15411547
coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStart)
1542-
wait("workspace build being created")
1543-
wait("workspace build being acquired")
1544-
wait("workspace build completing")
1548+
wait("workspace build being created", nil)
1549+
wait("workspace build being acquired", nil)
1550+
wait("workspace build completing", nil)
15451551

15461552
// Unfortunately, this will add ~1s to the test due to the granularity
15471553
// of agent timeout seconds. However, if we don't do this we won't know
15481554
// which trigger we received when waiting for connection.
15491555
//
15501556
// Note that the first timeout is from `coderdtest.CreateWorkspace` and
15511557
// the latter is from `coderdtest.CreateWorkspaceBuild`.
1552-
wait("agent timeout after create")
1553-
wait("agent timeout after start")
1558+
wait("agent timeout after create", nil)
1559+
wait("agent timeout after start", nil)
15541560

15551561
agentClient := agentsdk.New(client.URL)
15561562
agentClient.SetSessionToken(authToken)
@@ -1562,28 +1568,33 @@ func TestWorkspaceWatcher(t *testing.T) {
15621568
_ = agentCloser.Close()
15631569
}()
15641570

1565-
wait("agent connected")
1571+
wait("agent connected/ready", func(w codersdk.Workspace) bool {
1572+
return w.LatestBuild.Resources[0].Agents[0].Status == codersdk.WorkspaceAgentConnected &&
1573+
w.LatestBuild.Resources[0].Agents[0].LifecycleState == codersdk.WorkspaceAgentLifecycleReady
1574+
})
15661575
agentCloser.Close()
1567-
wait("agent disconnected")
1576+
wait("agent disconnected", func(w codersdk.Workspace) bool {
1577+
return w.LatestBuild.Resources[0].Agents[0].Status == codersdk.WorkspaceAgentDisconnected
1578+
})
15681579

15691580
closeFunc.Close()
15701581
build := coderdtest.CreateWorkspaceBuild(t, client, workspace, database.WorkspaceTransitionStart)
1571-
wait("first is for the workspace build itself")
1582+
wait("first is for the workspace build itself", nil)
15721583
err = client.CancelWorkspaceBuild(ctx, build.ID)
15731584
require.NoError(t, err)
1574-
wait("second is for the build cancel")
1585+
wait("second is for the build cancel", nil)
15751586

15761587
err = client.UpdateWorkspace(ctx, workspace.ID, codersdk.UpdateWorkspaceRequest{
15771588
Name: "another",
15781589
})
15791590
require.NoError(t, err)
1580-
wait("update workspace name")
1591+
wait("update workspace name", nil)
15811592

15821593
err = client.UpdateActiveTemplateVersion(ctx, template.ID, codersdk.UpdateActiveTemplateVersion{
15831594
ID: template.ActiveVersionID,
15841595
})
15851596
require.NoError(t, err)
1586-
wait("update active template version")
1597+
wait("update active template version", nil)
15871598

15881599
cancel()
15891600
}

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ require (
6868
github.com/charmbracelet/glamour v0.6.0
6969
github.com/charmbracelet/lipgloss v0.6.0
7070
github.com/cli/safeexec v1.0.0
71-
github.com/coder/retry v1.3.0
71+
github.com/coder/retry v1.3.1-0.20230210155434-e90a2e1e091d
7272
github.com/coder/terraform-provider-coder v0.6.11
7373
github.com/coreos/go-oidc/v3 v3.4.0
7474
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -364,8 +364,8 @@ github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoC
364364
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
365365
github.com/coder/glog v1.0.1-0.20220322161911-7365fe7f2cd1 h1:UqBrPWSYvRI2s5RtOul20JukUEpu4ip9u7biBL+ntgk=
366366
github.com/coder/glog v1.0.1-0.20220322161911-7365fe7f2cd1/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
367-
github.com/coder/retry v1.3.0 h1:5lAAwt/2Cm6lVmnfBY7sOMXcBOwcwJhmV5QGSELIVWY=
368-
github.com/coder/retry v1.3.0/go.mod h1:tXuRgZgWjUnU5LZPT4lJh4ew2elUhexhlnXzrJWdyFY=
367+
github.com/coder/retry v1.3.1-0.20230210155434-e90a2e1e091d h1:09JG37IgTB6n3ouX9BXdUiibGzkGGbslFuDZO9Ru9aw=
368+
github.com/coder/retry v1.3.1-0.20230210155434-e90a2e1e091d/go.mod h1:r+1J5i/989wt6CUeNSuvFKKA9hHuKKPMxdzDbTuvwwk=
369369
github.com/coder/ssh v0.0.0-20220811105153-fcea99919338 h1:tN5GKFT68YLVzJoA8AHuiMNJ0qlhoD3pGN3JY9gxSko=
370370
github.com/coder/ssh v0.0.0-20220811105153-fcea99919338/go.mod h1:ZSS+CUoKHDrqVakTfTWUlKSr9MtMFkC4UvtQKD7O914=
371371
github.com/coder/tailscale v1.1.1-0.20230210022917-446fc10e755a h1:fTXoK+Yikz8Rl0v0nHxO+lTV0y8Q7wdmGFq1CqLgznE=

0 commit comments

Comments
 (0)