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 "Marco Matessi (Jira)" <ji...@apache.org> on 2025/02/21 13:43:00 UTC
[jira] [Updated] (OAK-11517) Backup Builder with Fake Blob Store Not Working
[ 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 {{}}
{code:java}
Backup.builder().useFakeBlobStore{code}
{{}}
* 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)