You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2011/12/14 18:41:18 UTC
svn commit: r1214376 -
/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java
Author: uschindler
Date: Wed Dec 14 17:41:18 2011
New Revision: 1214376
URL: http://svn.apache.org/viewvc?rev=1214376&view=rev
Log:
LUCENE-3644: Use one instance of the listener class also for composite/SlowMultiReader (to prevent filling the CHS of IR). Also don't use FieldCache.DEFAULT from inside FieldCacheImpl, as it makes extension hard. We have "wrapper" reference for that.
Modified:
lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java
Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java?rev=1214376&r1=1214375&r2=1214376&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/search/FieldCacheImpl.java Wed Dec 14 17:41:18 2011
@@ -148,10 +148,18 @@ class FieldCacheImpl implements FieldCac
}
// per-segment fieldcaches don't purge until the shared core closes.
- final static SegmentReader.CoreClosedListener purgeCore = new SegmentReader.CoreClosedListener() {
- // @Override -- not until Java 1.6
+ final SegmentReader.CoreClosedListener purgeCore = new SegmentReader.CoreClosedListener() {
+ @Override
public void onClose(SegmentReader owner) {
- FieldCache.DEFAULT.purge(owner);
+ FieldCacheImpl.this.purge(owner);
+ }
+ };
+
+ // composite/SlowMultiReaderWrapper fieldcaches don't purge until composite reader is closed.
+ final IndexReader.ReaderClosedListener purgeReader = new IndexReader.ReaderClosedListener() {
+ @Override
+ public void onClose(IndexReader owner) {
+ FieldCacheImpl.this.purge(owner);
}
};
@@ -191,14 +199,9 @@ class FieldCacheImpl implements FieldCac
innerCache = new HashMap<Entry,Object>();
readerCache.put(readerKey, innerCache);
if (reader instanceof SegmentReader) {
- ((SegmentReader) reader).addCoreClosedListener(purgeCore);
+ ((SegmentReader) reader).addCoreClosedListener(wrapper.purgeCore);
} else {
- reader.addReaderClosedListener(new IndexReader.ReaderClosedListener() {
- @Override
- public void onClose(IndexReader reader) {
- FieldCache.DEFAULT.purge(reader);
- }
- });
+ reader.addReaderClosedListener(wrapper.purgeReader);
}
}
if (innerCache.get(key) == null) {
@@ -221,14 +224,9 @@ class FieldCacheImpl implements FieldCac
innerCache = new HashMap<Entry,Object>();
readerCache.put(readerKey, innerCache);
if (reader instanceof SegmentReader) {
- ((SegmentReader) reader).addCoreClosedListener(purgeCore);
+ ((SegmentReader) reader).addCoreClosedListener(wrapper.purgeCore);
} else {
- reader.addReaderClosedListener(new IndexReader.ReaderClosedListener() {
- @Override
- public void onClose(IndexReader reader) {
- FieldCache.DEFAULT.purge(reader);
- }
- });
+ reader.addReaderClosedListener(wrapper.purgeReader);
}
value = null;
} else {