以太坊MPT树的持久化层是采用了leveldb数据库,然而在抽取MPT树代码运行过程中,进行get和write操作时却发生了错误:

Caused by: org.fusesource.leveldbjni.internal.NativeDB$DBException: IO error: C:\data\trie\.sst: Could not create random access file.
at org.fusesource.leveldbjni.internal.NativeDB.checkStatus(NativeDB.java:)
at org.fusesource.leveldbjni.internal.NativeDB.get(NativeDB.java:)
at org.fusesource.leveldbjni.internal.NativeDB.get(NativeDB.java:)
at org.fusesource.leveldbjni.internal.NativeDB.get(NativeDB.java:)
at org.fusesource.leveldbjni.internal.JniDB.get(JniDB.java:)

查了一些资料才把这个问题解决,参考:https://github.com/fusesource/leveldbjni/issues/28

  1. 首先增加maxOpenFiles的数量,通过观察数据库sst文件数量的变化发现,文件在50个左右,而原来maxOpenFiles=32,因此改为(datasource/LevelDbDataSource.java line75)

//options.maxOpenFiles(32);
options.maxOpenFiles(100);

  2. 对get和write方法进行异常处理

异常造成的原因是:由于leveldb内部的compaction algorithm将一个level的sst文件合并到下一个level的sst文件中,因此在get或write方法就会出现找不到当前sst文件的情况,解决方法是重新get或write一次(虽然这种处理方法不太优雅,但是确实有用)。修改代码(datasource/LevelDbDataSource.java line139)

try {
  byte[] ret = db.get(key);
if (logger.isTraceEnabled()) logger.trace("<~ LevelDbDataSource.get(): " + name + ", key: " + Hex.toHexString(key) + ", " + (ret == null ? "null" : ret.length));
  return ret;
} catch (DBException e) {
  logger.error("Exception. Retrying again...", e);
byte[] ret = db.get(key);
if (logger.isTraceEnabled()) logger.trace("<~ LevelDbDataSource.get(): " + name + ", key: " + Hex.toHexString(key) + ", " + (ret == null ? "null" : ret.length));
  return ret;
}

以及(datasource/LevelDbDataSource.java line209)

try{//add 08-23 18:32
db.write(batch);
} catch (DBException e) {
logger.error("Exception. Retrying again...", e);
db.write(batch);
}//end add 08-23 18:32

这要就修复了这个bug!!

解决: org.iq80.leveldb.DBException: IO error: C:\data\trie\000945.sst: Could not create random access file.的更多相关文章

  1. 报错:HDFS IO error org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=WRITE, inode="/yk/dl/alarm_his":hdfs:supergroup:drwxr-xr-x

    报错背景: CDH集成了Flume服务,准备通过Flume将kafka中的数据放到HDFS中, 启动Flume的时候报错. 报错现象: // :: INFO hdfs.HDFSDataStream: ...

  2. Mysql 错误 ERROR 1 (HY000) at line 1: Can't create/write to file '/home/kaizenly/cfg_dict.csv' (Errcode: 13 - Permission denied)

    [1]问题描述 (1)执行SQL语句: use billing; select * from cfg_dict into outfile '/home/kaizenly/cfg_dict.csv' f ...

  3. 解决weblogic错误:java.sql.SQLRecoverableException: IO Error: Broken pipe

    首先说一下系统基础架构: 服务器:weblogic11g集群 数据库:oracle数据库Rac 出错信息: 1.java.sql.SQLRecoverableException: Closed Con ...

  4. 解决sqoop抽数报错:IO Error: Connection reset

    遇到的问题:进行sqoop抽数时,虽然能成功执行,但是过程中有很多这样的信息 19/11/20 15:17:11 INFO mapreduce.Job: Task Id : attempt_15737 ...

  5. FW docker使用问题总结,解决国内不能访问gcr.io的问题

    docker使用问题总结 解决国内不能访问gcr.io的问题 国内可以通过https://dashboard.daocloud.io来下载. 比如?gcr.io/google_containers/p ...

  6. AIX盘rw_timeout值过小导致IO ERROR

    刚下班没多久,接收到告警提示数据库的数据文件异常,且同时收到主机硬盘的IO ERROR告警 该数据库服务器为AIX+oracle 9i环境,登录主机验证关键日志告警 发现确实在18点48分有磁盘IO的 ...

  7. sqldeveloper建立新的连接是出现Status : Failure -Test failed: IO Error: The Network Adapter could not establish the connection

    Status : Failure -Test failed: IO Error: The Network Adapter could not establish the connection解决办法: ...

  8. Open Flash Chart IO ERROR Loading test data Error #2032

    http://blog.sina.com.cn/s/blog_6754464e0100qfvd.html Open Flash Chart 2 提示Open Flash Chart IO ERROR ...

  9. close connection error java.sql.SQLRecoverableException: IO Error: Broken pipe

    java.sql.SQLRecoverableException: IO Error: Broken pipe Table of Contents 1. 错误信息 2. 分析 2.1. 连接池 2.2 ...

随机推荐

  1. 解决ADB server didn't ACK问题,连上手机问题

    出现如下情况 ADB server didn't ACK* failed to start daemon * 解决办法: 方法一: (1)查看任务管理器,关闭所有adb.exe,或者运行->cm ...

  2. 关于strlen误用的一点记录

    今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后 ...

  3. install phpexcel using composer in thinkPHP

    Environment Window 10.1 XAMPP 7.0.9 (PHP 7.0.9) thinkPHP 5.0.1 Steps # visit https://getcomposer.org ...

  4. module not exists: xxxx Error in ThinkPHP

    Introduction ThinkPHP is a very charming PHP framework to easily build a website. It's structured in ...

  5. <script>中的代码

    <script type="text/javascript"> $(document).ready(function () { $.formValidator.init ...

  6. SQLServer控制用户访问权限表

    连接地址:http://www.cnblogs.com/yxyht/archive/2013/03/22/2975880.html 一.需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权 ...

  7. ANGULAR JS WATCH监听使用(详)

    ANGULAR 监听使用: 当angular数据模型发生变化时,我们需要如果需要根据他的变化触发其他的事件. $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. ...

  8. webstorm vue高亮

    文件->设置->文件类型 第一步 第二步选择html 添加*.vue 搞定

  9. 在Mac系统上配置Android真机调试环境

    在Mac系统上配置Android真机调试环境 mac上配置安卓环境还说挺方便的,真机调试也比win上要好一些.win上被各种软件强行安装了xxx助手. 在mac上就了一个干净的感觉. 下载Androi ...

  10. [转载]Back up all of your mysql databases nightly

    原文地址:http://www.linuxbrigade.com/back-up-all-of-your-mysql-databases-nightly/ Put the following into ...