Skip wrong keys

This commit is contained in:
Andrea Cavalli 2022-07-04 20:03:10 +02:00
parent 4ed382197b
commit 0bc7b6d659

View File

@ -26,14 +26,14 @@ public class LLLocalKeyPrefixReactiveRocksIterator extends
@Override @Override
public void drop(LLLocalKeyPrefixReactiveRocksIterator obj) { public void drop(LLLocalKeyPrefixReactiveRocksIterator obj) {
try { try {
if (obj.rangeShared != null) { if (obj.rangeShared != null && obj.rangeShared.isAccessible()) {
obj.rangeShared.close(); obj.rangeShared.close();
} }
} catch (Throwable ex) { } catch (Throwable ex) {
logger.error("Failed to close range", ex); logger.error("Failed to close range", ex);
} }
try { try {
if (obj.readOptions != null) { if (obj.readOptions != null && obj.readOptions.isAccessible()) {
obj.readOptions.close(); obj.readOptions.close();
} }
} catch (Throwable ex) { } catch (Throwable ex) {
@ -102,15 +102,22 @@ public class LLLocalKeyPrefixReactiveRocksIterator extends
key = LLUtils.fromByteArray(db.getAllocator(), rocksIterator.key()); key = LLUtils.fromByteArray(db.getAllocator(), rocksIterator.key());
} }
try (key) { try (key) {
if (firstGroupKey == null) { var keyLen = key.readableBytes();
firstGroupKey = key.copy(); if (keyLen >= prefixLength) {
} else if (!LLUtils.equals(firstGroupKey, if (firstGroupKey == null) {
firstGroupKey.readerOffset(), firstGroupKey = key.copy();
key, assert firstGroupKey == null || firstGroupKey.readableBytes() >= prefixLength;
key.readerOffset(), } else if (!LLUtils.equals(firstGroupKey,
prefixLength firstGroupKey.readerOffset(),
)) { key,
break; key.readerOffset(),
prefixLength
)) {
break;
}
} else {
logger.error("Skipped a key with length {}, the expected minimum prefix key length is {}!"
+ " This key will be dropped", key.readableBytes(), prefixLength);
} }
rocksIterator.next(); rocksIterator.next();
} }