package jelectrum.db.rocksdb; import jelectrum.db.DB; import jelectrum.db.DBMap; import jelectrum.db.DBMapSet; import jelectrum.Config; import jelectrum.EventLog; import org.rocksdb.RocksDB; import org.rocksdb.Options; import org.rocksdb.FlushOptions; public class JRocksDB extends DB { private RocksDB db; private Options options; private EventLog log; public JRocksDB(Config config, EventLog log) throws Exception { super(config); this.log = log; config.require("rocksdb_path"); String path = config.get("rocksdb_path"); RocksDB.loadLibrary(); Options options = new Options(); options.setIncreaseParallelism(16); options.setCreateIfMissing(true); options.setAllowMmapReads(true); //options.setAllowMmapWrites(true); db = RocksDB.open(options, path); open(); } protected DBMap openMap(String name) throws Exception { return new RocksDBMap(getExec(), db, name); } protected DBMapSet openMapSet(String name) throws Exception { return new RocksDBMapSet(getExec(), db, name); } @Override protected void dbShutdownHandler() throws Exception { log.alarm("RocksDB: flushing"); FlushOptions fl = new FlushOptions(); fl.setWaitForFlush(true); db.flush(fl); log.alarm("RocksDB: flush complete"); } }