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 "Stefan Egli (JIRA)" <ji...@apache.org> on 2015/02/05 12:41:35 UTC

[jira] [Updated] (OAK-2479) FileStoreBackup throws SegmentNotFoundException

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

Stefan Egli updated OAK-2479:
-----------------------------
    Attachment: BackupTest.java

Attached promised test case to reproduce the SegmentNotFoundException with a current oak-run trunk snapshot

> FileStoreBackup throws SegmentNotFoundException
> -----------------------------------------------
>
>                 Key: OAK-2479
>                 URL: https://issues.apache.org/jira/browse/OAK-2479
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: run
>    Affects Versions: 1.1.5, 1.0.11
>            Reporter: Stefan Egli
>         Attachments: BackupTest.java
>
>
> Running the FileStoreBackup (in oak-run) results in a SegmentNotFoundException to be thrown.
> Narrowed this down to a regression introduced with https://github.com/apache/jackrabbit-oak/commit/6129da4251d36e3f2e1ac4b72ebf3602d0073d47
> The issue seems to be related to the fact that it creates a Compactor with the parameter cloneBinaries set to false. This results in blobs not being copied by value but rather by reference. Which results in segments not being found in the backup (since they only exist in the origin-store).
> Creating the Compactor with cloneBinaries set to true fixes this (not saying that this is the correct fix - as I understood at least in online-compaction case you want to have cloneBinaries set to false for example).
> Attaching a test case later which reproduces the problem and currently results in the following exception (in trunk):
> {code}
> org.apache.jackrabbit.oak.plugins.segment.SegmentNotFoundException: Segment 7433ef00-fac5-48d5-b91d-923c517c4a5b not found
> 	at org.apache.jackrabbit.oak.plugins.segment.file.FileStore.readSegment(FileStore.java:711)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentTracker.getSegment(SegmentTracker.java:122)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentId.getSegment(SegmentId.java:108)
> 	at org.apache.jackrabbit.oak.plugins.segment.Record.getSegment(Record.java:82)
> 	at org.apache.jackrabbit.oak.plugins.segment.BlockRecord.read(BlockRecord.java:55)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentStream.read(SegmentStream.java:171)
> 	at com.google.common.io.ByteStreams.read(ByteStreams.java:828)
> 	at com.google.common.io.ByteSource.contentEquals(ByteSource.java:303)
> 	at com.google.common.io.ByteStreams.equal(ByteStreams.java:661)
> 	at org.apache.jackrabbit.oak.plugins.memory.AbstractBlob.equal(AbstractBlob.java:58)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentBlob.equals(SegmentBlob.java:211)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor.compact(Compactor.java:229)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor.compact(Compactor.java:185)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor.access$0(Compactor.java:181)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor$CompactDiff.propertyAdded(Compactor.java:115)
> 	at org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:155)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor$CompactDiff.childNodeAdded(Compactor.java:137)
> 	at org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:488)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor.process(Compactor.java:92)
> 	at org.apache.jackrabbit.oak.plugins.segment.Compactor.compact(Compactor.java:97)
> 	at org.apache.jackrabbit.oak.plugins.backup.FileStoreBackup.backup(FileStoreBackup.java:81)
> 	at org.apache.jackrabbit.oak.run.BackupTest.testInMemoryBackup(BackupTest.java:55)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 	at java.lang.reflect.Method.invoke(Method.java:597)
> 	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
> 	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> 	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
> 	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
> 	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
> 	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
> 	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
> 	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
> 	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
> 	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
> 	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
> 	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
> 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
> 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
> 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
> {code}



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