Skip to content

Commit 5b53a56

Browse files
committed
finalize, switch runner back
1 parent caa994f commit 5b53a56

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

wasp/wasp.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ type Generator struct {
245245
Log zerolog.Logger
246246
labels model.LabelSet
247247
rl atomic.Pointer[ratelimit.Limiter]
248+
executionLoopOnce *sync.Once
248249
executionLoopStart chan struct{}
249250
scheduleSegments []*Segment
250251
currentSegmentMu *sync.Mutex
@@ -320,6 +321,7 @@ func NewGenerator(cfg *Config) (*Generator, error) {
320321
dataCancel: dataCancel,
321322
gun: cfg.Gun,
322323
vu: cfg.VU,
324+
executionLoopOnce: &sync.Once{},
323325
executionLoopStart: make(chan struct{}),
324326
Responses: NewResponses(rch),
325327
ResponsesChan: rch,
@@ -359,9 +361,9 @@ func (g *Generator) runRPSLoop() {
359361
case RPS:
360362
g.ResponsesWaitGroup.Add(1)
361363
// we run pacedCall controlled by stats.CurrentRPS
364+
// start when first segment is loaded, see runScheduleLoop
365+
<-g.executionLoopStart
362366
go func() {
363-
// start when first segment is loaded, see
364-
<-g.executionLoopStart
365367
for {
366368
select {
367369
case <-g.ResponsesCtx.Done():
@@ -481,16 +483,18 @@ func (g *Generator) processSegment() bool {
481483
}
482484
g.currentSegmentMu.Lock()
483485
g.currentSegment = g.scheduleSegments[g.stats.CurrentSegment.Load()]
484-
g.currentSegment.StartTime = time.Now()
485486
g.currentSegmentMu.Unlock()
486487
g.stats.CurrentSegment.Add(1)
488+
g.currentSegment.StartTime = time.Now()
487489
switch g.Cfg.LoadType {
488490
case RPS:
489491
newRateLimit := ratelimit.New(int(g.currentSegment.From), ratelimit.Per(g.Cfg.RateLimitUnitDuration), ratelimit.WithoutSlack)
490492
g.rl.Store(&newRateLimit)
491493
g.stats.CurrentRPS.Store(g.currentSegment.From)
492494
// signal RPS loop to start
493-
g.executionLoopStart <- struct{}{}
495+
g.executionLoopOnce.Do(func() {
496+
g.executionLoopStart <- struct{}{}
497+
})
494498
case VU:
495499
oldVUs := g.stats.CurrentVUs.Load()
496500
newVUs := g.currentSegment.From

wasp/wasp_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -449,13 +449,13 @@ func TestSmokeStaticRPSSchedulePrecision(t *testing.T) {
449449
require.NoError(t, err)
450450
_, failed := gen.Run(true)
451451
require.Equal(t, false, failed)
452-
require.GreaterOrEqual(t, gen.Stats().Success.Load(), int64(980))
452+
require.GreaterOrEqual(t, gen.Stats().Success.Load(), int64(960))
453453
require.LessOrEqual(t, gen.Stats().Success.Load(), int64(1010))
454454
require.Equal(t, gen.Stats().Failed.Load(), int64(0))
455455
require.Equal(t, gen.Stats().CallTimeout.Load(), int64(0))
456456

457457
okData, _, failResponses := convertResponsesData(gen)
458-
require.GreaterOrEqual(t, len(okData), 980)
458+
require.GreaterOrEqual(t, len(okData), 960)
459459
require.LessOrEqual(t, len(okData), 1010)
460460
require.Empty(t, failResponses)
461461
require.Empty(t, gen.Errors())
@@ -475,14 +475,14 @@ func TestSmokeCustomUnitPrecision(t *testing.T) {
475475
_, failed := gen.Run(true)
476476
require.Equal(t, false, failed)
477477
stats := gen.Stats()
478-
require.GreaterOrEqual(t, stats.Success.Load(), int64(4970))
478+
require.GreaterOrEqual(t, stats.Success.Load(), int64(4960))
479479
require.LessOrEqual(t, stats.Success.Load(), int64(5010))
480480
require.Equal(t, stats.Failed.Load(), int64(0))
481481
require.Equal(t, stats.CallTimeout.Load(), int64(0))
482482
require.Equal(t, stats.CurrentTimeUnit, gen.Cfg.RateLimitUnitDuration.Nanoseconds())
483483

484484
okData, _, failResponses := convertResponsesData(gen)
485-
require.GreaterOrEqual(t, len(okData), 4970)
485+
require.GreaterOrEqual(t, len(okData), 4960)
486486
require.LessOrEqual(t, len(okData), 5010)
487487
require.Empty(t, failResponses)
488488
require.Empty(t, gen.Errors())
@@ -501,13 +501,13 @@ func TestSmokeStaticRPSScheduleIsNotBlocking(t *testing.T) {
501501
require.NoError(t, err)
502502
_, failed := gen.Run(true)
503503
require.Equal(t, false, failed)
504-
require.GreaterOrEqual(t, gen.Stats().Success.Load(), int64(980))
504+
require.GreaterOrEqual(t, gen.Stats().Success.Load(), int64(960))
505505
require.LessOrEqual(t, gen.Stats().Success.Load(), int64(1010))
506506
require.Equal(t, gen.Stats().Failed.Load(), int64(0))
507507
require.Equal(t, gen.Stats().CallTimeout.Load(), int64(0))
508508

509509
okData, _, failResponses := convertResponsesData(gen)
510-
require.GreaterOrEqual(t, len(okData), 980)
510+
require.GreaterOrEqual(t, len(okData), 960)
511511
require.LessOrEqual(t, len(okData), 1010)
512512
require.Empty(t, failResponses)
513513
require.Empty(t, gen.Errors())

0 commit comments

Comments
 (0)