You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/11/10 17:43:33 UTC
svn commit: r1200418 - in
/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index:
SegmentMerger.java codecs/DefaultTermVectorsWriter.java
codecs/TermVectorsWriter.java
Author: rmuir
Date: Thu Nov 10 16:43:32 2011
New Revision: 1200418
URL: http://svn.apache.org/viewvc?rev=1200418&view=rev
Log:
LUCENE-2621: add TermVectorsWriter.finish() and move SegmentMerger's corruption check to it
Modified:
lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/SegmentMerger.java
lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java
lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java
Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/SegmentMerger.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/SegmentMerger.java?rev=1200418&r1=1200417&r2=1200418&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/SegmentMerger.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/SegmentMerger.java Thu Nov 10 16:43:32 2011
@@ -255,21 +255,10 @@ final class SegmentMerger {
copyVectorsNoDeletions(termVectorsWriter, matchingVectorsReader, reader, rawDocLengths, rawDocLengths2);
}
}
+ termVectorsWriter.finish(segmentWriteState.numDocs);
} finally {
termVectorsWriter.close();
}
-
- final String fileName = IndexFileNames.segmentFileName(segment, "", IndexFileNames.VECTORS_INDEX_EXTENSION);
- final long tvxSize = directory.fileLength(fileName);
- final int mergedDocs = segmentWriteState.numDocs;
-
- if (4+((long) mergedDocs)*16 != tvxSize)
- // This is most likely a bug in Sun JRE 1.6.0_04/_05;
- // we detect that the bug has struck, here, and
- // throw an exception to prevent the corruption from
- // entering the index. See LUCENE-1282 for
- // details.
- throw new RuntimeException("mergeVectors produced an invalid result: mergedDocs is " + mergedDocs + " but tvx size is " + tvxSize + " file=" + fileName + " file exists?=" + directory.fileExists(fileName) + "; now aborting this merge to prevent index corruption");
}
private void copyVectorsWithDeletions(final TermVectorsWriter termVectorsWriter,
Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java?rev=1200418&r1=1200417&r2=1200418&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/DefaultTermVectorsWriter.java Thu Nov 10 16:43:32 2011
@@ -197,6 +197,17 @@ public final class DefaultTermVectorsWri
assert tvf.getFilePointer() == tvfPosition;
}
+ @Override
+ public void finish(int numDocs) throws IOException {
+ if (4+((long) numDocs)*16 != tvx.getFilePointer())
+ // This is most likely a bug in Sun JRE 1.6.0_04/_05;
+ // we detect that the bug has struck, here, and
+ // throw an exception to prevent the corruption from
+ // entering the index. See LUCENE-1282 for
+ // details.
+ throw new RuntimeException("mergeVectors produced an invalid result: mergedDocs is " + numDocs + " but tvx size is " + tvx.getFilePointer() + " file=" + tvx.toString() + "; now aborting this merge to prevent index corruption");
+ }
+
/** Close all streams. */
@Override
public void close() throws IOException {
Modified: lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java?rev=1200418&r1=1200417&r2=1200418&view=diff
==============================================================================
--- lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java (original)
+++ lucene/dev/branches/lucene2621/lucene/src/java/org/apache/lucene/index/codecs/TermVectorsWriter.java Thu Nov 10 16:43:32 2011
@@ -24,6 +24,15 @@ import org.apache.lucene.index.TermFreqV
public abstract class TermVectorsWriter implements Closeable {
+ /** Called before {@link #close()}, passing in the number
+ * of documents that were written. Note that this is
+ * intentionally redundant (equivalent to the number of
+ * calls to XXX, but a Codec should
+ * check that this is the case to detect the JRE bug described
+ * in LUCENE-1282. */
+ public abstract void finish(int numDocs) throws IOException;
+
+ // nocommit: this should be a sugar method only that consumes the normal api (once we have one)
public abstract void addAllDocVectors(TermFreqVector[] vectors) throws IOException;
// nocommit: nuke this