[
https://issues.apache.org/jira/browse/OAK-2388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14272657#comment-14272657
]
Chetan Mehrotra commented on OAK-2388:
--------------------------------------
Due to above bug following exception is seen in the logs
{noformat}
10.01.2015 09:04:00.960 *DEBUG* [pool-9-thread-3]
org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate The async index update
is still failing
org.apache.jackrabbit.oak.api.CommitFailedException: OakLucene0004: Failed to
close the Lucene index
at
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditor.leave(LuceneIndexEditor.java:168)
at
org.apache.jackrabbit.oak.plugins.index.IndexUpdate.leave(IndexUpdate.java:216)
at
org.apache.jackrabbit.oak.spi.commit.VisibleEditor.leave(VisibleEditor.java:63)
at
org.apache.jackrabbit.oak.spi.commit.EditorDiff.process(EditorDiff.java:56)
at
org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.updateIndex(AsyncIndexUpdate.java:349)
at
org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.run(AsyncIndexUpdate.java:296)
at
org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:105)
at org.quartz.core.JobRunShell.run(JobRunShell.java:207)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.io.IOException: Invalid byte range request
at
org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory$OakIndexFile.readBytes(OakDirectory.java:256)
at
org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory$OakIndexInput.readBytes(OakDirectory.java:348)
at
org.apache.jackrabbit.oak.plugins.index.lucene.OakDirectory$OakIndexInput.readByte(OakDirectory.java:354)
at org.apache.lucene.store.DataInput.readInt(DataInput.java:84)
at org.apache.lucene.codecs.CodecUtil.checkHeader(CodecUtil.java:126)
at
org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsReader.<init>(Lucene40StoredFieldsReader.java:87)
at
org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat.fieldsReader(Lucene40StoredFieldsFormat.java:91)
at
org.apache.lucene.index.SegmentCoreReaders.<init>(SegmentCoreReaders.java:129)
at org.apache.lucene.index.SegmentReader.<init>(SegmentReader.java:96)
at
org.apache.lucene.index.ReadersAndUpdates.getReader(ReadersAndUpdates.java:141)
at
org.apache.lucene.index.BufferedUpdatesStream.applyDeletesAndUpdates(BufferedUpdatesStream.java:279)
at
org.apache.lucene.index.IndexWriter.applyAllDeletesAndUpdates(IndexWriter.java:3191)
at
org.apache.lucene.index.IndexWriter.maybeApplyDeletes(IndexWriter.java:3182)
at org.apache.lucene.index.IndexWriter.doFlush(IndexWriter.java:3155)
at org.apache.lucene.index.IndexWriter.flush(IndexWriter.java:3123)
at
org.apache.lucene.index.IndexWriter.closeInternal(IndexWriter.java:988)
at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:932)
at org.apache.lucene.index.IndexWriter.close(IndexWriter.java:894)
at
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorContext.closeWriter(LuceneIndexEditorContext.java:146)
at
org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditor.leave(LuceneIndexEditor.java:166)
... 10 common frames omitted
{noformat}
> Possibility of overflow in file length calculation
> --------------------------------------------------
>
> Key: OAK-2388
> URL: https://issues.apache.org/jira/browse/OAK-2388
> Project: Jackrabbit Oak
> Issue Type: Bug
> Components: oak-lucene
> Reporter: Chetan Mehrotra
> Assignee: Chetan Mehrotra
> Fix For: 1.0.10, 1.1.5
>
>
> In OakDirectory the length of a file is calculated in following way
> {code:title=OakDirectory|linenumbers=true}
> public OakIndexFile(String name, NodeBuilder file) {
> ...
> this.blobSize = determineBlobSize(file);
> this.blob = new byte[blobSize];
> PropertyState property = file.getProperty(JCR_DATA);
> if (property != null && property.getType() == BINARIES) {
> this.data = newArrayList(property.getValue(BINARIES));
> } else {
> this.data = newArrayList();
> }
> this.length = data.size() * blobSize;
> if (!data.isEmpty()) {
> Blob last = data.get(data.size() - 1);
> this.length -= blobSize - last.length();
> }
> {code}
> In above calculation its possible to have an overflow in
> bq. this.length = data.size() * blobSize;
> As multiplication of two integers result in an integer [1]
> [1]
> http://stackoverflow.com/questions/12861893/casting-result-of-multiplication-two-positive-integers-to-long-is-negative-value
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)