mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-06-22 12:23:04 -07:00
60 lines
1.7 KiB
Rust
60 lines
1.7 KiB
Rust
use std::thread;
|
|
|
|
use brk_error::Result;
|
|
use brk_indexer::Indexer;
|
|
use brk_types::Indexes;
|
|
use vecdb::Exit;
|
|
|
|
use crate::indexes;
|
|
|
|
use super::Vecs;
|
|
|
|
impl Vecs {
|
|
pub(crate) fn compute(
|
|
&mut self,
|
|
indexer: &Indexer,
|
|
indexes: &indexes::Vecs,
|
|
starting_indexes: &Indexes,
|
|
exit: &Exit,
|
|
) -> Result<()> {
|
|
self.db.sync_bg_tasks()?;
|
|
|
|
// lookback depends on indexes.timestamp.monotonic
|
|
self.lookback.compute(indexes, starting_indexes, exit)?;
|
|
|
|
// Parallel: remaining sub-modules are independent of each other.
|
|
// size depends on lookback (already computed above).
|
|
let Vecs {
|
|
lookback,
|
|
count,
|
|
interval,
|
|
size,
|
|
weight,
|
|
difficulty,
|
|
halving,
|
|
..
|
|
} = self;
|
|
thread::scope(|s| -> Result<()> {
|
|
let r1 = s.spawn(|| count.compute(indexer, starting_indexes, exit));
|
|
let r2 = s.spawn(|| interval.compute(indexer, starting_indexes, exit));
|
|
let r3 = s.spawn(|| weight.compute(indexer, starting_indexes, exit));
|
|
let r4 = s.spawn(|| difficulty.compute(indexer, indexes, starting_indexes, exit));
|
|
let r5 = s.spawn(|| halving.compute(indexes, starting_indexes, exit));
|
|
size.compute(indexer, &*lookback, starting_indexes, exit)?;
|
|
r1.join().unwrap()?;
|
|
r2.join().unwrap()?;
|
|
r3.join().unwrap()?;
|
|
r4.join().unwrap()?;
|
|
r5.join().unwrap()?;
|
|
Ok(())
|
|
})?;
|
|
|
|
let exit = exit.clone();
|
|
self.db.run_bg(move |db| {
|
|
let _lock = exit.lock();
|
|
db.compact_deferred_default()
|
|
});
|
|
Ok(())
|
|
}
|
|
}
|