Skip to content

Commit

Permalink
kvserver: deflake TestRangefeedCheckpointsRecoverFromLeaseExpiration
Browse files Browse the repository at this point in the history
This commit does the following to deflake the test: wait for N1's
view of N2's lease expiration to match N2's view. This is important
in the rare case where N1 tries to increase N2's epoch, but it has
a stale view of the lease expiration time.

Fixes: cockroachdb#124178, cockroachdb#123551

Epic: None

Release note: None
  • Loading branch information
iskettaneh committed Oct 3, 2024
1 parent 03f817a commit a45c9c0
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions pkg/kv/kvserver/replica_rangefeed_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1367,8 +1367,6 @@ func TestRangefeedCheckpointsRecoverFromLeaseExpiration(t *testing.T) {
defer leaktest.AfterTest(t)()
defer log.Scope(t).Close(t)

skip.WithIssue(t, 123551)

ctx := context.Background()
var scratchRangeID int64 // accessed atomically
// nudgeSeen will be set if a request filter sees the signature of the
Expand Down Expand Up @@ -1509,13 +1507,25 @@ func TestRangefeedCheckpointsRecoverFromLeaseExpiration(t *testing.T) {
// Expire the lease. Given that the Raft leadership is on n2, only n2 will be
// eligible to acquire a new lease.
log.Infof(ctx, "test expiring lease")
nl := n2.NodeLiveness().(*liveness.NodeLiveness)
resumeHeartbeats := nl.PauseAllHeartbeatsForTest()
n2Liveness, ok := nl.Self()
nl2 := n2.NodeLiveness().(*liveness.NodeLiveness)
resumeHeartbeats := nl2.PauseAllHeartbeatsForTest()
n2Liveness, ok := nl2.Self()
require.True(t, ok)
manualClock.Increment(n2Liveness.Expiration.ToTimestamp().Add(1, 0).WallTime - manualClock.UnixNano())
manualClock.Increment(n2Liveness.Expiration.ToTimestamp().
Add(1, 0).WallTime - manualClock.UnixNano())
atomic.StoreInt64(&rejectExtraneousRequests, 1)
// Ask another node to increment n2's liveness record.

// Ask another node to increment n2's liveness record, but first, wait until
// n1's liveness state is the same as n2's. Otherwise, the epoch below might
// get rejected because of mismatching liveness records.
testutils.SucceedsSoon(t, func() error {
nl1 := n1.NodeLiveness().(*liveness.NodeLiveness)
n2LivenessFromN1, _ := nl1.GetLiveness(n2.NodeID())
if n2Liveness != n2LivenessFromN1.Liveness {
return errors.Errorf("waiting for node 2 liveness to converge on both nodes 1 and 2")
}
return nil
})
require.NoError(t, n1.NodeLiveness().(*liveness.NodeLiveness).IncrementEpoch(ctx, n2Liveness))
resumeHeartbeats()

Expand Down

0 comments on commit a45c9c0

Please sign in to comment.