Skip to content

Commit f42072d

Browse files
committed
chore: deprecate default bitwidths in the KAMT/AMT
1. We don't intentionally use these anywhere. 2. We _do_ unintentionally use these where we shouldn't (filecoin-project/builtin-actors#1346). fixes #1828
1 parent 0f247eb commit f42072d

File tree

6 files changed

+29
-15
lines changed

6 files changed

+29
-15
lines changed

ipld/hamt/benches/hamt_benchmark.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ fn insert(c: &mut Criterion) {
3838
c.bench_function("HAMT bulk insert (no flush)", |b| {
3939
b.iter(|| {
4040
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
41-
let mut a = Hamt::<_, _>::new(&db);
41+
let mut a = Hamt::<_, _>::new_with_bit_width(&db, 5);
4242

4343
for i in 0..black_box(ITEM_COUNT) {
4444
a.set(black_box(vec![i; 20].into()), black_box(BenchData::new(i)))
@@ -52,11 +52,11 @@ fn insert_load_flush(c: &mut Criterion) {
5252
c.bench_function("HAMT bulk insert with flushing and loading", |b| {
5353
b.iter(|| {
5454
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
55-
let mut empt = Hamt::<_, ()>::new(&db);
55+
let mut empt = Hamt::<_, ()>::new_with_bit_width(&db, 5);
5656
let mut cid = empt.flush().unwrap();
5757

5858
for i in 0..black_box(ITEM_COUNT) {
59-
let mut a = Hamt::<_, _>::load(&cid, &db).unwrap();
59+
let mut a = Hamt::<_, _>::load_with_bit_width(&cid, &db, 5).unwrap();
6060
a.set(black_box(vec![i; 20].into()), black_box(BenchData::new(i)))
6161
.unwrap();
6262
cid = a.flush().unwrap();
@@ -67,15 +67,15 @@ fn insert_load_flush(c: &mut Criterion) {
6767

6868
fn delete(c: &mut Criterion) {
6969
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
70-
let mut a = Hamt::<_, _>::new(&db);
70+
let mut a = Hamt::<_, _>::new_with_bit_width(&db, 5);
7171
for i in 0..black_box(ITEM_COUNT) {
7272
a.set(vec![i; 20].into(), BenchData::new(i)).unwrap();
7373
}
7474
let cid = a.flush().unwrap();
7575

7676
c.bench_function("HAMT deleting all nodes", |b| {
7777
b.iter(|| {
78-
let mut a = Hamt::<_, BenchData>::load(&cid, &db).unwrap();
78+
let mut a = Hamt::<_, BenchData>::load_with_bit_width(&cid, &db, 5).unwrap();
7979
for i in 0..black_box(ITEM_COUNT) {
8080
a.delete(black_box([i; 20].as_ref())).unwrap();
8181
}
@@ -85,15 +85,15 @@ fn delete(c: &mut Criterion) {
8585

8686
fn for_each(c: &mut Criterion) {
8787
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
88-
let mut a = Hamt::<_, _>::new(&db);
88+
let mut a = Hamt::<_, _>::new_with_bit_width(&db, 5);
8989
for i in 0..black_box(ITEM_COUNT) {
9090
a.set(vec![i; 20].into(), BenchData::new(i)).unwrap();
9191
}
9292
let cid = a.flush().unwrap();
9393

9494
c.bench_function("HAMT for_each function", |b| {
9595
b.iter(|| {
96-
let a = Hamt::<_, _>::load(&cid, &db).unwrap();
96+
let a = Hamt::<_, _>::load_with_bit_width(&cid, &db, 5).unwrap();
9797
black_box(a).for_each(|_k, _v: &BenchData| Ok(())).unwrap();
9898
})
9999
});

ipld/hamt/src/hamt.rs

+2
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ where
8080
Ver: Version,
8181
H: HashAlgorithm,
8282
{
83+
#[deprecated = "specify a bit-width explicitly"]
8384
pub fn new(store: BS) -> Self {
8485
Self::new_with_config(store, Config::default())
8586
}
@@ -106,6 +107,7 @@ where
106107
}
107108

108109
/// Lazily instantiate a hamt from this root Cid.
110+
#[deprecated = "specify a bit-width explicitly"]
109111
pub fn load(cid: &Cid, store: BS) -> Result<Self, Error> {
110112
Self::load_with_config(cid, store, Config::default())
111113
}

ipld/hamt/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ pub use self::hash::*;
2828
pub use self::hash_algorithm::*;
2929

3030
/// Default bit width for indexing a hash at each depth level
31+
#[deprecated]
3132
const DEFAULT_BIT_WIDTH: u32 = 8;
3233

3334
/// Configuration options for a HAMT instance.
@@ -63,6 +64,7 @@ pub struct Config {
6364
impl Default for Config {
6465
fn default() -> Self {
6566
Self {
67+
#[allow(deprecated)]
6668
bit_width: DEFAULT_BIT_WIDTH,
6769
min_data_depth: 0,
6870
max_array_width: 3,

ipld/kamt/benches/kamt_benchmark.rs

+14-8
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@ use std::borrow::Cow;
99
use criterion::{black_box, criterion_group, criterion_main, Criterion};
1010
use fvm_ipld_blockstore::MemoryBlockstore;
1111
use fvm_ipld_encoding::tuple::*;
12-
use fvm_ipld_kamt::{AsHashedKey, HashedKey, Kamt};
12+
use fvm_ipld_kamt::{AsHashedKey, Config, HashedKey, Kamt};
1313

1414
const ITEM_COUNT: u8 = 40;
1515

16+
const TEST_CONFIG: Config = Config {
17+
bit_width: 5,
18+
min_data_depth: 0,
19+
max_array_width: 3,
20+
};
21+
1622
// Struct to simulate a reasonable amount of data per value into the amt
1723
#[derive(Clone, Serialize_tuple, Deserialize_tuple, PartialEq)]
1824
struct BenchData {
@@ -56,7 +62,7 @@ fn insert(c: &mut Criterion) {
5662
c.bench_function("KAMT bulk insert (no flush)", |b| {
5763
b.iter(|| {
5864
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
59-
let mut a = BKamt::new(&db);
65+
let mut a = BKamt::new_with_config(&db, Config::default());
6066

6167
for i in 0..black_box(ITEM_COUNT) {
6268
a.set(black_box(vec![i; 20]), black_box(BenchData::new(i)))
@@ -70,11 +76,11 @@ fn insert_load_flush(c: &mut Criterion) {
7076
c.bench_function("KAMT bulk insert with flushing and loading", |b| {
7177
b.iter(|| {
7278
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
73-
let mut empt = BKamt::new(&db);
79+
let mut empt = BKamt::new_with_config(&db, TEST_CONFIG);
7480
let mut cid = empt.flush().unwrap();
7581

7682
for i in 0..black_box(ITEM_COUNT) {
77-
let mut a = BKamt::load(&cid, &db).unwrap();
83+
let mut a = BKamt::load_with_config(&cid, &db, TEST_CONFIG).unwrap();
7884
a.set(black_box(vec![i; 20]), black_box(BenchData::new(i)))
7985
.unwrap();
8086
cid = a.flush().unwrap();
@@ -85,15 +91,15 @@ fn insert_load_flush(c: &mut Criterion) {
8591

8692
fn delete(c: &mut Criterion) {
8793
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
88-
let mut a = BKamt::new(&db);
94+
let mut a = BKamt::new_with_config(&db, TEST_CONFIG);
8995
for i in 0..black_box(ITEM_COUNT) {
9096
a.set(vec![i; 20], BenchData::new(i)).unwrap();
9197
}
9298
let cid = a.flush().unwrap();
9399

94100
c.bench_function("KAMT deleting all nodes", |b| {
95101
b.iter(|| {
96-
let mut a = BKamt::load(&cid, &db).unwrap();
102+
let mut a = BKamt::load_with_config(&cid, &db, TEST_CONFIG).unwrap();
97103
for i in 0..black_box(ITEM_COUNT) {
98104
a.delete(black_box(vec![i; 20].as_ref())).unwrap();
99105
}
@@ -103,15 +109,15 @@ fn delete(c: &mut Criterion) {
103109

104110
fn for_each(c: &mut Criterion) {
105111
let db = fvm_ipld_blockstore::MemoryBlockstore::default();
106-
let mut a = BKamt::new(&db);
112+
let mut a = BKamt::new_with_config(&db, TEST_CONFIG);
107113
for i in 0..black_box(ITEM_COUNT) {
108114
a.set(vec![i; 20], BenchData::new(i)).unwrap();
109115
}
110116
let cid = a.flush().unwrap();
111117

112118
c.bench_function("KAMT for_each function", |b| {
113119
b.iter(|| {
114-
let a = BKamt::load(&cid, &db).unwrap();
120+
let a = BKamt::load_with_config(&cid, &db, TEST_CONFIG).unwrap();
115121
black_box(a).for_each(|_k, _v: &BenchData| Ok(())).unwrap();
116122
})
117123
});

ipld/kamt/src/kamt.rs

+2
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ where
6767
V: Serialize + DeserializeOwned,
6868
BS: Blockstore,
6969
{
70+
#[deprecated = "specify config with an explicit bit-width"]
7071
pub fn new(store: BS) -> Self {
7172
Self::new_with_config(store, Config::default())
7273
}
@@ -81,6 +82,7 @@ where
8182
}
8283

8384
/// Lazily instantiate a Kamt from this root Cid.
85+
#[deprecated = "specify config with an explicit bit-width"]
8486
pub fn load(cid: &Cid, store: BS) -> Result<Self, Error> {
8587
Self::load_with_config(cid, store, Config::default())
8688
}

ipld/kamt/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ pub use self::error::Error;
3131
pub use self::kamt::Kamt;
3232

3333
/// Default bit width for indexing a hash at each depth level
34+
#[deprecated]
3435
const DEFAULT_BIT_WIDTH: u32 = 8;
3536

3637
/// Configuration options for a KAMT instance.
@@ -63,6 +64,7 @@ pub struct Config {
6364
impl Default for Config {
6465
fn default() -> Self {
6566
Self {
67+
#[allow(deprecated)]
6668
bit_width: DEFAULT_BIT_WIDTH,
6769
min_data_depth: 0,
6870
max_array_width: 3,

0 commit comments

Comments
 (0)