You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Jukka Zitting (JIRA)" <ji...@apache.org> on 2014/02/19 16:00:29 UTC

[jira] [Resolved] (OAK-1409) After crash, segment persistence is broken with failures in java.nio classes

     [ https://issues.apache.org/jira/browse/OAK-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jukka Zitting resolved OAK-1409.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 0.18

Fixed in revision 1569770.

The crash had stopped the TarMK at the middle of writing a new segment to disk, and after restart it would assume that the partially written segment already exists, which caused this problem.

The fix detects such partial writes, and truncates the tar file to that point. This should not be a problem, as the journal only gets updated once all pending segments have been flushed to disk and thus the journal should never point to such partially written segments.

> After crash, segment persistence is broken with failures in java.nio classes
> ----------------------------------------------------------------------------
>
>                 Key: OAK-1409
>                 URL: https://issues.apache.org/jira/browse/OAK-1409
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segmentmk
>    Affects Versions: 0.15
>            Reporter: Alexander Klimetschek
>            Assignee: Jukka Zitting
>             Fix For: 0.18
>
>
> For some unknown reasons my laptop crashed and with it our Oak-based application. After starting it again, the persistence is broken, and nothing works. My OS and file system looks fine (Operating system: OSX Mavericks, rebooted by itself while it was closed, only noticeable through a "your system was restarted" dialog).
> There are java.nio DirectByteBuffer, ByteBuffer and Buffer exceptions (null argument, index out of bounds, and bufferoverflow) see below.
> {code}
> 07.02.2014 07:04:43.843 *ERROR* [pool-7-thread-1] org.apache.sling.commons.scheduler.impl.QuartzScheduler Exception during job execution of org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate@691a70f1 : null
> java.lang.IllegalArgumentException: null
> 	at java.nio.Buffer.position(Buffer.java:216) ~[na:1.6.0_29]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.MappedAccess.write(MappedAccess.java:65) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.TarFile.writeEntry(TarFile.java:166) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.FileStore.writeSegment(FileStore.java:318) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.flush(SegmentWriter.java:201) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.prepare(SegmentWriter.java:238) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeMapLeaf(SegmentWriter.java:310) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeMapBucket(SegmentWriter.java:376) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeMapBucket(SegmentWriter.java:403) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeMapBucket(SegmentWriter.java:412) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeMapBucket(SegmentWriter.java:412) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeMap(SegmentWriter.java:590) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeNode(SegmentWriter.java:894) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeBuilder.getNodeState(SegmentNodeBuilder.java:62) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore.checkpoint(SegmentNodeStore.java:210) ~[na:na]
> 	at org.apache.jackrabbit.oak.spi.state.ProxyNodeStore.checkpoint(ProxyNodeStore.java:60) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.run(AsyncIndexUpdate.java:115) ~[na:na]
> 	at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:105) ~[org.apache.sling.commons.scheduler-2.4.2.jar:na]
> 	at org.quartz.core.JobRunShell.run(JobRunShell.java:207) [org.apache.sling.commons.scheduler-2.4.2.jar:na]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_29]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_29]
> 	at java.lang.Thread.run(Thread.java:680) [na:1.6.0_29]
> 07.02.2014 07:10:23.841 *ERROR* [pool-7-thread-1] org.apache.sling.commons.scheduler.impl.QuartzScheduler Exception during job execution of org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate@691a70f1 : null
> java.lang.IndexOutOfBoundsException: null
> 	at java.nio.ByteBuffer.wrap(ByteBuffer.java:352) ~[na:1.6.0_29]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.flush(SegmentWriter.java:197) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.prepare(SegmentWriter.java:238) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.prepare(SegmentWriter.java:214) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeValueRecord(SegmentWriter.java:476) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeString(SegmentWriter.java:614) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeProperty(SegmentWriter.java:726) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeNode(SegmentWriter.java:918) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter$2.childNodeAdded(SegmentWriter.java:871) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.compareAgainstBaseState(ModifiedNodeState.java:384) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeNode(SegmentWriter.java:868) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeBuilder.getNodeState(SegmentNodeBuilder.java:62) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore.checkpoint(SegmentNodeStore.java:210) ~[na:na]
> 	at org.apache.jackrabbit.oak.spi.state.ProxyNodeStore.checkpoint(ProxyNodeStore.java:60) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.run(AsyncIndexUpdate.java:115) ~[na:na]
> 	at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:105) ~[org.apache.sling.commons.scheduler-2.4.2.jar:na]
> 	at org.quartz.core.JobRunShell.run(JobRunShell.java:207) [org.apache.sling.commons.scheduler-2.4.2.jar:na]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_29]
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_29]
> 	at java.lang.Thread.run(Thread.java:680) [na:1.6.0_29]
> 07.02.2014 07:02:34.408 *ERROR* [TarMK flush thread: /Users/alex/Work/code/cq/master/quickstart/target/crx-quickstart/repository] org.apache.sling.extensions.threaddump.internal.Activator Uncaught exception in Thread Thread[TarMK flush thread: /Users/alex/Work/code/cq/master/quickstart/target/crx-quickstart/repository,1,main]
> java.nio.BufferOverflowException: null
> 	at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:352) ~[na:1.6.0_29]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.MappedAccess.write(MappedAccess.java:66) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.TarFile.writeEntry(TarFile.java:169) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.FileStore.writeSegment(FileStore.java:318) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.flush(SegmentWriter.java:201) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.FileStore.flush(FileStore.java:189) ~[na:na]
> 	at org.apache.jackrabbit.oak.plugins.segment.file.FileStore$1.run(FileStore.java:164) ~[na:na]
> 	at java.lang.Thread.run(Thread.java:680) ~[na:1.6.0_29]
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)