Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Sign in
issue
issue
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 23
    • Issues 23
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • chainmaker
  • issueissue
  • Issues
  • #140

Closed
Open
Opened May 12, 2022 by 厚发 周@arnordzhouDeveloper

【we open star】账本文件在服务器崩溃时偶发异常时的修复

【任务描述/建议思路】

任务描述:

  1. 在文件存储中,区块会写入到磁盘00000000000000004454.fdb.END文件中,(以.fdb.END结尾的文件)
  2. 00000000000000004454.fdb.END文件达到一定大小之后,会变成00000000000000004454.fdb,之后着会产生新的如00000000000000004554.fdb.END文件,如下图所示: image
  3. chainmaker-go节点在启动时会检索bfdb下的.fdb.END文件,作为文件存储最新的区块文件,将该文件中的区块加载到内存中,并与KVDB中的最新区块区块高度校验,校验通过节点才能正常启动。 (详情可阅读:https://docs.chainmaker.org.cn/tech/%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8.html 文件存储模块文档)
  4. 在第2步的.fdb.END文件变成.fdb然后产生新的.fdb.END的过程中如果出现服务器崩溃或者掉点的情况时,会导致.fdb.END文件丢失的现象,上述第3步校验会失败。节点将无法启动。如下图所示: image
  5. 修复后按照bfdb的规则在节点启动时添加一个.fdb.END,如下图的00000000000000004554.fdb.END image

建议思路:

思路一:

设计一种方式,避免步骤4的情况产生

思路二:

设计一种方式,在无法避免步骤4情况产生时让节点能继续产生正确的.fdb.END文件,让步骤3能正常校验通过

思路三:

欢迎提供新的思路

【贡献步骤】issue评论区留言方案认领一方案被采纳一代码提交到【weopenstar】项目组 Markdown and 快捷操作 are supported 添加附件

Edited Dec 16, 2022 by 厚发 周
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: chainmaker/issue#140

Copyright © 2021 ChainMaker Org. All Rights Reserved. 长安链 版权所有。