jackrabbit-oak-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alex Parvulescu (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (OAK-2294) Corrupt repository after concurrent version operations
Date Tue, 02 Dec 2014 08:24:13 GMT

    [ https://issues.apache.org/jira/browse/OAK-2294?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14231157#comment-14231157
] 

Alex Parvulescu commented on OAK-2294:
--------------------------------------

fyi I'm seeing the SegmentOverflowException error now during compaction (usually the 2nd consecutive
run, clone binaries false):
{code}
org.apache.jackrabbit.oak.plugins.segment.SegmentOverflowException: Segment cannot have more
than 255 references e9193f84-45ff-4844-a422-22524d8b5bcb
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.getSegmentRef(SegmentWriter.java:345)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeRecordId(SegmentWriter.java:375)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeListBucket(SegmentWriter.java:451)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeList(SegmentWriter.java:650)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeLargeBlob(SegmentWriter.java:795)
at org.apache.jackrabbit.oak.plugins.segment.SegmentBlob.clone(SegmentBlob.java:187)
at org.apache.jackrabbit.oak.plugins.segment.Compactor.compact(Compactor.java:234)
at org.apache.jackrabbit.oak.plugins.segment.Compactor.compact(Compactor.java:182)
at org.apache.jackrabbit.oak.plugins.segment.Compactor.access$000(Compactor.java:49)
at org.apache.jackrabbit.oak.plugins.segment.Compactor$CompactDiff.propertyAdded(Compactor.java:112)
at org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:155)
{code}


> Corrupt repository after concurrent version operations
> ------------------------------------------------------
>
>                 Key: OAK-2294
>                 URL: https://issues.apache.org/jira/browse/OAK-2294
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segmentmk
>            Reporter: Michael Dürig
>            Assignee: Michael Dürig
>            Priority: Critical
>         Attachments: OAK-2294-2.patch, OAK-2294.patch
>
>
> Performing version operations (checkin / checkout / addVersionLabel) concurrently can
corrupt the repository. 
> Executing the following code in parallel from multiple threads demonstrates this:
> {code}
> Version version = versionManager.checkin(vPath);
> versionManager.checkout(vPath);
> String label = version.getName() + " " + Thread.currentThread().getName();
> version.getContainingHistory()
>     .addVersionLabel(version.getName(), label, true);
> {code}
> In my tests this eventually lead to all sorts of exceptions:
> {noformat}
> java.lang.IllegalStateException: RefId '85' doesn't exist in data segment 0c5c0814-902c-429c-ad41-cd82aea276a2
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.getRefId(Segment.java:196)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.internalReadRecordId(Segment.java:307)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readRecordId(Segment.java:303)
> 	at org.apache.jackrabbit.oak.plugins.segment.MapRecord.getBucketList(MapRecord.java:134)
> 	at org.apache.jackrabbit.oak.plugins.segment.MapRecord.getEntries(MapRecord.java:347)
> 	at org.apache.jackrabbit.oak.plugins.segment.MapRecord.getEntries(MapRecord.java:325)
> 	at org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:474)
> 	at org.apache.jackrabbit.oak.plugins.segment.MapRecord.compare(MapRecord.java:394)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:544)
> ...
> {noformat}
> {noformat}
> java.lang.IllegalStateException: String is too long: 2159501163930351661
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.loadString(Segment.java:352)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readString(Segment.java:319)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readString(Segment.java:313)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.loadTemplate(Segment.java:418)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readTemplate(Segment.java:367)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readTemplate(Segment.java:361)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.getTemplate(SegmentNodeState.java:78)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:408)
> ...
> {noformat}
> {noformat}
> java.lang.IllegalStateException
> 	at com.google.common.base.Preconditions.checkState(Preconditions.java:134)
> 	at org.apache.jackrabbit.oak.plugins.segment.file.TarWriter.writeEntry(TarWriter.java:206)
> 	at org.apache.jackrabbit.oak.plugins.segment.file.TarWriter.writeEntry(TarWriter.java:200)
> 	at org.apache.jackrabbit.oak.plugins.segment.file.FileStore.writeSegment(FileStore.java:682)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.flush(SegmentWriter.java:228)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.prepare(SegmentWriter.java:329)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeTemplate(SegmentWriter.java:969)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeNode(SegmentWriter.java:1039)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter$2.childNodeChanged(SegmentWriter.java:1062)
> 	at org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState.compareAgainstBaseState(ModifiedNodeState.java:395)
> ...
> {noformat}
> {noformat}
> Caused by: java.lang.IllegalArgumentException: Invalid type tag: 81
> 	at org.apache.jackrabbit.oak.api.Type.fromTag(Type.java:202)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.loadTemplate(Segment.java:418)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readTemplate(Segment.java:367)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readTemplate(Segment.java:361)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.getTemplate(SegmentNodeState.java:78)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.getProperty(SegmentNodeState.java:122)
> ...
> {noformat}
> {noformat}
> Caused by: java.lang.IllegalStateException
> 	at com.google.common.base.Preconditions.checkState(Preconditions.java:134)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.pos(Segment.java:178)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.loadString(Segment.java:326)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readString(Segment.java:319)
> 	at org.apache.jackrabbit.oak.plugins.segment.Segment.readString(Segment.java:313)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentPropertyState.getValue(SegmentPropertyState.java:174)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentPropertyState.getValue(SegmentPropertyState.java:147)
> 	at org.apache.jackrabbit.oak.plugins.memory.AbstractPropertyState.equal(AbstractPropertyState.java:53)
> ...
> {noformat}
> Will attach a patch with a test case shortly.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message