2
0
mirror of https://github.com/hibiken/asynq.git synced 2025-04-22 00:30:17 +08:00

Fix end-to-end benchmark to be deterministic

This commit is contained in:
Ken Hibino 2020-06-06 16:17:10 -07:00
parent 9b7b1bbff6
commit d9161d621f
4 changed files with 26 additions and 4 deletions

View File

@ -5,6 +5,7 @@ git:
go: [1.13.x, 1.14.x] go: [1.13.x, 1.14.x]
script: script:
- go test -race -v -coverprofile=coverage.txt -covermode=atomic ./... - go test -race -v -coverprofile=coverage.txt -covermode=atomic ./...
- go test -run=XXX -bench=. -loglevel=debug -v ./...
services: services:
- redis-server - redis-server
after_success: after_success:

View File

@ -6,11 +6,11 @@ if [ "${TRAVIS_PULL_REQUEST_BRANCH:-$TRAVIS_BRANCH}" != "master" ]; then
# Benchmark master # Benchmark master
echo "Running benchmark tests on master branch" echo "Running benchmark tests on master branch"
git checkout master && \ git checkout master && \
go test -run=XXX -bench=. -loglevel=debug ./... > master.txt && \ go test -run=XXX -bench=. -loglevel=debug -v ./... > master.txt && \
# Benchmark feature branch # Benchmark feature branch
echo "Running benchmark tests on feature branch" echo "Running benchmark tests on feature branch"
git checkout ${TRAVIS_COMMIT} && \ git checkout ${TRAVIS_COMMIT} && \
go test -run=XXX -bench=. -loglevel=debug ./... > feature.txt && \ go test -run=XXX -bench=. -loglevel=debug -v ./... > feature.txt && \
go get -u golang.org/x/tools/cmd/benchcmp && \ go get -u golang.org/x/tools/cmd/benchcmp && \
# compare two benchmarks # compare two benchmarks
benchcmp master.txt feature.txt; benchcmp master.txt feature.txt;

View File

@ -92,8 +92,16 @@ func BenchmarkEndToEnd(b *testing.B) {
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(count * 2) wg.Add(count * 2)
handler := func(ctx context.Context, t *Task) error { handler := func(ctx context.Context, t *Task) error {
// randomly fail 1% of tasks n, err := t.Payload.GetInt("data")
if rand.Intn(100) == 1 { if err != nil {
b.Logf("internal error: %v", err)
}
retried, ok := GetRetryCount(ctx)
if !ok {
b.Logf("internal error: %v", err)
}
// Fail 1% of tasks for the first attempt.
if retried == 0 && n%100 == 0 {
return fmt.Errorf(":(") return fmt.Errorf(":(")
} }
wg.Done() wg.Done()

View File

@ -11,6 +11,7 @@ import (
"github.com/hibiken/asynq/internal/base" "github.com/hibiken/asynq/internal/base"
"github.com/hibiken/asynq/internal/log" "github.com/hibiken/asynq/internal/log"
"github.com/hibiken/asynq/internal/rdb"
"github.com/rs/xid" "github.com/rs/xid"
) )
@ -162,4 +163,16 @@ func (h *heartbeater) beat() {
if err := h.broker.WriteServerState(&info, ws, h.interval*2); err != nil { if err := h.broker.WriteServerState(&info, ws, h.interval*2); err != nil {
h.logger.Errorf("could not write server state data: %v", err) h.logger.Errorf("could not write server state data: %v", err)
} }
// Debug purpose
rdb, ok := h.broker.(*rdb.RDB)
if !ok {
return
}
stats, err := rdb.CurrentStats()
if err != nil {
h.logger.Errorf("could not get current stat: %v", err)
} else {
h.logger.Debugf("current stats: %+v", stats)
}
} }