I'm using Exodus from Jetbrains as an embedded database in my application. Recently I've faced with some weird behavior, I'm afraid that the one of the stores is broken. At least I can't access it anymore.
jetbrains.exodus.ExodusException: DataIterator: no more bytes available, address = 19359, file = 00000000000.xd
at jetbrains.exodus.log.DataIterator.next(DataIterator.java:60)
at jetbrains.exodus.log.Log.readNotNull(Log.java:440)
at jetbrains.exodus.tree.btree.BTreeBase.getLoggable(BTreeBase.java:119)
at jetbrains.exodus.tree.btree.BTreeBase.compareLeafToKey(BTreeBase.java:170)
at jetbrains.exodus.tree.btree.BasePageImmutable.binarySearch(BasePageImmutable.java:169)
at jetbrains.exodus.tree.btree.BasePageImmutable.binarySearch(BasePageImmutable.java:121)
at jetbrains.exodus.tree.btree.BottomPage.get(BottomPage.java:139)
at jetbrains.exodus.tree.btree.BottomPage.get(BottomPage.java:57)
at jetbrains.exodus.tree.btree.InternalPage.get(InternalPage.java:98)
at jetbrains.exodus.tree.btree.InternalPage.get(InternalPage.java:72)
at jetbrains.exodus.tree.btree.InternalPage.get(InternalPage.java:98)
at jetbrains.exodus.tree.btree.InternalPage.get(InternalPage.java:72)
at jetbrains.exodus.tree.btree.BTreeBase.get(BTreeBase.java:181)
at jetbrains.exodus.env.StoreImpl.get(StoreImpl.java:79)
And what is more important, I'm afraid the other stores will also break in same way and won't be accessible. I'm using single Environment and about 10 different stores. The gzipped backup of whole database is around 2 gb. Do you know what is the root cause of the issue and how to recove store?
There is another exception on environment startup:
2019-11-19 19:15:49,897 13408 [Exodus shared background cleaner] ERROR j.exodus.gc.GarbageCollector - cleanFile(000000r1g00.xd)
jetbrains.exodus.ExodusException: DataIterator: no more bytes available, address = 6019, file = 00000000000.xd
at jetbrains.exodus.log.DataIterator.next(DataIterator.java:60)
at jetbrains.exodus.log.Log.readNotNull(Log.java:440)
at jetbrains.exodus.tree.btree.BTreeBase.getLoggable(BTreeBase.java:119)
at jetbrains.exodus.tree.btree.BTreeBase.compareLeafToKey(BTreeBase.java:170)
at jetbrains.exodus.tree.btree.BasePageImmutable.binarySearch(BasePageImmutable.java:169)
at jetbrains.exodus.tree.btree.BTreeTraverser.getNextSibling(BTreeTraverser.java:141)
at jetbrains.exodus.tree.btree.LeafNode.reclaim(LeafNode.java:154)
at jetbrains.exodus.tree.btree.BTreeMutable.reclaim(BTreeMutable.java:295)
at jetbrains.exodus.env.StoreImpl.reclaim(StoreImpl.java:160)
at jetbrains.exodus.gc.GarbageCollector.cleanSingleFile(GarbageCollector.java:377)
at jetbrains.exodus.gc.GarbageCollector.doCleanFiles(GarbageCollector.java:288)
at jetbrains.exodus.gc.GarbageCollector.cleanFiles(GarbageCollector.java:215)
at jetbrains.exodus.gc.BackgroundCleaningJob.cleanFiles(BackgroundCleaningJob.java:139)
at jetbrains.exodus.gc.BackgroundCleaningJob.doCleanLog(BackgroundCleaningJob.java:110)
at jetbrains.exodus.gc.BackgroundCleaningJob.execute(BackgroundCleaningJob.java:78)
at jetbrains.exodus.core.execution.Job.run(Job.java:99)
at jetbrains.exodus.core.execution.ThreadJobProcessor.executeJob(ThreadJobProcessor.java:132)
at jetbrains.exodus.core.execution.JobProcessorQueueAdapter.doExecuteJob(JobProcessorQueueAdapter.java:238)
at jetbrains.exodus.core.execution.JobProcessorQueueAdapter.doTimedJobs(JobProcessorQueueAdapter.java:190)
at jetbrains.exodus.core.execution.JobProcessorQueueAdapter.doJobs(JobProcessorQueueAdapter.java:161)
at jetbrains.exodus.core.execution.ThreadJobProcessor.run(ThreadJobProcessor.java:110)
at jetbrains.exodus.core.execution.ThreadJobProcessor$1.run(ThreadJobProcessor.java:43)
at java.lang.Thread.run(Thread.java:745)
2019-11-19 19:15:49,898 13409 [Exodus shared background cleaner] ERROR j.exodus.gc.BackgroundCleaner - DataIterator: no more bytes available, address = 6019, file = 00000000000.xd
jetbrains.exodus.ExodusException: DataIterator: no more bytes available, address = 6019, file = 00000000000.xd
at jetbrains.exodus.log.DataIterator.next(DataIterator.java:60)
at jetbrains.exodus.log.Log.readNotNull(Log.java:440)
at jetbrains.exodus.tree.btree.BTreeBase.getLoggable(BTreeBase.java:119)
at jetbrains.exodus.tree.btree.BTreeBase.compareLeafToKey(BTreeBase.java:170)
at jetbrains.exodus.tree.btree.BasePageImmutable.binarySearch(BasePageImmutable.java:169)
at jetbrains.exodus.tree.btree.BTreeTraverser.getNextSibling(BTreeTraverser.java:141)
at jetbrains.exodus.tree.btree.LeafNode.reclaim(LeafNode.java:154)
at jetbrains.exodus.tree.btree.BTreeMutable.reclaim(BTreeMutable.java:295)
at jetbrains.exodus.env.StoreImpl.reclaim(StoreImpl.java:160)
at jetbrains.exodus.gc.GarbageCollector.cleanSingleFile(GarbageCollector.java:377)
at jetbrains.exodus.gc.GarbageCollector.doCleanFiles(GarbageCollector.java:288)
at jetbrains.exodus.gc.GarbageCollector.cleanFiles(GarbageCollector.java:215)
at jetbrains.exodus.gc.BackgroundCleaningJob.cleanFiles(BackgroundCleaningJob.java:139)
at jetbrains.exodus.gc.BackgroundCleaningJob.doCleanLog(BackgroundCleaningJob.java:110)
at jetbrains.exodus.gc.BackgroundCleaningJob.execute(BackgroundCleaningJob.java:78)
at jetbrains.exodus.core.execution.Job.run(Job.java:99)
at jetbrains.exodus.core.execution.ThreadJobProcessor.executeJob(ThreadJobProcessor.java:132)
at jetbrains.exodus.core.execution.JobProcessorQueueAdapter.doExecuteJob(JobProcessorQueueAdapter.java:238)
at jetbrains.exodus.core.execution.JobProcessorQueueAdapter.doTimedJobs(JobProcessorQueueAdapter.java:190)
at jetbrains.exodus.core.execution.JobProcessorQueueAdapter.doJobs(JobProcessorQueueAdapter.java:161)
at jetbrains.exodus.core.execution.ThreadJobProcessor.run(ThreadJobProcessor.java:110)
at jetbrains.exodus.core.execution.ThreadJobProcessor$1.run(ThreadJobProcessor.java:43)
at java.lang.Thread.run(Thread.java:745)