mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-05-12 20:38:36 -07:00
global: multiple fixes
This commit is contained in:
@@ -11,33 +11,9 @@ fn main() -> Result<()> {
|
||||
let mut store: Store<Dollars, Sats> =
|
||||
brk_store::Store::import(&keyspace, p, "n", Version::ZERO, None)?;
|
||||
|
||||
store.copy_db_to_puts();
|
||||
|
||||
*store.puts_entry_or_default(&Dollars::from(10.0)) += Sats::ONE_BTC;
|
||||
*store.puts_entry_or_default(&Dollars::from(1.0)) += Sats::ONE_BTC;
|
||||
*store.puts_entry_or_default(&Dollars::ZERO) += Sats::ONE_BTC;
|
||||
*store.puts_entry_or_default(&Dollars::ZERO) += Sats::ONE_BTC;
|
||||
|
||||
dbg!(store.tx_iter().collect::<Vec<_>>());
|
||||
store.insert_if_needed(Dollars::from(10.0), Sats::FIFTY_BTC, Height::ZERO);
|
||||
|
||||
store.commit(Height::ZERO)?;
|
||||
|
||||
store.copy_db_to_puts();
|
||||
|
||||
dbg!(store.tx_iter().collect::<Vec<_>>());
|
||||
|
||||
*store.puts_entry_or_default(&Dollars::from(10.0)) += Sats::ONE_BTC;
|
||||
*store.puts_entry_or_default(&Dollars::from(1.0)) += Sats::ONE_BTC;
|
||||
*store.puts_entry_or_default(&Dollars::ZERO) += Sats::ONE_BTC;
|
||||
*store.puts_entry_or_default(&Dollars::ZERO) += Sats::ONE_BTC;
|
||||
|
||||
dbg!(store.tx_iter().collect::<Vec<_>>());
|
||||
|
||||
store.commit(Height::from(1_u32))?;
|
||||
|
||||
store.copy_db_to_puts();
|
||||
|
||||
dbg!(store.tx_iter().collect::<Vec<_>>());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -31,7 +31,6 @@ pub struct Store<Key, Value> {
|
||||
puts: BTreeMap<Key, Value>,
|
||||
dels: BTreeSet<Key>,
|
||||
bloom_filter_bits: Option<Option<u8>>,
|
||||
override_partition: bool,
|
||||
}
|
||||
|
||||
/// Use default if will read
|
||||
@@ -81,7 +80,6 @@ where
|
||||
puts: BTreeMap::new(),
|
||||
dels: BTreeSet::new(),
|
||||
bloom_filter_bits,
|
||||
override_partition: false,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -95,79 +93,33 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
pub fn puts_first_key_value(&self) -> Option<(&K, &V)> {
|
||||
self.puts.first_key_value()
|
||||
}
|
||||
// pub fn puts_first_key_value(&self) -> Option<(&K, &V)> {
|
||||
// self.puts.first_key_value()
|
||||
// }
|
||||
|
||||
pub fn puts_last_key_value(&self) -> Option<(&K, &V)> {
|
||||
self.puts.last_key_value()
|
||||
}
|
||||
// pub fn puts_last_key_value(&self) -> Option<(&K, &V)> {
|
||||
// self.puts.last_key_value()
|
||||
// }
|
||||
|
||||
pub fn rtx_first_key_value(&self) -> Result<Option<(K, V)>> {
|
||||
Ok(self
|
||||
.rtx
|
||||
.first_key_value(&self.partition.load())?
|
||||
.map(|(k, v)| (K::from(ByteView::from(k)), V::from(ByteView::from(v)))))
|
||||
}
|
||||
// pub fn rtx_first_key_value(&self) -> Result<Option<(K, V)>> {
|
||||
// Ok(self
|
||||
// .rtx
|
||||
// .first_key_value(&self.partition.load())?
|
||||
// .map(|(k, v)| (K::from(ByteView::from(k)), V::from(ByteView::from(v)))))
|
||||
// }
|
||||
|
||||
pub fn rtx_last_key_value(&self) -> Result<Option<(K, V)>> {
|
||||
Ok(self
|
||||
.rtx
|
||||
.last_key_value(&self.partition.load())?
|
||||
.map(|(k, v)| (K::from(ByteView::from(k)), V::from(ByteView::from(v)))))
|
||||
}
|
||||
// pub fn rtx_last_key_value(&self) -> Result<Option<(K, V)>> {
|
||||
// Ok(self
|
||||
// .rtx
|
||||
// .last_key_value(&self.partition.load())?
|
||||
// .map(|(k, v)| (K::from(ByteView::from(k)), V::from(ByteView::from(v)))))
|
||||
// }
|
||||
|
||||
pub fn puts_entry_or_default(&mut self, key: &'a K) -> &mut V
|
||||
where
|
||||
V: Default,
|
||||
{
|
||||
if !self.dels.is_empty() {
|
||||
self.dels.remove(key);
|
||||
}
|
||||
self.puts.entry(key.clone()).or_default()
|
||||
}
|
||||
|
||||
pub fn puts_remove(&mut self, key: &K) -> Option<V> {
|
||||
self.puts.remove(key)
|
||||
}
|
||||
|
||||
pub fn dels_insert(&mut self, key: K) -> bool {
|
||||
self.dels.insert(key)
|
||||
}
|
||||
|
||||
pub fn tx_iter(&self) -> impl Iterator<Item = (K, V)> {
|
||||
self.rtx
|
||||
.iter(&self.partition.load())
|
||||
.map(|res| res.unwrap())
|
||||
.map(|(k, v)| (K::from(ByteView::from(k)), V::from(ByteView::from(v))))
|
||||
}
|
||||
|
||||
pub fn puts_iter(&self) -> impl Iterator<Item = (&K, &V)> {
|
||||
self.puts.iter()
|
||||
}
|
||||
|
||||
pub fn clone_puts(&self) -> BTreeMap<K, V> {
|
||||
self.puts.clone()
|
||||
}
|
||||
|
||||
pub fn append_puts(&mut self, mut other: BTreeMap<K, V>) {
|
||||
self.puts.append(&mut other);
|
||||
}
|
||||
|
||||
pub fn copy_db_to_puts(&mut self) {
|
||||
self.override_partition = true;
|
||||
self.append_puts(self.tx_iter().collect());
|
||||
self.meta.reset_len();
|
||||
}
|
||||
|
||||
// pub fn unordered_clone_iter(&self) -> impl Iterator<Item = (K, V)> {
|
||||
// pub fn tx_iter(&self) -> impl Iterator<Item = (K, V)> {
|
||||
// self.rtx
|
||||
// .keys(&self.partition.load())
|
||||
// .iter(&self.partition.load())
|
||||
// .map(|res| res.unwrap())
|
||||
// .map(|k| K::from(ByteView::from(k)))
|
||||
// .filter(|k| !self.puts.contains_key(k) && !self.dels.contains(k))
|
||||
// .map(|k| (k, self.rtx.get(partition, key) V::from(ByteView::from(v))))
|
||||
// .chain(self.puts.iter().map(|(k, v)| (k.clone(), v.clone())))
|
||||
// .map(|(k, v)| (K::from(ByteView::from(k)), V::from(ByteView::from(v))))
|
||||
// }
|
||||
|
||||
pub fn insert_if_needed(&mut self, key: K, value: V, height: Height) {
|
||||
@@ -215,10 +167,6 @@ where
|
||||
|
||||
self.meta.export(self.len(), height)?;
|
||||
|
||||
if self.override_partition {
|
||||
self.reset_partition()?;
|
||||
}
|
||||
|
||||
let mut wtx = self.keyspace.write_tx();
|
||||
|
||||
let partition = &self.partition.load();
|
||||
@@ -338,7 +286,6 @@ where
|
||||
puts: self.puts.clone(),
|
||||
dels: self.dels.clone(),
|
||||
bloom_filter_bits: self.bloom_filter_bits,
|
||||
override_partition: self.override_partition,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,10 +36,7 @@ impl StoreMeta {
|
||||
|
||||
let mut partition = open_partition_handle()?;
|
||||
|
||||
let mut did_reset = false;
|
||||
|
||||
if !is_same_version {
|
||||
did_reset = true;
|
||||
Self::reset_(path)?;
|
||||
keyspace.delete_partition(partition)?;
|
||||
keyspace.persist(fjall::PersistMode::SyncAll)?;
|
||||
@@ -48,11 +45,6 @@ impl StoreMeta {
|
||||
|
||||
let len = Self::read_length_(path);
|
||||
|
||||
if did_reset && len != 0 {
|
||||
dbg!(&path);
|
||||
unreachable!();
|
||||
}
|
||||
|
||||
let slf = Self {
|
||||
pathbuf: path.to_owned(),
|
||||
version,
|
||||
@@ -69,9 +61,6 @@ impl StoreMeta {
|
||||
self.len
|
||||
}
|
||||
|
||||
pub fn reset_len(&mut self) {
|
||||
self.len = 0
|
||||
}
|
||||
// pub fn is_empty(&self) -> bool {
|
||||
// self.len() == 0
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user