首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jetbrains xodus没有更多可用字节错误

Jetbrains xodus没有更多可用字节错误
EN

Stack Overflow用户
提问于 2019-11-19 20:31:53
回答 1查看 114关注 0票数 0

我使用来自Jetbrains的Exodus作为应用程序中的嵌入式数据库。最近我遇到了一些奇怪的行为,我担心其中一家商店坏了。至少我不能再访问它了。

代码语言:javascript
复制
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。您知道问题的根本原因是什么以及如何恢复存储吗?

在环境启动时还有另一个例外:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2019-11-21 19:27:25

看起来有一个环境因为某种原因被破坏了。

在大多数情况下,可以使用反射工具修复损坏的环境。请从https://mvnrepository.com/artifact/org.jetbrains.xodus/xodus-tools下载最新发布的xodus-tools.jar版本。假设sourceDir是一条路径,其中有损坏的环境。准备空targetDir,即工具将在其中创建环境副本的路径。运行:

代码语言:javascript
复制
java -jar <path to jar>/xodus-tools.jar reflect -c sourceDir targetDir

这个工具是做什么的?它在targetDir中创建来自sourceDir的环境的固定和压缩拷贝。它尝试复制尽可能多的键/值对。

尝试在固定环境下运行您的应用程序。如果可以,请将Xodus版本更新为最新版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58934210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档