Skip to content

Commit 1483e18

Browse files
more work
1 parent a414fa2 commit 1483e18

File tree

7 files changed

+153
-109
lines changed

7 files changed

+153
-109
lines changed

grovedb-version/src/version/v2.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ pub const GROVE_V2: GroveVersion = GroveVersion {
144144
},
145145
average_case: GroveDBOperationsAverageCaseVersions {
146146
add_average_case_get_merk_at_path: 0,
147-
average_case_merk_replace_tree: 0,
147+
average_case_merk_replace_tree: 1, //changed
148148
average_case_merk_insert_tree: 0,
149149
average_case_merk_delete_tree: 0,
150150
average_case_merk_insert_element: 0,

grovedb/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ name = "insertion_benchmark"
5151
harness = false
5252

5353
[features]
54-
default = ["full"]
54+
default = ["full", "estimated_costs"]
5555
proof_debug = ["grovedb-merk/proof_debug"]
5656
serde = ["dep:serde", "grovedb-merk/serde", "indexmap/serde"]
5757
full = [

grovedb/src/batch/estimated_costs/average_case_costs.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use grovedb_storage::rocksdb_storage::RocksDbStorage;
2121
use grovedb_version::version::GroveVersion;
2222
#[cfg(feature = "full")]
2323
use itertools::Itertools;
24-
24+
use grovedb_merk::merk::TreeType;
2525
use crate::Element;
2626
#[cfg(feature = "full")]
2727
use crate::{
@@ -44,7 +44,7 @@ impl GroveOp {
4444
propagate: bool,
4545
grove_version: &GroveVersion,
4646
) -> CostResult<(), Error> {
47-
let in_tree_using_sums = layer_element_estimates.is_sum_tree;
47+
let in_tree_type = layer_element_estimates.tree_type;
4848
let propagate_if_input = || {
4949
if propagate {
5050
Some(layer_element_estimates)
@@ -53,10 +53,10 @@ impl GroveOp {
5353
}
5454
};
5555
match self {
56-
GroveOp::ReplaceTreeRootKey { sum, .. } => GroveDb::average_case_merk_replace_tree(
56+
GroveOp::ReplaceTreeRootKey { aggregate_data, .. } => GroveDb::average_case_merk_replace_tree(
5757
key,
5858
layer_element_estimates,
59-
sum.is_some(),
59+
aggregate_data,
6060
propagate,
6161
grove_version,
6262
),
@@ -119,16 +119,9 @@ impl GroveOp {
119119
propagate,
120120
grove_version,
121121
),
122-
GroveOp::DeleteTree => GroveDb::average_case_merk_delete_tree(
123-
key,
124-
false,
125-
layer_element_estimates,
126-
propagate,
127-
grove_version,
128-
),
129-
GroveOp::DeleteSumTree => GroveDb::average_case_merk_delete_tree(
122+
GroveOp::DeleteTree(tree_type) => GroveDb::average_case_merk_delete_tree(
130123
key,
131-
true,
124+
tree_type,
132125
layer_element_estimates,
133126
propagate,
134127
grove_version,
@@ -142,7 +135,7 @@ impl GroveOp {
142135
#[derive(Default)]
143136
pub(in crate::batch) struct AverageCaseTreeCacheKnownPaths {
144137
paths: HashMap<KeyInfoPath, EstimatedLayerInformation>,
145-
cached_merks: HashMap<KeyInfoPath, IsSumTree>,
138+
cached_merks: HashMap<KeyInfoPath, TreeType>,
146139
}
147140

148141
#[cfg(feature = "full")]
@@ -167,15 +160,15 @@ impl fmt::Debug for AverageCaseTreeCacheKnownPaths {
167160

168161
#[cfg(feature = "full")]
169162
impl<G, SR> TreeCache<G, SR> for AverageCaseTreeCacheKnownPaths {
170-
fn insert(&mut self, op: &QualifiedGroveDbOp, is_sum_tree: bool) -> CostResult<(), Error> {
163+
fn insert(&mut self, op: &QualifiedGroveDbOp, tree_type: TreeType) -> CostResult<(), Error> {
171164
let mut average_case_cost = OperationCost::default();
172165
let mut inserted_path = op.path.clone();
173166
inserted_path.push(op.key.clone());
174167
// There is no need to pay for getting a merk, because we know the merk to be
175168
// empty at this point.
176169
// There is however a hash call that creates the prefix
177170
average_case_cost.hash_node_calls += 1;
178-
self.cached_merks.insert(inserted_path, is_sum_tree);
171+
self.cached_merks.insert(inserted_path, tree_type);
179172
Ok(()).wrap_with_cost(average_case_cost)
180173
}
181174

grovedb/src/element/helpers.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,18 @@ impl Element {
146146
}
147147
}
148148

149+
#[cfg(any(feature = "full", feature = "verify"))]
150+
/// Check if the element is a tree and return the flags and the tree type
151+
pub fn tree_flags_and_type(&self) -> Option<(&Option<ElementFlags>, TreeType)> {
152+
match self {
153+
Element::Tree(_, flags) => Some((flags, TreeType::NormalTree)),
154+
Element::SumTree(_, _, flags) => Some((flags, TreeType::SumTree)),
155+
Element::BigSumTree(_, _, flags) => Some((flags, TreeType::BigSumTree)),
156+
Element::CountTree(_, _, flags) => Some((flags, TreeType::CountTree)),
157+
_ => None,
158+
}
159+
}
160+
149161
#[cfg(any(feature = "full", feature = "verify"))]
150162
/// Check if the element is a tree and return the tree type
151163
pub fn tree_type(&self) -> Option<TreeType> {

0 commit comments

Comments
 (0)