package jelectrum.db.rocksdb; import jelectrum.db.DBMapSet; import jelectrum.db.DBMapSetThreaded; import jelectrum.db.DBTooManyResultsException; import org.rocksdb.RocksDB; import org.rocksdb.RocksIterator; import org.rocksdb.RocksDBException; import org.rocksdb.WriteBatch; import org.rocksdb.WriteOptions; import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.HashSet; import jelectrum.TimeRecord; import org.bitcoinj.core.Sha256Hash; import java.util.concurrent.Executor; public class RocksDBMapSet extends DBMapSetThreaded { RocksDB db; String name; public RocksDBMapSet(Executor exec, RocksDB db, String name) { super(exec); this.db = db; this.name = name; } public void add(String key, Sha256Hash hash) { String s = name + "/" + key + "/" + hash.toString(); byte b[]=new byte[0]; try { WriteOptions write_options = new WriteOptions(); write_options.setDisableWAL(true); write_options.setSync(false); db.put(write_options, s.getBytes(), b); } catch(RocksDBException e) { throw new RuntimeException(e); } } public Set<Sha256Hash> getSet(String key, int max_reply) { String s = name + "/" + key + "/"; HashSet<Sha256Hash> set = new HashSet<Sha256Hash>(); int count = 0; RocksIterator it = db.newIterator(); try { it.seek(s.getBytes()); while(it.isValid()) { String curr_key = new String(it.key()); if (!curr_key.startsWith(s)) break; String hash_string = curr_key.substring(s.length()); set.add(new Sha256Hash(hash_string)); count++; if (count > max_reply) throw new DBTooManyResultsException(); it.next(); } } finally { it.dispose(); } /*catch(RocksDBException e) { throw new RuntimeException(e); }*/ return set; } }