diff --git a/changelog.d/duplicates-scan-race-budget.md b/changelog.d/duplicates-scan-race-budget.md new file mode 100644 index 000000000..c8710a5a7 --- /dev/null +++ b/changelog.d/duplicates-scan-race-budget.md @@ -0,0 +1,2 @@ +### Fixed +- **Duplicate review timing test no longer fails under the race detector**: its 100ms budget now scales when the race detector is on. No change to how Bindery behaves. diff --git a/internal/duplicates/duplicates_test.go b/internal/duplicates/duplicates_test.go index 85e35f9b0..a879f572b 100644 --- a/internal/duplicates/duplicates_test.go +++ b/internal/duplicates/duplicates_test.go @@ -581,8 +581,14 @@ func TestScanScale(t *testing.T) { groups := Scan(books, nil) elapsed := time.Since(start) - if elapsed > 100*time.Millisecond { - t.Errorf("Scan(500 books) took %s, budget 100ms", elapsed) + // The race detector slows Scan several fold, so the budget scales with it; + // a fixed 100ms failed on a shared CI runner under -race. + budget := 100 * time.Millisecond + if raceEnabled { + budget *= 10 + } + if elapsed > budget { + t.Errorf("Scan(500 books) took %s, budget %s", elapsed, budget) } if len(groups) != 2 { t.Fatalf("Scan = %d groups, want 2", len(groups)) diff --git a/internal/duplicates/race_off_test.go b/internal/duplicates/race_off_test.go new file mode 100644 index 000000000..3b742dd2b --- /dev/null +++ b/internal/duplicates/race_off_test.go @@ -0,0 +1,5 @@ +//go:build !race + +package duplicates + +const raceEnabled = false diff --git a/internal/duplicates/race_on_test.go b/internal/duplicates/race_on_test.go new file mode 100644 index 000000000..8892d29f5 --- /dev/null +++ b/internal/duplicates/race_on_test.go @@ -0,0 +1,7 @@ +//go:build race + +package duplicates + +// raceEnabled reports whether the race detector is on. It slows Scan several +// fold, so wall clock budgets scale with it. +const raceEnabled = true