blob: 7727f996bd7a59c1f59be01366177461c4dd9604 [file] [log] [blame]
Index: lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java (revision 1221654)
+++ lucene/src/java/org/apache/lucene/index/SegmentCoreReaders.java (working copy)
@@ -34,6 +34,7 @@
import org.apache.lucene.store.CompoundFileDirectory;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
+import org.apache.lucene.util.CloseableThreadLocal;
import org.apache.lucene.util.IOUtils;
/** Holds core readers that are shared (unchanged) when
@@ -67,6 +68,21 @@
final CompoundFileDirectory cfsReader;
final CompoundFileDirectory storeCFSReader;
+ final CloseableThreadLocal<StoredFieldsReader> fieldsReaderLocal = new CloseableThreadLocal<StoredFieldsReader>() {
+ @Override
+ protected StoredFieldsReader initialValue() {
+ return fieldsReaderOrig.clone();
+ }
+ };
+
+ final CloseableThreadLocal<TermVectorsReader> termVectorsLocal = new CloseableThreadLocal<TermVectorsReader>() {
+ @Override
+ protected TermVectorsReader initialValue() {
+ return (termVectorsReaderOrig == null) ?
+ null : termVectorsReaderOrig.clone();
+ }
+ };
+
private final Set<CoreClosedListener> coreClosedListeners =
Collections.synchronizedSet(new LinkedHashSet<CoreClosedListener>());
@@ -152,14 +168,6 @@
this.owner = owner;
}
- TermVectorsReader getTermVectorsReaderOrig() {
- return termVectorsReaderOrig;
- }
-
- StoredFieldsReader getFieldsReaderOrig() {
- return fieldsReaderOrig;
- }
-
void incRef() {
ref.incrementAndGet();
}
@@ -167,8 +175,8 @@
void decRef() throws IOException {
//System.out.println("core.decRef seg=" + owner.getSegmentInfo() + " rc=" + ref);
if (ref.decrementAndGet() == 0) {
- IOUtils.close(fields, perDocProducer, termVectorsReaderOrig,
- fieldsReaderOrig, cfsReader, storeCFSReader, norms);
+ IOUtils.close(termVectorsLocal, fieldsReaderLocal, fields, perDocProducer,
+ termVectorsReaderOrig, fieldsReaderOrig, cfsReader, storeCFSReader, norms);
notifyCoreClosedListeners();
}
}
Index: lucene/src/java/org/apache/lucene/index/SegmentReader.java
===================================================================
--- lucene/src/java/org/apache/lucene/index/SegmentReader.java (revision 1221654)
+++ lucene/src/java/org/apache/lucene/index/SegmentReader.java (working copy)
@@ -33,7 +33,6 @@
import org.apache.lucene.store.IOContext;
import org.apache.lucene.util.BitVector;
import org.apache.lucene.util.Bits;
-import org.apache.lucene.util.CloseableThreadLocal;
/**
* @lucene.experimental
@@ -43,21 +42,6 @@
private final SegmentInfo si;
private final ReaderContext readerContext = new AtomicReaderContext(this);
- private final CloseableThreadLocal<StoredFieldsReader> fieldsReaderLocal = new CloseableThreadLocal<StoredFieldsReader>() {
- @Override
- protected StoredFieldsReader initialValue() {
- return core.getFieldsReaderOrig().clone();
- }
- };
-
- private final CloseableThreadLocal<TermVectorsReader> termVectorsLocal = new CloseableThreadLocal<TermVectorsReader>() {
- @Override
- protected TermVectorsReader initialValue() {
- final TermVectorsReader tvr = core.getTermVectorsReaderOrig();
- return (tvr == null) ? null : tvr.clone();
- }
- };
-
private final BitVector liveDocs;
// Normally set to si.docCount - si.delDocCount, unless we
@@ -167,16 +151,9 @@
return true;
}
- /** @lucene.internal */
- public StoredFieldsReader getFieldsReader() {
- return fieldsReaderLocal.get();
- }
-
@Override
protected void doClose() throws IOException {
//System.out.println("SR.close seg=" + si);
- termVectorsLocal.close();
- fieldsReaderLocal.close();
if (core != null) {
core.decRef();
}
@@ -192,8 +169,14 @@
return core.fieldInfos;
}
+ /** @lucene.internal */
+ public StoredFieldsReader getFieldsReader() {
+ ensureOpen();
+ return core.fieldsReaderLocal.get();
+ }
+
+ @Override
public void document(int docID, StoredFieldVisitor visitor) throws CorruptIndexException, IOException {
- ensureOpen();
if (docID < 0 || docID >= maxDoc()) {
throw new IllegalArgumentException("docID must be >= 0 and < maxDoc=" + maxDoc() + " (got docID=" + docID + ")");
}
@@ -287,13 +270,10 @@
return core.norms.norms(field);
}
- /**
- * Create a clone from the initial TermVectorsReader and store it in the ThreadLocal.
- * @return TermVectorsReader
- * @lucene.internal
- */
+ /** @lucene.internal */
public TermVectorsReader getTermVectorsReader() {
- return termVectorsLocal.get();
+ ensureOpen();
+ return core.termVectorsLocal.get();
}
/** Return a term frequency vector for the specified document and field. The
@@ -304,7 +284,6 @@
*/
@Override
public Fields getTermVectors(int docID) throws IOException {
- ensureOpen();
TermVectorsReader termVectorsReader = getTermVectorsReader();
if (termVectorsReader == null) {
return null;