Skip to content

Commit bff8e02

Browse files
committed
kvstorage: factor out SubsumeReplica storage call
Epic: none Release note: none
1 parent 3e38a8c commit bff8e02

File tree

2 files changed

+28
-14
lines changed

2 files changed

+28
-14
lines changed

pkg/kv/kvserver/kvstorage/destroy.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,28 @@ func DestroyReplica(
174174
NextReplicaID: next, // NB: NextReplicaID > 0
175175
})
176176
}
177+
178+
// SubsumeReplica is like DestroyReplica, but it does not delete the user keys
179+
// (and the corresponding system and lock table keys). The latter are inherited
180+
// by the subsuming range.
181+
//
182+
// Returns SelectOpts which can be used to reflect on the key spans that this
183+
// function clears.
184+
// TODO(pav-kv): get rid of SelectOpts.
185+
func SubsumeReplica(
186+
ctx context.Context, reader storage.Reader, writer storage.Writer, info DestroyReplicaInfo,
187+
) (rditer.SelectOpts, error) {
188+
// NB: set MustUseClearRange to true because this call is used for generating
189+
// SSTables when ingesting a snapshot, which requires Clears and Puts to be
190+
// written in key order. DestroyReplica sets RangeTombstoneKey after clearing
191+
// the unreplicated span which may contain higher keys.
192+
opts := ClearRangeDataOptions{
193+
ClearReplicatedByRangeID: true,
194+
ClearUnreplicatedByRangeID: true,
195+
MustUseClearRange: true,
196+
}
197+
return rditer.SelectOpts{
198+
ReplicatedByRangeID: opts.ClearReplicatedByRangeID,
199+
UnreplicatedByRangeID: opts.ClearUnreplicatedByRangeID,
200+
}, DestroyReplica(ctx, reader, writer, info, MergedTombstoneReplicaID, opts)
201+
}

pkg/kv/kvserver/snapshot_apply_prepare.go

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -150,20 +150,9 @@ func (s *snapWriteBuilder) clearSubsumedReplicaDiskData(ctx context.Context) err
150150
for _, sub := range s.subsume {
151151
// We have to create an SST for the subsumed replica's range-id local keys.
152152
if err := s.writeSST(ctx, func(ctx context.Context, w storage.Writer) error {
153-
// NOTE: We set mustClearRange to true because we are setting
154-
// RangeTombstoneKey. Since Clears and Puts need to be done in increasing
155-
// order of keys, it is not safe to use ClearRangeIter.
156-
opts := kvstorage.ClearRangeDataOptions{
157-
ClearReplicatedByRangeID: true,
158-
ClearUnreplicatedByRangeID: true,
159-
MustUseClearRange: true,
160-
}
161-
s.cleared = append(s.cleared, rditer.Select(sub.RangeID, rditer.SelectOpts{
162-
ReplicatedByRangeID: opts.ClearReplicatedByRangeID,
163-
UnreplicatedByRangeID: opts.ClearUnreplicatedByRangeID,
164-
})...)
165-
// NB: Actually clear RangeID local key spans.
166-
return kvstorage.DestroyReplica(ctx, reader, w, sub, kvstorage.MergedTombstoneReplicaID, opts)
153+
opts, err := kvstorage.SubsumeReplica(ctx, reader, w, sub)
154+
s.cleared = append(s.cleared, rditer.Select(sub.RangeID, opts)...)
155+
return err
167156
}); err != nil {
168157
return err
169158
}

0 commit comments

Comments
 (0)