[ 
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)

Reply via email to