[
https://issues.apache.org/jira/browse/LUCENE-4999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13656667#comment-13656667
]
Robert Muir commented on LUCENE-4999:
-------------------------------------
Yes, this at least was a bug in the highlighter. However its currently fixed in
SVN (will be in 4.3.1):
The datastructure expected parallel arrays and did not grow them consistently
as you noticed.
{noformat}
* LUCENE-4948: Fixed ArrayIndexOutOfBoundsException in PostingsHighlighter
if you had a 64-bit JVM without compressed OOPS: IBM J9, or Oracle with
large heap/explicitly disabled. (Mike McCandless, Uwe Schindler, Robert Muir)
{noformat}
{quote}
Similarly, you can reproduce the error if you pass the option
"-XX:-UseCompressedOops" when testing with Oracle Java.
{quote}
Uwe Schindler did exactly that to our jenkins instances: it randomizes this
variable so that this class of bugs will be found when using Oracle too, and
won't be brushed aside as a JVM issue in the future.
> Lucene test (testCambridgeMA) fails when JVM 64-bit does not use memory
> compression
> -----------------------------------------------------------------------------------
>
> Key: LUCENE-4999
> URL: https://issues.apache.org/jira/browse/LUCENE-4999
> Project: Lucene - Core
> Issue Type: Bug
> Affects Versions: 4.3, 4.2.1
> Environment: Red Hat 6.3
> IBM Java 6 - SR13
> Ant 1.9.0
> Reporter: Rodrigo Trujillo
> Priority: Critical
>
> When I ran the Lucene (4.2.1/4.3) test suite with IBM Java I get the
> following error:
> [junit4:junit4] Suite:
> org.apache.lucene.search.postingshighlight.TestPostingsHighlighter
> [junit4:junit4] 2> NOTE: reproduce with: ant test
> -Dtestcase=TestPostingsHighlighter -Dtests.method=testCambridgeMA
> -Dtests.seed=571E16AEAF72C9F9 -Dtests.s
> low=true -Dtests.locale=mt_MT -Dtests.timezone=Pacific/Kiritimati
> -Dtests.file.encoding=UTF-8
> [junit4:junit4] ERROR 0.71s J2 | TestPostingsHighlighter.testCambridgeMA <<<
> [junit4:junit4] > Throwable #1: java.lang.ArrayIndexOutOfBoundsException:
> Array index out of range: 37
> [junit4:junit4] > at
> __randomizedtesting.SeedInfo.seed([571E16AEAF72C9F9:D60B7505C1DC91F8]:0)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.Passage.addMatch(Passage.java:53)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.PostingsHighlighter.highlightDoc(PostingsHighlighter.java:547)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.PostingsHighlighter.highlightField(PostingsHighlighter.java:425)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.PostingsHighlighter.highlightFields(PostingsHighlighter.java:364)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.PostingsHighlighter.highlightFields(PostingsHighlighter.java:268)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.PostingsHighlighter.highlight(PostingsHighlighter.java:198)
> [junit4:junit4] > at
> org.apache.lucene.search.postingshighlight.TestPostingsHighlighter.testCambridgeMA(TestPostingsHighlighter.java:373)
> [junit4:junit4] > at java.lang.Thread.run(Thread.java:738)
> [junit4:junit4] 2> NOTE: test params are:
> codec=FastDecompressionCompressingStoredFields(storedFieldsFormat=CompressingStoredFieldsFormat(compressionMode=FA
> ST_DECOMPRESSION, chunkSize=386),
> termVectorsFormat=CompressingTermVectorsFormat(compressionMode=FAST_DECOMPRESSION,
> chunkSize=386)), sim=RandomSimilarityProv
> ider(queryNorm=false,coord=yes): {body=DFR I(n)Z(0.3), title=DFR I(F)Z(0.3),
> id=DFR I(n)2}, locale=mt_MT, timezone=Pacific/Kiritimati
> [junit4:junit4] 2> NOTE: Linux 2.6.32-279.el6.x86_64 amd64/IBM Corporation
> 1.6.0 (64-bit)/cpus=4,threads=1,free=10783032,total=24030208
> [junit4:junit4] 2> NOTE: All tests run in this JVM: [FieldQueryTest,
> FieldPhraseListTest, SimpleFragListBuilderTest, FieldTermStackTest,
> OffsetLimitTokenFil
> terTest, TokenSourcesTest, TestPostingsHighlighter]
> [junit4:junit4] Completed on J2 in 2.46s, 23 tests, 1 error <<< FAILURES!
> This error is not seen with Oracle Java.
> A Google search showed that this error has already occurred in community
> builds and the solution proposed was disable the IBM Java in the community
> tests.
> I took a look in the code and found that the root of the problem is due to
> the assignment of the variable "referenceSize" in RamUsageEstimator.java:
> // get object reference size by getting scale factor of Object[] arrays:
> try {
> final Method arrayIndexScaleM =
> unsafeClass.getMethod("arrayIndexScale", Class.class);
> referenceSize = ((Number) arrayIndexScaleM.invoke(theUnsafe,
> Object[].class)).intValue();
> supportedFeatures.add(JvmFeature.OBJECT_REFERENCE_SIZE);
> } catch (Exception e) {
> // ignore.
> }
> The Java Object reference size for arrays have 8 bytes in 64-bit machines
> (Oracle or IBM) and can be reduced to 4 bytes (like 32-bit JVMs) using
> Compressed References and Compressed Ordinary Object Pointers (OOPs).
> This options seems to be enabled by default in Oracle Java when the heap size
> is under 32GB, but is not in IBM Java.
> As workaround, when testing with IBM JVM I can pass the options
> "-Xcompressedrefs" or "-XX:+UseCompressedOops" to Junit.
> Similarly, you can reproduce the error if you pass the option
> "-XX:-UseCompressedOops" when testing with Oracle Java.
> The bug is in oversize method of ArrayUtil.java. It does nothing when the
> object reference size (bytesPerElement) is 8.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]