package jelectrum.db.rocksdb; import jelectrum.db.DBMap; import jelectrum.db.DBMapThreaded; import org.rocksdb.RocksDB; import org.rocksdb.RocksDBException; import org.rocksdb.WriteBatch; import org.rocksdb.WriteOptions; import java.util.Map; import java.util.concurrent.Executor; import com.google.protobuf.ByteString; public class RocksDBMap extends DBMapThreaded { RocksDB db; String name; public RocksDBMap(Executor exec, RocksDB db, String name) { super(exec); this.db = db; this.name = name; } public ByteString get(String key) { String key_str = name + "/" + key; try { byte[] r = db.get(key_str.getBytes()); if (r == null) return null; return ByteString.copyFrom(r); } catch(RocksDBException e) { throw new RuntimeException(e); } } public void put(String key, ByteString value) { try { String key_str = name + "/" + key; WriteOptions write_options = new WriteOptions(); write_options.setDisableWAL(true); write_options.setSync(false); db.put(write_options, key_str.getBytes(), value.toByteArray()); } catch(RocksDBException e) { throw new RuntimeException(e); } } @Override public void putAll(Map<String, ByteString> m) { try { WriteBatch batch = new WriteBatch(); for(Map.Entry<String, ByteString> e : m.entrySet()) { String key_str = name + "/" + e.getKey(); batch.put(key_str.getBytes(), e.getValue().toByteArray()); } WriteOptions write_options = new WriteOptions(); write_options.setDisableWAL(true); write_options.setSync(false); db.write(write_options, batch); } catch(RocksDBException e) { throw new RuntimeException(e); } } }