mirror of
https://github.com/apache/lucene.git
synced 2025-02-08 19:15:06 +00:00
SOLR-10104: BlockDirectoryCache release hooks do not work with multiple directories.
# Conflicts: # solr/CHANGES.txt
This commit is contained in:
parent
a243befdbb
commit
a1f114f70f
@ -157,6 +157,8 @@ Bug Fixes
|
|||||||
|
|
||||||
* SOLR-10063: CoreContainer shutdown has race condition that can cause a hang on shutdown. (Mark Miller)
|
* SOLR-10063: CoreContainer shutdown has race condition that can cause a hang on shutdown. (Mark Miller)
|
||||||
|
|
||||||
|
* SOLR-10104: BlockDirectoryCache release hooks do not work with multiple directories. (Mike Drob, Mark Miller)
|
||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
package org.apache.solr.store.blockcache;
|
package org.apache.solr.store.blockcache;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import com.github.benmanes.caffeine.cache.Cache;
|
import com.github.benmanes.caffeine.cache.Cache;
|
||||||
@ -38,7 +40,7 @@ public class BlockCache {
|
|||||||
private final int numberOfBlocksPerBank;
|
private final int numberOfBlocksPerBank;
|
||||||
private final int maxEntries;
|
private final int maxEntries;
|
||||||
private final Metrics metrics;
|
private final Metrics metrics;
|
||||||
private volatile OnRelease onRelease;
|
private final List<OnRelease> onReleases = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
public static interface OnRelease {
|
public static interface OnRelease {
|
||||||
public void release(BlockCacheKey blockCacheKey);
|
public void release(BlockCacheKey blockCacheKey);
|
||||||
@ -95,7 +97,7 @@ public class BlockCache {
|
|||||||
location.setRemoved(true);
|
location.setRemoved(true);
|
||||||
locks[bankId].clear(block);
|
locks[bankId].clear(block);
|
||||||
lockCounters[bankId].decrementAndGet();
|
lockCounters[bankId].decrementAndGet();
|
||||||
if (onRelease != null) {
|
for (OnRelease onRelease : onReleases) {
|
||||||
onRelease.release(blockCacheKey);
|
onRelease.release(blockCacheKey);
|
||||||
}
|
}
|
||||||
metrics.blockCacheEviction.incrementAndGet();
|
metrics.blockCacheEviction.incrementAndGet();
|
||||||
@ -239,6 +241,6 @@ public class BlockCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setOnRelease(OnRelease onRelease) {
|
void setOnRelease(OnRelease onRelease) {
|
||||||
this.onRelease = onRelease;
|
this.onReleases.add(onRelease);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -457,7 +457,7 @@ public class MiniSolrCloudCluster {
|
|||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
executor.shutdown();
|
executor.shutdown();
|
||||||
executor.awaitTermination(2, TimeUnit.SECONDS);
|
executor.awaitTermination(15, TimeUnit.SECONDS);
|
||||||
try {
|
try {
|
||||||
if (!externalZkServer) {
|
if (!externalZkServer) {
|
||||||
zkServer.shutdown();
|
zkServer.shutdown();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user