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();