You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/05/10 10:48:50 UTC

svn commit: r655030 - /lucene/java/trunk/src/java/org/apache/lucene/index/SegmentMerger.java

Author: mikemccand
Date: Sat May 10 01:48:50 2008
New Revision: 655030

URL: http://svn.apache.org/viewvc?rev=655030&view=rev
Log:
LUCENE-1282: upgrade an assert to a real check, to work around Sun JRE hotspot bug to prevent index corruption

Modified:
    lucene/java/trunk/src/java/org/apache/lucene/index/SegmentMerger.java

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/SegmentMerger.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/SegmentMerger.java?rev=655030&r1=655029&r2=655030&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/SegmentMerger.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/SegmentMerger.java Sat May 10 01:48:50 2008
@@ -355,8 +355,15 @@
         fieldsWriter.close();
       }
 
-      assert 4+docCount*8 == directory.fileLength(segment + "." + IndexFileNames.FIELDS_INDEX_EXTENSION) :
-        "after mergeFields: fdx size mismatch: " + docCount + " docs vs " + directory.fileLength(segment + "." + IndexFileNames.FIELDS_INDEX_EXTENSION) + " length in bytes of " + segment + "." + IndexFileNames.FIELDS_INDEX_EXTENSION;
+      final long fdxFileLength = directory.fileLength(segment + "." + IndexFileNames.FIELDS_INDEX_EXTENSION);
+
+      if (4+docCount*8 != fdxFileLength)
+        // This is most like 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("mergeFields produced an invalid result: docCount is " + docCount + " but fdx file size is " + fdxFileLength + "; now aborting this merge to prevent index corruption");
 
     } else
       // If we are skipping the doc stores, that means there