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:40:34 UTC

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

Stefan Egli created OAK-2479:
--------------------------------

             Summary: 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


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)