Operations like PersistAll operate with a concurrency parameter which is used to split skiplist into range partitions. For concurrency=n, first n wctx are allocated in an array and then n range partitions are generated using GetRangeSplitItems. If GetRangeSplitItems results in >n range partitions, we can run into index out of range panic.
GetRangeSplitItems can return >n items if more skiplist nodes are added to the chosen level while GetRangeSplitItems is still running. In nitro this is handled correctly. In plasma, this must be fixed by making sure callback passed to PageVisitor can handle the extra range partitions - by allocating wctx on the fly if more range partitions are returned.
|For Gerrit Dashboard: MB-51338|
|171925,1||MB-51338: Avoid getting more partitions than requested in GetRangePartitions||unstable||plasma||Status: MERGED||+2||+1|