Improve sensitivity of TestQuerierIndexQueriesRace

Currently, the two goroutines race against each other and it's possible that the main test goroutine finishes way earlier than appendSeries has had a chance to run at all.

I tested this change by breaking the code that X fixed and running the race test 100 times. Without the additional time.Sleep the test failed 11 times. With the sleep it failed 65 out of the 100 runs. Which is still not ideal, but it's a step forward.

Signed-off-by: Dimitar Dimitrov <dimitar.dimitrov@grafana.com>
This commit is contained in:
Dimitar Dimitrov 2023-09-21 12:30:08 +02:00
parent 91054875d6
commit 1155d736b6
No known key found for this signature in database
GPG Key ID: 4541B04E6C90EBC3
1 changed files with 5 additions and 0 deletions

View File

@ -2225,6 +2225,7 @@ func TestQuerierIndexQueriesRace(t *testing.T) {
for _, c := range testCases { for _, c := range testCases {
c := c c := c
t.Run(fmt.Sprintf("%v", c.matchers), func(t *testing.T) { t.Run(fmt.Sprintf("%v", c.matchers), func(t *testing.T) {
t.Parallel()
db := openTestDB(t, DefaultOptions(), nil) db := openTestDB(t, DefaultOptions(), nil)
h := db.Head() h := db.Head()
t.Cleanup(func() { t.Cleanup(func() {
@ -2244,6 +2245,9 @@ func TestQuerierIndexQueriesRace(t *testing.T) {
values, _, err := q.LabelValues(ctx, "seq", c.matchers...) values, _, err := q.LabelValues(ctx, "seq", c.matchers...)
require.NoError(t, err) require.NoError(t, err)
require.Emptyf(t, values, `label values for label "seq" should be empty`) require.Emptyf(t, values, `label values for label "seq" should be empty`)
// Sleep to give the appends some change to run.
time.Sleep(time.Millisecond)
} }
}) })
} }
@ -2260,6 +2264,7 @@ func appendSeries(t *testing.T, ctx context.Context, wg *sync.WaitGroup, h *Head
require.NoError(t, err) require.NoError(t, err)
// Throttle down the appends to keep the test somewhat nimble. // Throttle down the appends to keep the test somewhat nimble.
// Otherwise, we end up appending thousands or millions of samples.
time.Sleep(time.Millisecond) time.Sleep(time.Millisecond)
} }
} }