Skip to content

Commit 6a65017

Browse files
committed
kvstorage: test iterateRangeIDKeys with > 1 key
Epic: none Release note: none
1 parent c7b8fff commit 6a65017

File tree

1 file changed

+38
-12
lines changed

1 file changed

+38
-12
lines changed

pkg/kv/kvserver/kvstorage/init_test.go

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@ import (
2323
"github.com/stretchr/testify/require"
2424
)
2525

26-
// TestIterateRangeIDKeys lays down a number of tombstones (at keys.RangeTombstoneKey) interspersed
27-
// with other irrelevant keys (both chosen randomly). It then verifies that iterateRangeIDKeys
28-
// correctly returns only the relevant keys and values.
26+
// TestIterateRangeIDKeys lays down a number of RangeTombstone and ReplicaID
27+
// keys (at keys.RangeTombstoneKey and keys.RaftReplicaIDKey) interspersed with
28+
// other irrelevant keys (both chosen randomly). It then verifies that
29+
// iterateRangeIDKeys correctly returns only the relevant keys and values.
2930
func TestIterateRangeIDKeys(t *testing.T) {
3031
defer leaktest.AfterTest(t)()
3132
defer log.Scope(t).Close(t)
@@ -54,6 +55,9 @@ func TestIterateRangeIDKeys(t *testing.T) {
5455
rangeIDFn := func() roachpb.RangeID {
5556
return 1 + roachpb.RangeID(rng.Intn(10*rangeCount)) // spread rangeIDs out
5657
}
58+
toss := func(x, outOf int) bool {
59+
return rng.Intn(outOf) < x
60+
}
5761

5862
// Write a number of keys that should be irrelevant to the iteration in this test.
5963
for i := 0; i < rangeCount; i++ {
@@ -74,25 +78,40 @@ func TestIterateRangeIDKeys(t *testing.T) {
7478
type seenT struct {
7579
rangeID roachpb.RangeID
7680
tombstone kvserverpb.RangeTombstone
81+
replicaID kvserverpb.RaftReplicaID
7782
}
7883

7984
// Next, write the keys we're planning to see again.
8085
wanted := make([]seenT, 0, rangeCount)
8186
for used := make(map[roachpb.RangeID]struct{}); len(wanted) < rangeCount; {
8287
rangeID := rangeIDFn()
8388
if _, ok := used[rangeID]; ok {
84-
// We already wrote this key, so roll the dice again.
89+
// We already wrote this RangeID, so roll the dice again.
8590
continue
8691
}
8792
used[rangeID] = struct{}{}
8893

89-
tombstone := kvserverpb.RangeTombstone{
90-
NextReplicaID: roachpb.ReplicaID(rng.Int31n(100)),
94+
// Write one or both keys, each combination with 1/3 chance.
95+
writeTombstone := toss(2, 3) // p == 2/3
96+
writeReplicaID := !writeTombstone || toss(1, 2) // p == 2/3
97+
98+
sl := MakeStateLoader(rangeID)
99+
written := seenT{rangeID: rangeID}
100+
if writeTombstone {
101+
written.tombstone = kvserverpb.RangeTombstone{
102+
NextReplicaID: roachpb.ReplicaID(rng.Int31n(100)),
103+
}
104+
t.Logf("writing tombstone at rangeID=%d", rangeID)
105+
require.NoError(t, sl.SetRangeTombstone(ctx, eng, written.tombstone))
106+
}
107+
if writeReplicaID {
108+
id := roachpb.ReplicaID(rng.Int31n(100))
109+
written.replicaID = kvserverpb.RaftReplicaID{ReplicaID: id}
110+
t.Logf("writing ReplicaID at rangeID=%d", rangeID)
111+
require.NoError(t, sl.SetRaftReplicaID(ctx, eng, id))
91112
}
92-
wanted = append(wanted, seenT{rangeID: rangeID, tombstone: tombstone})
93113

94-
t.Logf("writing tombstone at rangeID=%d", rangeID)
95-
require.NoError(t, MakeStateLoader(rangeID).SetRangeTombstone(ctx, eng, tombstone))
114+
wanted = append(wanted, written)
96115
}
97116

98117
sort.Slice(wanted, func(i, j int) bool {
@@ -102,10 +121,17 @@ func TestIterateRangeIDKeys(t *testing.T) {
102121
var seen []seenT
103122
require.NoError(t, iterateRangeIDKeys(ctx, eng, func(id roachpb.RangeID, get readKeyFn) error {
104123
var tombstone kvserverpb.RangeTombstone
105-
if ok, err := get(keys.RangeTombstoneKey(id), &tombstone); err != nil {
124+
foundTS, err := get(keys.RangeTombstoneKey(id), &tombstone)
125+
if err != nil {
106126
return err
107-
} else if ok {
108-
seen = append(seen, seenT{rangeID: id, tombstone: tombstone})
127+
}
128+
var replicaID kvserverpb.RaftReplicaID
129+
foundID, err := get(keys.RaftReplicaIDKey(id), &replicaID)
130+
if err != nil {
131+
return err
132+
}
133+
if foundTS || foundID {
134+
seen = append(seen, seenT{rangeID: id, tombstone: tombstone, replicaID: replicaID})
109135
}
110136
return nil
111137
}))

0 commit comments

Comments
 (0)