From a720a12701efe2dccae2430be8080eb8a5fc3547 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 20 May 2022 10:44:00 +0200 Subject: [PATCH] Bugfix --- .../cavallium/dbengine/database/LLRange.java | 22 +++++++++++++++++ .../collections/DatabaseMapDictionary.java | 24 +++++-------------- .../database/disk/LLLocalDictionary.java | 6 ++++- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/main/java/it/cavallium/dbengine/database/LLRange.java b/src/main/java/it/cavallium/dbengine/database/LLRange.java index 7ced01e..6510a51 100644 --- a/src/main/java/it/cavallium/dbengine/database/LLRange.java +++ b/src/main/java/it/cavallium/dbengine/database/LLRange.java @@ -156,6 +156,17 @@ public class LLRange extends ResourceSupport { } } + public Buffer getMinCopy() { + ensureOwned(); + if (min != null) { + return min.copy(); + } else if (single != null) { + return single.copy(); + } else { + return null; + } + } + public boolean hasMax() { ensureOwned(); return max != null || single != null; @@ -185,6 +196,17 @@ public class LLRange extends ResourceSupport { } } + public Buffer getMaxCopy() { + ensureOwned(); + if (max != null) { + return max.copy(); + } else if (single != null) { + return single.copy(); + } else { + return null; + } + } + public Send getSingle() { ensureOwned(); assert isSingle(); diff --git a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionary.java b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionary.java index 506b176..17bf7da 100644 --- a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionary.java +++ b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionary.java @@ -1,5 +1,7 @@ package it.cavallium.dbengine.database.collections; +import static java.util.Objects.requireNonNullElseGet; + import io.netty5.buffer.api.Buffer; import io.netty5.buffer.api.Resource; import io.netty5.buffer.api.Send; @@ -494,23 +496,9 @@ public class DatabaseMapDictionary extends DatabaseMapDictionaryDeep extends DatabaseMapDictionaryDeep boundedRangeMono = rangeMono .handle((fullRange, sink) -> { - try { + try (fullRange) { sink.next(getPatchedRange(fullRange, keyMin, keyMax)); } catch (SerializationException e) { sink.error(e); 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 42c074b..285c3fc 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDictionary.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalDictionary.java @@ -868,12 +868,16 @@ public class LLLocalDictionary implements LLDictionary { boolean reverse, boolean smallRange) { return rangeMono.flatMapMany(range -> { - try (range) { + try { if (range.isSingle()) { return this.getRangeKeysSingle(snapshot, rangeMono.map(LLRange::getSingleUnsafe)); } else { return this.getRangeKeysMulti(snapshot, rangeMono, reverse, smallRange); } + } finally { + if (range != null && range.isAccessible()) { + range.close(); + } } }); }