[ 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)