Skip to content

Commit

Permalink
kvserver: deflake and unskip split race uninit rhs
Browse files Browse the repository at this point in the history
`TestStoreRangeSplitRaceUninitializedRHS` was skipped some time ago, in
mid 2021 (#67082). The test was skipped due to flakes that appeared
related to untimely test cluster startup.

This commit unskips the test and makes minor adjustments in order to be
current with semantics of Raft transport. Without these adjustments, the
`MsgVote` sent every microsecond with the intention of triggering a
race, would completely fill up  the Raft transport send queue. Once the
queue was full, the test would fail as requests are dropped.

This commit updates the `MsgVote` send loop logic to not require every
`MsgVote` request to be sent for the test to succeed.

Resolves: #66480

Release note: None
  • Loading branch information
kvoli committed Mar 15, 2023
1 parent 62faa26 commit 4be1c75
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions pkg/kv/kvserver/client_split_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ import (
"github.com/cockroachdb/cockroach/pkg/storage/enginepb"
"github.com/cockroachdb/cockroach/pkg/testutils"
"github.com/cockroachdb/cockroach/pkg/testutils/serverutils"
"github.com/cockroachdb/cockroach/pkg/testutils/skip"
"github.com/cockroachdb/cockroach/pkg/testutils/sqlutils"
"github.com/cockroachdb/cockroach/pkg/testutils/testcluster"
"github.com/cockroachdb/cockroach/pkg/ts"
Expand Down Expand Up @@ -2025,7 +2024,6 @@ func TestStoreSplitGCHint(t *testing.T) {
// and the uninitialized replica reacting to messages.
func TestStoreRangeSplitRaceUninitializedRHS(t *testing.T) {
defer leaktest.AfterTest(t)()
skip.WithIssue(t, 66480, "flaky test")
defer log.Scope(t).Close(t)

currentTrigger := make(chan *roachpb.SplitTrigger, 1)
Expand Down Expand Up @@ -2103,6 +2101,7 @@ func TestStoreRangeSplitRaceUninitializedRHS(t *testing.T) {

for i := 0; i < 10; i++ {
errChan := make(chan *kvpb.Error)
failedSendLog := log.Every(time.Second)

// Closed when the split goroutine is done.
splitDone := make(chan struct{})
Expand Down Expand Up @@ -2147,7 +2146,15 @@ func TestStoreRangeSplitRaceUninitializedRHS(t *testing.T) {
Term: term,
},
}, rpc.DefaultClass); !sent {
t.Error("transport failed to send vote request")
// SendAsync can return false, indicating the message didn't send.
// The most likely reason this test encounters a message failing to
// send is the outgoing message queue being full. The queue filling
// up is expected given it has fixed capacity and this loop is
// attempting to sending 1 MsgVote every microsecond. See comments
// below and above for the frequency rationale.
if failedSendLog.ShouldLog() {
log.Infof(ctx, "transport failed to send vote request")
}
}
select {
case <-splitDone:
Expand Down

0 comments on commit 4be1c75

Please sign in to comment.