diff --git a/pom.xml b/pom.xml index 9361209..aa77247 100644 --- a/pom.xml +++ b/pom.xml @@ -138,7 +138,7 @@ org.rocksdb rocksdbjni - 6.15.2 + 6.15.5 org.apache.lucene diff --git a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionaryDeep.java b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionaryDeep.java index 6966910..bc70f23 100644 --- a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionaryDeep.java +++ b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionaryDeep.java @@ -249,10 +249,9 @@ public class DatabaseMapDictionaryDeep> implem } else { return dictionary .getRangeKeyPrefixes(resolveSnapshot(snapshot), range, keyPrefix.length + keySuffixLength) - .flatMapSequential(groupKeyWithExt -> { - byte[] groupKeyWithoutExt = removeExtFromFullKey(groupKeyWithExt); + .flatMapSequential(groupKeyWithoutExt -> { byte[] groupSuffix = this.stripPrefix(groupKeyWithoutExt); - assert subStageKeysConsistency(groupKeyWithExt.length); + assert subStageKeysConsistency(groupKeyWithoutExt.length + keyExtLength); return this.subStageGetter .subStage(dictionary, snapshot, diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDictionary.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDictionary.java index 43eb4b5..62cf658 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDictionary.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDictionary.java @@ -48,6 +48,8 @@ public class LLLocalDictionary implements LLDictionary { static final int CAPPED_WRITE_BATCH_CAP = 50000; // 50K operations static final int MULTI_GET_WINDOW = 500; static final WriteOptions BATCH_WRITE_OPTIONS = new WriteOptions().setLowPri(true); + static final boolean PREFER_ALWAYS_SEEK_TO_FIRST = true; + static final boolean ALWAYS_VERIFY_CHECKSUMS = true; private static final int STRIPES = 512; private static final byte[] FIRST_KEY = new byte[]{}; @@ -167,7 +169,7 @@ public class LLLocalDictionary implements LLDictionary { return Mono .fromCallable(() -> { var readOpts = resolveSnapshot(snapshot); - readOpts.setVerifyChecksums(false); + readOpts.setVerifyChecksums(ALWAYS_VERIFY_CHECKSUMS); readOpts.setFillCache(false); if (range.hasMin()) { readOpts.setIterateLowerBound(new Slice(range.getMin())); @@ -698,7 +700,7 @@ public class LLLocalDictionary implements LLDictionary { return Mono .fromCallable(() -> { var readOpts = getReadOptions(null); - readOpts.setVerifyChecksums(false); + readOpts.setVerifyChecksums(ALWAYS_VERIFY_CHECKSUMS); // readOpts.setIgnoreRangeDeletions(true); readOpts.setFillCache(false); @@ -752,7 +754,7 @@ public class LLLocalDictionary implements LLDictionary { .fromCallable(() -> { var readOpts = resolveSnapshot(snapshot); readOpts.setFillCache(false); - readOpts.setVerifyChecksums(false); + readOpts.setVerifyChecksums(ALWAYS_VERIFY_CHECKSUMS); if (range.hasMin()) { readOpts.setIterateLowerBound(new Slice(range.getMin())); } @@ -840,12 +842,8 @@ public class LLLocalDictionary implements LLDictionary { } } else { rocksdbSnapshot.setFillCache(false); - rocksdbSnapshot.setVerifyChecksums(false); - rocksdbSnapshot.setPinData(false); + rocksdbSnapshot.setVerifyChecksums(ALWAYS_VERIFY_CHECKSUMS); rocksdbSnapshot.setIgnoreRangeDeletions(false); - if (snapshot == null) { - rocksdbSnapshot.setTailing(true); - } long count = 0; try (RocksIterator iter = db.newIterator(cfh, rocksdbSnapshot)) { iter.seekToFirst(); @@ -862,7 +860,7 @@ public class LLLocalDictionary implements LLDictionary { private long exactSizeAll(@Nullable LLSnapshot snapshot) { var readOpts = resolveSnapshot(snapshot); readOpts.setFillCache(false); - readOpts.setVerifyChecksums(false); + readOpts.setVerifyChecksums(ALWAYS_VERIFY_CHECKSUMS); long count = 0; try (RocksIterator iter = db.newIterator(cfh, readOpts)) { @@ -887,7 +885,7 @@ public class LLLocalDictionary implements LLDictionary { readOpts.setIterateUpperBound(new Slice(range.getMax())); } try (RocksIterator iter = db.newIterator(cfh, readOpts)) { - if (range.hasMin()) { + if (!LLLocalDictionary.PREFER_ALWAYS_SEEK_TO_FIRST && range.hasMin()) { iter.seek(range.getMin()); } else { iter.seekToFirst(); diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneGroupedReactiveIterator.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneGroupedReactiveIterator.java index af7db42..2967698 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneGroupedReactiveIterator.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneGroupedReactiveIterator.java @@ -53,7 +53,7 @@ public abstract class LLLocalLuceneGroupedReactiveIterator { readOptions.setIterateUpperBound(new Slice(range.getMax())); } var rocksIterator = db.newIterator(cfh, readOptions); - if (range.hasMin()) { + if (!LLLocalDictionary.PREFER_ALWAYS_SEEK_TO_FIRST && range.hasMin()) { rocksIterator.seek(range.getMin()); } else { rocksIterator.seekToFirst(); diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneKeyPrefixesReactiveIterator.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneKeyPrefixesReactiveIterator.java index 7e591cf..2ebb0fc 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneKeyPrefixesReactiveIterator.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneKeyPrefixesReactiveIterator.java @@ -39,6 +39,7 @@ public class LLLocalLuceneKeyPrefixesReactiveIterator { return Flux .generate(() -> { synchronized (this) { + System.out.println(Thread.currentThread().getName()); var readOptions = new ReadOptions(this.readOptions); readOptions.setFillCache(range.hasMin() && range.hasMax()); if (range.hasMin()) { @@ -48,7 +49,7 @@ public class LLLocalLuceneKeyPrefixesReactiveIterator { readOptions.setIterateUpperBound(new Slice(range.getMax())); } var rocksIterator = db.newIterator(cfh, readOptions); - if (range.hasMin()) { + if (!LLLocalDictionary.PREFER_ALWAYS_SEEK_TO_FIRST && range.hasMin()) { rocksIterator.seek(range.getMin()); } else { rocksIterator.seekToFirst(); @@ -57,6 +58,7 @@ public class LLLocalLuceneKeyPrefixesReactiveIterator { } }, (rocksIterator, sink) -> { synchronized (this) { + System.out.println(Thread.currentThread().getName()); byte[] firstGroupKey = null; while (rocksIterator.isValid()) { diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneReactiveIterator.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneReactiveIterator.java index 6944299..1f709a0 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneReactiveIterator.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneReactiveIterator.java @@ -43,7 +43,7 @@ public abstract class LLLocalLuceneReactiveIterator { readOptions.setIterateUpperBound(new Slice(range.getMax())); } var rocksIterator = db.newIterator(cfh, readOptions); - if (range.hasMin()) { + if (!LLLocalDictionary.PREFER_ALWAYS_SEEK_TO_FIRST && range.hasMin()) { rocksIterator.seek(range.getMin()); } else { rocksIterator.seekToFirst();