computer: part 7

This commit is contained in:
nym21
2025-04-07 15:48:00 +02:00
parent 4c7e9fbee2
commit cd69ec4fa3
9 changed files with 278 additions and 185 deletions

View File

@@ -1,8 +1,9 @@
use std::{fs, path::Path};
use brk_core::{CheckedSub, StoredU32, StoredUsize, Timestamp, Weight};
use brk_core::{CheckedSub, StoredU32, StoredU64, StoredUsize, Timestamp, Weight};
use brk_exit::Exit;
use brk_indexer::Indexer;
use brk_parser::bitcoin;
use brk_vec::{AnyStorableVec, Compressed, Version};
use super::{
@@ -16,7 +17,7 @@ pub struct Vecs {
pub indexes_to_block_interval: ComputedVecsFromHeight<Timestamp>,
pub indexes_to_block_count: ComputedVecsFromHeight<StoredU32>,
pub indexes_to_block_weight: ComputedVecsFromHeight<Weight>,
// pub indexes_to_block_vbytes: ComputedVecsFromHeight<>,
pub indexes_to_block_vbytes: ComputedVecsFromHeight<StoredU64>,
pub indexes_to_block_size: ComputedVecsFromHeight<StoredUsize>,
}
@@ -60,6 +61,14 @@ impl Vecs {
compressed,
StorableVecGeneatorOptions::default().add_sum().add_total(),
)?,
indexes_to_block_vbytes: ComputedVecsFromHeight::forced_import(
path,
"block_vbytes",
true,
Version::ZERO,
compressed,
StorableVecGeneatorOptions::default().add_sum().add_total(),
)?,
})
}
@@ -70,7 +79,7 @@ impl Vecs {
starting_indexes: &Indexes,
exit: &Exit,
) -> color_eyre::Result<()> {
self.indexes_to_block_interval.compute(
self.indexes_to_block_interval.compute_all(
indexer,
indexes,
starting_indexes,
@@ -95,57 +104,55 @@ impl Vecs {
},
)?;
self.indexes_to_block_count.compute(
self.indexes_to_block_count.compute_all(
indexer,
indexes,
starting_indexes,
exit,
|v, indexer, _, starting_indexes, exit| {
let indexer_vecs = indexer.mut_vecs();
v.compute_transform(
starting_indexes.height,
indexer_vecs.height_to_weight.mut_vec(),
indexer.mut_vecs().height_to_block_weight.mut_vec(),
|(h, ..)| (h, StoredU32::from(1_u32)),
exit,
)
},
)?;
self.indexes_to_block_weight.compute(
self.indexes_to_block_weight.compute_rest(
indexes,
starting_indexes,
exit,
Some(indexer.mut_vecs().height_to_block_weight.mut_vec()),
)?;
self.indexes_to_block_size.compute_rest(
indexes,
starting_indexes,
exit,
Some(indexer.mut_vecs().height_to_block_size.mut_vec()),
)?;
self.indexes_to_block_vbytes.compute_all(
indexer,
indexes,
starting_indexes,
exit,
|v, indexer, _, starting_indexes, exit| {
let indexer_vecs = indexer.mut_vecs();
v.compute_transform(
starting_indexes.height,
indexer_vecs.height_to_weight.mut_vec(),
|(h, w)| (h, w),
indexer.mut_vecs().height_to_block_weight.mut_vec(),
|(h, w, ..)| {
(
h,
StoredU64::from(bitcoin::Weight::from(w).to_vbytes_floor()),
)
},
exit,
)
},
)?;
// self.indexes_to_block_size.compute(
// indexer,
// indexes,
// starting_indexes,
// exit,
// |v, indexer, _, starting_indexes, exit| {
// let indexer_vecs = indexer.mut_vecs();
// v.compute_transform(
// starting_indexes.height,
// indexer_vecs.height_to_weight.mut_vec(),
// |(h, ..)| (h, StoredU32::from(1_u32)),
// exit,
// )
// },
// )?;
Ok(())
}
@@ -155,6 +162,7 @@ impl Vecs {
self.indexes_to_block_count.any_vecs(),
self.indexes_to_block_weight.any_vecs(),
self.indexes_to_block_size.any_vecs(),
self.indexes_to_block_vbytes.any_vecs(),
]
.concat()
}

View File

@@ -1,10 +1,9 @@
use std::path::Path;
use brk_exit::Exit;
use brk_indexer::{Indexer, Indexes};
use brk_vec::{AnyStorableVec, Compressed, Result, StorableVec, StoredIndex, StoredType, Version};
use crate::storage::vecs::{base::ComputedVec, indexes};
use crate::storage::vecs::base::ComputedVec;
use super::ComputedType;
@@ -699,17 +698,3 @@ impl StorableVecGeneatorOptions {
}
}
}
pub enum Source<'a, F, I, T>
where
F: FnMut(
&mut ComputedVec<I, T>,
&mut Indexer,
&mut indexes::Vecs,
&Indexes,
&Exit,
) -> Result<()>,
{
Compute(F),
Ref(&'a mut StorableVec<I, T>),
}

View File

@@ -5,7 +5,7 @@ use brk_core::{
};
use brk_exit::Exit;
use brk_indexer::Indexer;
use brk_vec::{AnyStorableVec, Compressed, Result, Version};
use brk_vec::{AnyStorableVec, Compressed, Result, StorableVec, Version};
use crate::storage::vecs::{Indexes, base::ComputedVec, indexes};
@@ -67,7 +67,7 @@ where
})
}
pub fn compute<F>(
pub fn compute_all<F>(
&mut self,
indexer: &mut Indexer,
indexes: &mut indexes::Vecs,
@@ -84,16 +84,34 @@ where
&Exit,
) -> Result<()>,
{
if let Some(height) = self.height.as_mut() {
compute(height, indexer, indexes, starting_indexes, exit)?;
}
compute(
self.height.as_mut().unwrap(),
indexer,
indexes,
starting_indexes,
exit,
)?;
self.compute_rest(indexes, starting_indexes, exit, None)?;
Ok(())
}
pub fn compute_rest(
&mut self,
indexes: &mut indexes::Vecs,
starting_indexes: &Indexes,
exit: &Exit,
height: Option<&mut StorableVec<Height, T>>,
) -> color_eyre::Result<()> {
let height = height.unwrap_or_else(|| self.height.as_mut().unwrap().mut_vec());
self.height_extra
.extend(starting_indexes.height, self.height.mut_vec(), exit)?;
.extend(starting_indexes.height, height, exit)?;
self.dateindex.compute(
starting_indexes.dateindex,
self.height.mut_vec(),
height,
indexes.dateindex_to_first_height.mut_vec(),
indexes.dateindex_to_last_height.mut_vec(),
exit,
@@ -141,7 +159,7 @@ where
self.difficultyepoch.compute(
starting_indexes.difficultyepoch,
&mut self.height,
height,
indexes.difficultyepoch_to_first_height.mut_vec(),
indexes.difficultyepoch_to_last_height.mut_vec(),
exit,
@@ -152,7 +170,7 @@ where
pub fn any_vecs(&self) -> Vec<&dyn AnyStorableVec> {
[
vec![self.height.any_vec()],
self.height.as_ref().map_or(vec![], |v| vec![v.any_vec()]),
self.height_extra.any_vecs(),
self.dateindex.any_vecs(),
self.weekindex.any_vecs(),

View File

@@ -320,7 +320,7 @@ impl Vecs {
) -> color_eyre::Result<Indexes> {
let indexer_vecs = indexer.mut_vecs();
let height_count = indexer_vecs.height_to_size.len();
let height_count = indexer_vecs.height_to_block_size.len();
let txindexes_count = indexer_vecs.txindex_to_txid.len();
let txinindexes_count = indexer_vecs.txinindex_to_txoutindex.len();
let txoutindexes_count = indexer_vecs.txoutindex_to_addressindex.len();