summaryrefslogtreecommitdiff
path: root/core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java')
-rw-r--r--core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java21
1 files changed, 15 insertions, 6 deletions
diff --git a/core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java b/core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java
index b9caecea96..0f83e07874 100644
--- a/core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java
+++ b/core/src/main/java/org/elasticsearch/common/lucene/index/ElasticsearchDirectoryReader.java
@@ -50,6 +50,12 @@ public final class ElasticsearchDirectoryReader extends FilterDirectoryReader {
}
@Override
+ public CacheHelper getReaderCacheHelper() {
+ // safe to delegate since this reader does not alter the index
+ return in.getReaderCacheHelper();
+ }
+
+ @Override
protected DirectoryReader doWrapDirectoryReader(DirectoryReader in) throws IOException {
return new ElasticsearchDirectoryReader(in, wrapper, shardId);
}
@@ -84,14 +90,17 @@ public final class ElasticsearchDirectoryReader extends FilterDirectoryReader {
* @throws IllegalArgumentException if the reader doesn't contain an {@link ElasticsearchDirectoryReader} in it's hierarchy
*/
@SuppressForbidden(reason = "This is the only sane way to add a ReaderClosedListener")
- public static void addReaderCloseListener(DirectoryReader reader, IndexReader.ReaderClosedListener listener) {
+ public static void addReaderCloseListener(DirectoryReader reader, IndexReader.ClosedListener listener) {
ElasticsearchDirectoryReader elasticsearchDirectoryReader = getElasticsearchDirectoryReader(reader);
- if (elasticsearchDirectoryReader != null) {
- assert reader.getCoreCacheKey() == elasticsearchDirectoryReader.getCoreCacheKey();
- elasticsearchDirectoryReader.addReaderClosedListener(listener);
- return;
+ if (elasticsearchDirectoryReader == null) {
+ throw new IllegalArgumentException("Can't install close listener reader is not an ElasticsearchDirectoryReader/ElasticsearchLeafReader");
+ }
+ IndexReader.CacheHelper cacheHelper = elasticsearchDirectoryReader.getReaderCacheHelper();
+ if (cacheHelper == null) {
+ throw new IllegalArgumentException("Reader " + elasticsearchDirectoryReader + " does not support caching");
}
- throw new IllegalArgumentException("Can't install close listener reader is not an ElasticsearchDirectoryReader/ElasticsearchLeafReader");
+ assert cacheHelper.getKey() == reader.getReaderCacheHelper().getKey();
+ cacheHelper.addClosedListener(listener);
}
/**