我使用来自Jetbrains的Exodus作为应用程序中的嵌入式数据库。最近我遇到了一些奇怪的行为,我担心其中一家商店坏了。至少我不能再访问它了。
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)更重要的是,我担心其他商店也会以同样的方式中断,无法访问。我使用的是single Environment和大约10个不同的商店。整个数据库的gzipped备份大约为2 gb。您知道问题的根本原因是什么以及如何恢复存储吗?
在环境启动时还有另一个例外:
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)发布于 2019-11-21 19:27:25
看起来有一个环境因为某种原因被破坏了。
在大多数情况下,可以使用反射工具修复损坏的环境。请从https://mvnrepository.com/artifact/org.jetbrains.xodus/xodus-tools下载最新发布的xodus-tools.jar版本。假设sourceDir是一条路径,其中有损坏的环境。准备空targetDir,即工具将在其中创建环境副本的路径。运行:
java -jar <path to jar>/xodus-tools.jar reflect -c sourceDir targetDir这个工具是做什么的?它在targetDir中创建来自sourceDir的环境的固定和压缩拷贝。它尝试复制尽可能多的键/值对。
尝试在固定环境下运行您的应用程序。如果可以,请将Xodus版本更新为最新版本。
https://stackoverflow.com/questions/58934210
复制相似问题