-
Notifications
You must be signed in to change notification settings - Fork 111
Closed
Description
If record store has 10 records (1) -> (10), scanning with .setSkip(2).setReturnedRowLimit(2)
, scanning result is (5), (6)
This issue is caused by KeyValueCursor
builder didn't clear skip when scanning records, and skip was set again in KeyValueUnsplitter
if (metaData.isSplitLongRecords()) {
RecordCursor<KeyValue> keyValues = KeyValueCursor.Builder.withSubspace(recordsSubspace)
.setContext(context).setContinuation(continuation)
.setLow(low, lowEndpoint)
.setHigh(high, highEndpoint)
.setScanProperties(scanProperties.with(ExecuteProperties::clearRowAndTimeLimits).with(ExecuteProperties::clearState))
.build();
rawRecords = new SplitHelper.KeyValueUnsplitter(context, recordsSubspace, keyValues, useOldVersionFormat(), sizeInfo, scanProperties.isReverse(),
new CursorLimitManager(context, scanProperties.with(ExecuteProperties::clearReturnedRowLimit)))
.skip(scanProperties.getExecuteProperties().getSkip())
.limitRowsTo(scanProperties.getExecuteProperties().getReturnedRowLimit());
Non-split long records does clear skip:
final ScanProperties finalScanProperties = scanProperties
.with(executeProperties -> {
final ExecuteProperties.Builder builder = executeProperties.toBuilder()
.clearTimeLimit()
.clearSkipAndAdjustLimit()
.clearState();
int returnedRowLimit = builder.getReturnedRowLimitOrMax();
if (returnedRowLimit != Integer.MAX_VALUE) {
// Adjust limit to twice the supplied limit in case there are versions in the records
builder.setReturnedRowLimit(2 * returnedRowLimit);
}
return builder.build();
});
rawRecords = new SplitHelper.KeyValueUnsplitter(context, recordsSubspace, keyValuesBuilder
.setScanProperties(finalScanProperties).build(),
useOldVersionFormat(), sizeInfo, scanProperties.isReverse(),
new CursorLimitManager(context, scanProperties.with(ExecuteProperties::clearReturnedRowLimit)))
.skip(scanProperties.getExecuteProperties().getSkip())
.limitRowsTo(scanProperties.getExecuteProperties().getReturnedRowLimit());
Metadata
Metadata
Assignees
Labels
No labels