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

Commitaa9c2f8

Browse files
coadlerpull[bot]
authored andcommitted
chore: fixTestBatchStats flake (#8952)
1 parent5313884 commitaa9c2f8

File tree

3 files changed

+20
-19
lines changed

3 files changed

+20
-19
lines changed

‎coderd/batchstats/batcher.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ func New(ctx context.Context, opts ...Option) (*Batcher, func(), error) {
125125

126126
// Add adds a stat to the batcher for the given workspace and agent.
127127
func (b*Batcher)Add(
128+
now time.Time,
128129
agentID uuid.UUID,
129130
templateID uuid.UUID,
130131
userID uuid.UUID,
@@ -134,7 +135,7 @@ func (b *Batcher) Add(
134135
b.mu.Lock()
135136
deferb.mu.Unlock()
136137

137-
now:=database.Now()
138+
now=database.Time(now)
138139

139140
b.buf.ID=append(b.buf.ID,uuid.New())
140141
b.buf.CreatedAt=append(b.buf.CreatedAt,now)
@@ -198,15 +199,6 @@ func (b *Batcher) flush(ctx context.Context, forced bool, reason string) {
198199
deferfunc() {
199200
b.flushForced.Store(false)
200201
b.mu.Unlock()
201-
// Notify that a flush has completed. This only happens in tests.
202-
ifb.flushed!=nil {
203-
select {
204-
case<-ctx.Done():
205-
close(b.flushed)
206-
default:
207-
b.flushed<-count
208-
}
209-
}
210202
ifcount>0 {
211203
elapsed:=time.Since(start)
212204
b.log.Debug(ctx,"flush complete",
@@ -216,6 +208,15 @@ func (b *Batcher) flush(ctx context.Context, forced bool, reason string) {
216208
slog.F("reason",reason),
217209
)
218210
}
211+
// Notify that a flush has completed. This only happens in tests.
212+
ifb.flushed!=nil {
213+
select {
214+
case<-ctx.Done():
215+
close(b.flushed)
216+
default:
217+
b.flushed<-count
218+
}
219+
}
219220
}()
220221

221222
iflen(b.buf.ID)==0 {

‎coderd/batchstats/batcher_internal_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func TestBatchStats(t *testing.T) {
4646

4747
// Given: no data points are added for workspace
4848
// When: it becomes time to report stats
49-
t1:=time.Now()
49+
t1:=database.Now()
5050
// Signal a tick and wait for a flush to complete.
5151
tick<-t1
5252
f:=<-flushed
@@ -59,9 +59,9 @@ func TestBatchStats(t *testing.T) {
5959
require.Empty(t,stats,"should have no stats for workspace")
6060

6161
// Given: a single data point is added for workspace
62-
t2:=time.Now()
62+
t2:=t1.Add(time.Second)
6363
t.Logf("inserting 1 stat")
64-
require.NoError(t,b.Add(deps1.Agent.ID,deps1.User.ID,deps1.Template.ID,deps1.Workspace.ID,randAgentSDKStats(t)))
64+
require.NoError(t,b.Add(t2.Add(time.Millisecond),deps1.Agent.ID,deps1.User.ID,deps1.Template.ID,deps1.Workspace.ID,randAgentSDKStats(t)))
6565

6666
// When: it becomes time to report stats
6767
// Signal a tick and wait for a flush to complete.
@@ -77,17 +77,17 @@ func TestBatchStats(t *testing.T) {
7777

7878
// Given: a lot of data points are added for both workspaces
7979
// (equal to batch size)
80-
t3:=time.Now()
80+
t3:=t2.Add(time.Second)
8181
done:=make(chanstruct{})
8282

8383
gofunc() {
8484
deferclose(done)
8585
t.Logf("inserting %d stats",defaultBufferSize)
8686
fori:=0;i<defaultBufferSize;i++ {
8787
ifi%2==0 {
88-
require.NoError(t,b.Add(deps1.Agent.ID,deps1.User.ID,deps1.Template.ID,deps1.Workspace.ID,randAgentSDKStats(t)))
88+
require.NoError(t,b.Add(t3.Add(time.Millisecond),deps1.Agent.ID,deps1.User.ID,deps1.Template.ID,deps1.Workspace.ID,randAgentSDKStats(t)))
8989
}else {
90-
require.NoError(t,b.Add(deps2.Agent.ID,deps2.User.ID,deps2.Template.ID,deps2.Workspace.ID,randAgentSDKStats(t)))
90+
require.NoError(t,b.Add(t3.Add(time.Millisecond),deps2.Agent.ID,deps2.User.ID,deps2.Template.ID,deps2.Workspace.ID,randAgentSDKStats(t)))
9191
}
9292
}
9393
}()
@@ -105,15 +105,15 @@ func TestBatchStats(t *testing.T) {
105105
require.Len(t,stats,2,"should have stats for both workspaces")
106106

107107
// Ensures that a subsequent flush pushes all the remaining data
108-
t4:=time.Now()
108+
t4:=t3.Add(time.Second)
109109
tick<-t4
110110
f2:=<-flushed
111111
t.Logf("flush 4 completed")
112112
expectedCount:=defaultBufferSize-f
113113
require.Equal(t,expectedCount,f2,"did not flush expected remaining rows")
114114

115115
// Ensure that a subsequent flush does not push stale data.
116-
t5:=time.Now()
116+
t5:=t4.Add(time.Second)
117117
tick<-t5
118118
f=<-flushed
119119
require.Zero(t,f,"expected zero stats to have been flushed")

‎coderd/workspaceagents.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1414,7 +1414,7 @@ func (api *API) workspaceAgentReportStats(rw http.ResponseWriter, r *http.Reques
14141414

14151415
varerrGroup errgroup.Group
14161416
errGroup.Go(func()error {
1417-
iferr:=api.statsBatcher.Add(workspaceAgent.ID,workspace.TemplateID,workspace.OwnerID,workspace.ID,req);err!=nil {
1417+
iferr:=api.statsBatcher.Add(time.Now(),workspaceAgent.ID,workspace.TemplateID,workspace.OwnerID,workspace.ID,req);err!=nil {
14181418
api.Logger.Error(ctx,"failed to add stats to batcher",slog.Error(err))
14191419
returnxerrors.Errorf("can't insert workspace agent stat: %w",err)
14201420
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp