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

Marco Matessi updated OAK-11517:
--------------------------------
    Description: 
I'm implementing a backup procedure for an application that uses the 
fileBlobStore.

I have discovered different behaviors when using 
*Backup.builder().useFakeBlobStore*
 * As an *environment* variable (working)
 * As a *builder* variable (seems not working)

I have observed a strange implementation in the {{OAK-RUN}} command. In the 
[documentation|https://jackrabbit.apache.org/oak/docs/nodestore/segment/overview.html#backup],
 I see this example that uses the environment variable 
{{oak.backup.UseFakeBlobStore}} and not a simple argument variable like the 
other variables such as paths:
java -Doak.backup.UseFakeBlobStore=true -jar oak-run.jar backup
In my tests, I imagined that the two test implementations should have the same 
results. Can you confirm this?
{code:java}
public class BackupWithFakeBlobStore {

    public static void main(String[] args) throws IOException {
        Path source = Path.of("source");
        Path backupFolder = Path.of("backup");
        backupWithBuilderVar(source, 
backupFolder.resolve("backupWithBuilderVar"));
        backupWithEnvVariable(source, backupFolder.resolve("backupWithEnv"));
    }

    public static void backupWithBuilderVar(Path source, Path destination) {
        //System.setProperty("oak.backup.UseFakeBlobStore", "false"); //just to 
reset default value
        int returnValue = Backup.builder()
                .withSource(source.toFile())
                .withTarget(destination.toFile())
                .withFakeBlobStore(true)
                .build()
                .run();
        System.out.println("backupWithBuilderVar return value: " + returnValue);

    }

    public static void backupWithEnvVariable(Path source, Path destination) {
        System.setProperty("oak.backup.UseFakeBlobStore", "true");
        int returnValue = Backup.builder()
                .withSource(source.toFile())
                .withTarget(destination.toFile())
                .build()
                .run();
        System.out.println("backupWithEnvVariable return value: " + 
returnValue);
    }

} {code}
When I run the application the 
`backupWithEnvVariable` works, but `backupWithBuilderVar` thows an exception 
{code:java}
java.lang.IllegalStateException: Attempt to read external blob with blobId 
[761f56f6e2cecc5023601c64c613d23667ca94975289cd644b127cebf98c2cfc#158367297] 
without specifying BlobStore
    at 
org.apache.jackrabbit.oak.segment.SegmentBlob.getReference(SegmentBlob.java:134)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeBlob(DefaultSegmentWriter.java:584)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeProperty(DefaultSegmentWriter.java:720)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeProperty(DefaultSegmentWriter.java:706)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeNodeUncached(DefaultSegmentWriter.java:906)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeNode(DefaultSegmentWriter.java:832)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.writeNode(DefaultSegmentWriter.java:205)
    at 
org.apache.jackrabbit.oak.segment.file.CompactionWriter.writeFullyCompactedNode(CompactionWriter.java:77)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.writeNodeState(ClassicCompactor.java:123)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:173)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:638)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:100)
    at org.apache.jackrabbit.oak.segment.Compactor.compactUp(Compactor.java:72)
    at 
org.apache.jackrabbit.oak.backup.impl.FileStoreBackupImpl.backup(FileStoreBackupImpl.java:92)
    at org.apache.jackrabbit.oak.segment.tool.Backup.run(Backup.java:131)
    at 
org.apache.jackrabbit.oak.run.BackupWithFakeBlobStore.backupWithEnvVariable(BackupWithFakeBlobStore.java:39)
    at 
org.apache.jackrabbit.oak.run.BackupWithFakeBlobStore.main(BackupWithFakeBlobStore.java:18)
 {code}
Thanks

  was:
I'm implementing a backup procedure for an application that uses the 
fileBlobStore.

I have discovered different behaviors when using 
`Backup.builder().useFakeBlobStore`
 * As an *environment* variable (working)
 * As a *builder* variable (seems not working)

I have observed a strange implementation in the {{OAK-RUN}} command. In the 
[documentation|https://jackrabbit.apache.org/oak/docs/nodestore/segment/overview.html#backup],
 I see this example that uses the environment variable 
{{oak.backup.UseFakeBlobStore}} and not a simple argument variable like the 
other variables such as paths:
java -Doak.backup.UseFakeBlobStore=true -jar oak-run.jar backup
In my tests, I imagined that the two test implementations should have the same 
results. Can you confirm this?
{code:java}
public class BackupWithFakeBlobStore {

    public static void main(String[] args) throws IOException {
        Path source = Path.of("source");
        Path backupFolder = Path.of("backup");
        backupWithBuilderVar(source, 
backupFolder.resolve("backupWithBuilderVar"));
        backupWithEnvVariable(source, backupFolder.resolve("backupWithEnv"));
    }

    public static void backupWithBuilderVar(Path source, Path destination) {
        //System.setProperty("oak.backup.UseFakeBlobStore", "false"); //just to 
reset default value
        int returnValue = Backup.builder()
                .withSource(source.toFile())
                .withTarget(destination.toFile())
                .withFakeBlobStore(true)
                .build()
                .run();
        System.out.println("backupWithBuilderVar return value: " + returnValue);

    }

    public static void backupWithEnvVariable(Path source, Path destination) {
        System.setProperty("oak.backup.UseFakeBlobStore", "true");
        int returnValue = Backup.builder()
                .withSource(source.toFile())
                .withTarget(destination.toFile())
                .build()
                .run();
        System.out.println("backupWithEnvVariable return value: " + 
returnValue);
    }

} {code}
When I run the application the 
`backupWithEnvVariable` works, but `backupWithBuilderVar` thows an exception 
{code:java}
java.lang.IllegalStateException: Attempt to read external blob with blobId 
[761f56f6e2cecc5023601c64c613d23667ca94975289cd644b127cebf98c2cfc#158367297] 
without specifying BlobStore
    at 
org.apache.jackrabbit.oak.segment.SegmentBlob.getReference(SegmentBlob.java:134)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeBlob(DefaultSegmentWriter.java:584)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeProperty(DefaultSegmentWriter.java:720)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeProperty(DefaultSegmentWriter.java:706)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeNodeUncached(DefaultSegmentWriter.java:906)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeNode(DefaultSegmentWriter.java:832)
    at 
org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.writeNode(DefaultSegmentWriter.java:205)
    at 
org.apache.jackrabbit.oak.segment.file.CompactionWriter.writeFullyCompactedNode(CompactionWriter.java:77)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.writeNodeState(ClassicCompactor.java:123)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:173)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
    at 
org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
    at 
org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:638)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
    at 
org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:100)
    at org.apache.jackrabbit.oak.segment.Compactor.compactUp(Compactor.java:72)
    at 
org.apache.jackrabbit.oak.backup.impl.FileStoreBackupImpl.backup(FileStoreBackupImpl.java:92)
    at org.apache.jackrabbit.oak.segment.tool.Backup.run(Backup.java:131)
    at 
org.apache.jackrabbit.oak.run.BackupWithFakeBlobStore.backupWithEnvVariable(BackupWithFakeBlobStore.java:39)
    at 
org.apache.jackrabbit.oak.run.BackupWithFakeBlobStore.main(BackupWithFakeBlobStore.java:18)
 {code}
Thanks


> Backup Builder with Fake Blob Store Not Working
> -----------------------------------------------
>
>                 Key: OAK-11517
>                 URL: https://issues.apache.org/jira/browse/OAK-11517
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segment-tar
>    Affects Versions: 1.74.0
>            Reporter: Marco Matessi
>            Priority: Major
>
> I'm implementing a backup procedure for an application that uses the 
> fileBlobStore.
> I have discovered different behaviors when using 
> *Backup.builder().useFakeBlobStore*
>  * As an *environment* variable (working)
>  * As a *builder* variable (seems not working)
> I have observed a strange implementation in the {{OAK-RUN}} command. In the 
> [documentation|https://jackrabbit.apache.org/oak/docs/nodestore/segment/overview.html#backup],
>  I see this example that uses the environment variable 
> {{oak.backup.UseFakeBlobStore}} and not a simple argument variable like the 
> other variables such as paths:
> java -Doak.backup.UseFakeBlobStore=true -jar oak-run.jar backup
> In my tests, I imagined that the two test implementations should have the 
> same results. Can you confirm this?
> {code:java}
> public class BackupWithFakeBlobStore {
>     public static void main(String[] args) throws IOException {
>         Path source = Path.of("source");
>         Path backupFolder = Path.of("backup");
>         backupWithBuilderVar(source, 
> backupFolder.resolve("backupWithBuilderVar"));
>         backupWithEnvVariable(source, backupFolder.resolve("backupWithEnv"));
>     }
>     public static void backupWithBuilderVar(Path source, Path destination) {
>         //System.setProperty("oak.backup.UseFakeBlobStore", "false"); //just 
> to reset default value
>         int returnValue = Backup.builder()
>                 .withSource(source.toFile())
>                 .withTarget(destination.toFile())
>                 .withFakeBlobStore(true)
>                 .build()
>                 .run();
>         System.out.println("backupWithBuilderVar return value: " + 
> returnValue);
>     }
>     public static void backupWithEnvVariable(Path source, Path destination) {
>         System.setProperty("oak.backup.UseFakeBlobStore", "true");
>         int returnValue = Backup.builder()
>                 .withSource(source.toFile())
>                 .withTarget(destination.toFile())
>                 .build()
>                 .run();
>         System.out.println("backupWithEnvVariable return value: " + 
> returnValue);
>     }
> } {code}
> When I run the application the 
> `backupWithEnvVariable` works, but `backupWithBuilderVar` thows an exception 
> {code:java}
> java.lang.IllegalStateException: Attempt to read external blob with blobId 
> [761f56f6e2cecc5023601c64c613d23667ca94975289cd644b127cebf98c2cfc#158367297] 
> without specifying BlobStore
>     at 
> org.apache.jackrabbit.oak.segment.SegmentBlob.getReference(SegmentBlob.java:134)
>     at 
> org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeBlob(DefaultSegmentWriter.java:584)
>     at 
> org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeProperty(DefaultSegmentWriter.java:720)
>     at 
> org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeProperty(DefaultSegmentWriter.java:706)
>     at 
> org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeNodeUncached(DefaultSegmentWriter.java:906)
>     at 
> org.apache.jackrabbit.oak.segment.DefaultSegmentWriter$SegmentWriteOperation.writeNode(DefaultSegmentWriter.java:832)
>     at 
> org.apache.jackrabbit.oak.segment.DefaultSegmentWriter.writeNode(DefaultSegmentWriter.java:205)
>     at 
> org.apache.jackrabbit.oak.segment.file.CompactionWriter.writeFullyCompactedNode(CompactionWriter.java:77)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.writeNodeState(ClassicCompactor.java:123)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:173)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.compareAgainstEmptyState(EmptyNodeState.java:160)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:503)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeUpdated(ClassicCompactor.java:203)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.childNodeAdded(ClassicCompactor.java:218)
>     at 
> org.apache.jackrabbit.oak.segment.CancelableDiff.childNodeAdded(CancelableDiff.java:77)
>     at 
> org.apache.jackrabbit.oak.segment.SegmentNodeState.compareAgainstBaseState(SegmentNodeState.java:638)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor$CompactDiff.diff(ClassicCompactor.java:165)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:112)
>     at 
> org.apache.jackrabbit.oak.segment.ClassicCompactor.compact(ClassicCompactor.java:100)
>     at 
> org.apache.jackrabbit.oak.segment.Compactor.compactUp(Compactor.java:72)
>     at 
> org.apache.jackrabbit.oak.backup.impl.FileStoreBackupImpl.backup(FileStoreBackupImpl.java:92)
>     at org.apache.jackrabbit.oak.segment.tool.Backup.run(Backup.java:131)
>     at 
> org.apache.jackrabbit.oak.run.BackupWithFakeBlobStore.backupWithEnvVariable(BackupWithFakeBlobStore.java:39)
>     at 
> org.apache.jackrabbit.oak.run.BackupWithFakeBlobStore.main(BackupWithFakeBlobStore.java:18)
>  {code}
> Thanks



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to