Skip to content

Commit 7dbbb8c

Browse files
committed
loqrecovery: use separate readers when collecting
Epic: none Release note: none
1 parent 75a487f commit 7dbbb8c

File tree

2 files changed

+14
-7
lines changed

2 files changed

+14
-7
lines changed

pkg/kv/kvserver/loqrecovery/collect.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,10 @@ func CollectStoresReplicaInfo(
158158
return loqrecoverypb.ClusterReplicaInfo{}, CollectionStats{}, errors.New("can't collect info from stored that belong to different clusters")
159159
}
160160
nodes[ident.NodeID] = struct{}{}
161-
if err := visitStoreReplicas(ctx, reader, ident.StoreID, ident.NodeID,
161+
// TODO(sep-raft-log): use different readers when the raft and state machine
162+
// engines are separate. Since the engines are immutable in this path, there
163+
// is no question whether to and in which order to grab engine snapshots.
164+
if err := visitStoreReplicas(ctx, reader, reader, ident.StoreID, ident.NodeID,
162165
func(info loqrecoverypb.ReplicaInfo) error {
163166
replicas = append(replicas, info)
164167
return nil
@@ -178,18 +181,18 @@ func CollectStoresReplicaInfo(
178181

179182
func visitStoreReplicas(
180183
ctx context.Context,
181-
reader storage.Reader,
184+
state, raft storage.Reader,
182185
storeID roachpb.StoreID,
183186
nodeID roachpb.NodeID,
184187
send func(info loqrecoverypb.ReplicaInfo) error,
185188
) error {
186-
if err := kvstorage.IterateRangeDescriptorsFromDisk(ctx, reader, func(desc roachpb.RangeDescriptor) error {
189+
if err := kvstorage.IterateRangeDescriptorsFromDisk(ctx, state, func(desc roachpb.RangeDescriptor) error {
187190
rsl := stateloader.Make(desc.RangeID)
188-
rstate, err := rsl.Load(ctx, reader, &desc)
191+
rstate, err := rsl.Load(ctx, state, &desc)
189192
if err != nil {
190193
return err
191194
}
192-
hstate, err := rsl.LoadHardState(ctx, reader)
195+
hstate, err := rsl.LoadHardState(ctx, raft)
193196
if err != nil {
194197
return err
195198
}
@@ -199,7 +202,7 @@ func visitStoreReplicas(
199202
// outcome, and they will become committed as soon as the replica is
200203
// designated as a survivor.
201204
rangeUpdates, err := GetDescriptorChangesFromRaftLog(
202-
ctx, desc.RangeID, rstate.RaftAppliedIndex+1, math.MaxInt64, reader)
205+
ctx, desc.RangeID, rstate.RaftAppliedIndex+1, math.MaxInt64, raft)
203206
if err != nil {
204207
return err
205208
}

pkg/kv/kvserver/loqrecovery/server.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,13 @@ func (s Server) ServeLocalReplicas(
134134
for _, s := range stores {
135135
s := s // copy for closure
136136
g.Go(func() error {
137+
// TODO(sep-raft-log): when raft and state machine engines are separate,
138+
// we need two snapshots here. This path is online, so we should make sure
139+
// these snapshots are consistent. In particular, the LogID must match
140+
// across the two.
137141
reader := s.TODOEngine().NewSnapshot()
138142
defer reader.Close()
139-
return visitStoreReplicas(ctx, reader, s.StoreID(), s.NodeID(),
143+
return visitStoreReplicas(ctx, reader, reader, s.StoreID(), s.NodeID(),
140144
func(info loqrecoverypb.ReplicaInfo) error {
141145
return syncStream.Send(&serverpb.RecoveryCollectLocalReplicaInfoResponse{ReplicaInfo: &info})
142146
})

0 commit comments

Comments
 (0)