From 232e46bcea87896bd3130cc5845ffe772cbac67e Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Mon, 8 Nov 2021 12:06:32 +0100 Subject: [PATCH] Add more discard handlers --- .../java/it/cavallium/dbengine/database/LLUtils.java | 10 +++++++++- .../database/collections/DatabaseMapDictionary.java | 5 ++++- .../database/disk/CachedIndexSearcherManager.java | 4 +++- .../dbengine/database/disk/LLLocalLuceneIndex.java | 6 ++++-- .../dbengine/database/memory/LLMemoryDictionary.java | 7 +++++-- .../dbengine/lucene/searcher/CountLocalSearcher.java | 4 +++- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/main/java/it/cavallium/dbengine/database/LLUtils.java b/src/main/java/it/cavallium/dbengine/database/LLUtils.java index eee47c0..a7b26af 100644 --- a/src/main/java/it/cavallium/dbengine/database/LLUtils.java +++ b/src/main/java/it/cavallium/dbengine/database/LLUtils.java @@ -480,7 +480,8 @@ public class LLUtils { return Mono.empty(); } }, (r, ex) -> Mono.fromRunnable(() -> r.close()), r -> Mono.fromRunnable(() -> r.close())) - .doOnDiscard(Send.class, send -> send.close()); + .doOnDiscard(Send.class, send -> send.close()) + .doOnDiscard(Resource.class, Resource::close); } // todo: remove this ugly method @@ -916,6 +917,7 @@ public class LLUtils { .doOnDiscard(Delta.class, LLUtils::discardDelta) .doOnDiscard(LLDelta.class, LLUtils::discardLLDelta) .doOnDiscard(Send.class, LLUtils::discardSend) + .doOnDiscard(Resource.class, LLUtils::discardResource) .doOnDiscard(Map.class, LLUtils::discardMap) .doOnDiscard(DatabaseStage.class, LLUtils::discardStage); @@ -944,6 +946,8 @@ public class LLUtils { discardLLDelta(o); } else if (obj instanceof Send o) { discardSend(o); + } else if (obj instanceof Resource o) { + discardResource(o); } else if (obj instanceof Map o) { discardMap(o); } else if (obj instanceof DatabaseStage o) { @@ -1059,6 +1063,10 @@ public class LLUtils { send.close(); } + private static void discardResource(Resource res) { + res.close(); + } + private static void discardMap(Map map) { for (Entry entry : map.entrySet()) { boolean hasByteBuf = false; 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 c39782e..ac98e7e 100644 --- a/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionary.java +++ b/src/main/java/it/cavallium/dbengine/database/collections/DatabaseMapDictionary.java @@ -1,6 +1,7 @@ package it.cavallium.dbengine.database.collections; import io.net5.buffer.api.Buffer; +import io.net5.buffer.api.Resource; import io.net5.buffer.api.Send; import io.net5.buffer.api.internal.ResourceSupport; import it.cavallium.dbengine.client.CompositeSnapshot; @@ -364,11 +365,13 @@ public class DatabaseMapDictionary extends DatabaseMapDictionaryDeep { for (Object o : list) { diff --git a/src/main/java/it/cavallium/dbengine/database/disk/CachedIndexSearcherManager.java b/src/main/java/it/cavallium/dbengine/database/disk/CachedIndexSearcherManager.java index 8277e37..1b7026e 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/CachedIndexSearcherManager.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/CachedIndexSearcherManager.java @@ -3,6 +3,7 @@ package it.cavallium.dbengine.database.disk; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import io.net5.buffer.api.Resource; import io.net5.buffer.api.Send; import it.cavallium.dbengine.database.LLSnapshot; import java.io.IOException; @@ -148,7 +149,8 @@ public class CachedIndexSearcherManager implements IndexSearcherManager { assert indexSearcher.getIndexReader().getRefCount() > 0; return new LLIndexSearcher(indexSearcher, decRef, this::dropCachedIndexSearcher).send(); }) - .doOnDiscard(Send.class, Send::close); + .doOnDiscard(Send.class, Send::close) + .doOnDiscard(Resource.class, Resource::close); }); } diff --git a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneIndex.java b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneIndex.java index 9e6fde3..22614c0 100644 --- a/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneIndex.java +++ b/src/main/java/it/cavallium/dbengine/database/disk/LLLocalLuceneIndex.java @@ -384,13 +384,15 @@ public class LLLocalLuceneIndex implements LLLuceneIndex { return localSearcher .collect(searcher, localQueryParams, keyFieldName, NO_TRANSFORMATION) .map(result -> new LLSearchResultShard(result.results(), result.totalHitsCount(), result::close)) - .doOnDiscard(Send.class, Send::close); + .doOnDiscard(Send.class, Send::close) + .doOnDiscard(Resource.class, Resource::close); } public Mono> retrieveSearcher(@Nullable LLSnapshot snapshot) { return searcherManager .retrieveSearcher(snapshot) - .doOnDiscard(Send.class, Send::close); + .doOnDiscard(Send.class, Send::close) + .doOnDiscard(Resource.class, Resource::close); } @Override diff --git a/src/main/java/it/cavallium/dbengine/database/memory/LLMemoryDictionary.java b/src/main/java/it/cavallium/dbengine/database/memory/LLMemoryDictionary.java index d46d59f..1608201 100644 --- a/src/main/java/it/cavallium/dbengine/database/memory/LLMemoryDictionary.java +++ b/src/main/java/it/cavallium/dbengine/database/memory/LLMemoryDictionary.java @@ -2,6 +2,7 @@ package it.cavallium.dbengine.database.memory; import io.net5.buffer.api.Buffer; import io.net5.buffer.api.BufferAllocator; +import io.net5.buffer.api.Resource; import io.net5.buffer.api.Send; import it.cavallium.dbengine.client.BadBlock; import it.cavallium.dbengine.database.LLDelta; @@ -528,7 +529,8 @@ public class LLMemoryDictionary implements LLDictionary { return getRange(snapshot, rangeMono) .take(1, true) .singleOrEmpty() - .doOnDiscard(Send.class, Send::close); + .doOnDiscard(Send.class, Send::close) + .doOnDiscard(Resource.class, Resource::close); } @Override @@ -536,7 +538,8 @@ public class LLMemoryDictionary implements LLDictionary { return getRangeKeys(snapshot, rangeMono) .take(1, true) .singleOrEmpty() - .doOnDiscard(Send.class, Send::close); + .doOnDiscard(Send.class, Send::close) + .doOnDiscard(Resource.class, Resource::close); } @Override diff --git a/src/main/java/it/cavallium/dbengine/lucene/searcher/CountLocalSearcher.java b/src/main/java/it/cavallium/dbengine/lucene/searcher/CountLocalSearcher.java index 4f95952..68a3d75 100644 --- a/src/main/java/it/cavallium/dbengine/lucene/searcher/CountLocalSearcher.java +++ b/src/main/java/it/cavallium/dbengine/lucene/searcher/CountLocalSearcher.java @@ -1,5 +1,6 @@ package it.cavallium.dbengine.lucene.searcher; +import io.net5.buffer.api.Resource; import io.net5.buffer.api.Send; import it.cavallium.dbengine.client.query.current.data.TotalHitsCount; import it.cavallium.dbengine.database.LLUtils; @@ -39,7 +40,8 @@ public class CountLocalSearcher implements LocalSearcher { is -> Mono.empty() ) .map(count -> new LuceneSearchResult(TotalHitsCount.of(count, true), Flux.empty(), null)) - .doOnDiscard(Send.class, Send::close); + .doOnDiscard(Send.class, Send::close) + .doOnDiscard(Resource.class, Resource::close); } @Override