diff options
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.java | 21 |
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); } /** |