Skip to content

Commit 8e970c8

Browse files
committed
chore: remove get_many to reconsider the API
1 parent 931c241 commit 8e970c8

File tree

6 files changed

+4
-162
lines changed

6 files changed

+4
-162
lines changed

crates/hot-mdbx/src/test_utils.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -329,21 +329,6 @@ mod tests {
329329
assert_eq!(read_account.as_ref(), Some(expected_account));
330330
}
331331
}
332-
333-
// Test batch get_many
334-
{
335-
let reader: Tx<Ro> = db.reader().unwrap();
336-
let addresses: Vec<Address> = accounts.iter().map(|(addr, _)| *addr).collect();
337-
let read_accounts: Vec<(_, Option<Account>)> = reader
338-
.get_many::<tables::PlainAccountState, _>(addresses.iter())
339-
.into_iter()
340-
.collect::<Result<Vec<_>, _>>()
341-
.unwrap();
342-
343-
for (i, (_, expected_account)) in accounts.iter().enumerate() {
344-
assert_eq!(read_accounts[i].1.as_ref(), Some(expected_account));
345-
}
346-
}
347332
}
348333

349334
#[test]

crates/hot/src/conformance.rs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1959,7 +1959,6 @@ pub fn test_get_many<T: HotKv>(hot_kv: &T) {
19591959
let addr1 = address!("0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee01");
19601960
let addr2 = address!("0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee02");
19611961
let addr3 = address!("0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03");
1962-
let addr4 = address!("0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee04"); // non-existent
19631962

19641963
let acc1 = Account { nonce: 1, balance: U256::from(100), bytecode_hash: None };
19651964
let acc2 = Account { nonce: 2, balance: U256::from(200), bytecode_hash: None };
@@ -1973,34 +1972,6 @@ pub fn test_get_many<T: HotKv>(hot_kv: &T) {
19731972
writer.put_account(&addr3, &acc3).unwrap();
19741973
writer.commit().unwrap();
19751974
}
1976-
1977-
// Batch retrieve
1978-
{
1979-
let reader = hot_kv.reader().unwrap();
1980-
let keys = [addr1, addr2, addr3, addr4];
1981-
let results = reader
1982-
.get_many::<tables::PlainAccountState, _>(&keys)
1983-
.into_iter()
1984-
.collect::<Result<Vec<_>, _>>()
1985-
.unwrap();
1986-
1987-
assert_eq!(results.len(), 4);
1988-
1989-
// Build a map for easier checking (order not guaranteed)
1990-
let result_map: HashMap<&Address, Option<Account>> =
1991-
results.iter().map(|(k, v)| (*k, *v)).collect();
1992-
1993-
assert!(result_map[&addr1].is_some());
1994-
assert_eq!(result_map[&addr1].as_ref().unwrap().nonce, 1);
1995-
1996-
assert!(result_map[&addr2].is_some());
1997-
assert_eq!(result_map[&addr2].as_ref().unwrap().nonce, 2);
1998-
1999-
assert!(result_map[&addr3].is_some());
2000-
assert_eq!(result_map[&addr3].as_ref().unwrap().nonce, 3);
2001-
2002-
assert!(result_map[&addr4].is_none(), "Non-existent key should return None");
2003-
}
20041975
}
20051976

20061977
/// Test queue_put_many batch writes.

crates/hot/src/mem.rs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1519,22 +1519,6 @@ mod tests {
15191519
writer.queue_put_many::<TestTable, _>(entry_refs).unwrap();
15201520
writer.raw_commit().unwrap();
15211521
}
1522-
1523-
// Read batch
1524-
{
1525-
let reader = store.reader().unwrap();
1526-
let keys: Vec<_> = entries.iter().map(|(k, _)| k).collect();
1527-
let values = reader
1528-
.get_many::<TestTable, _>(keys)
1529-
.into_iter()
1530-
.collect::<Result<Vec<_>, _>>()
1531-
.unwrap();
1532-
1533-
assert_eq!(values.len(), 3);
1534-
assert_eq!(values[0], (&1u64, Some(Bytes::from_static(b"first"))));
1535-
assert_eq!(values[1], (&2u64, Some(Bytes::from_static(b"second"))));
1536-
assert_eq!(values[2], (&3u64, Some(Bytes::from_static(b"third"))));
1537-
}
15381522
}
15391523

15401524
#[test]

crates/hot/src/model/revm.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{
2-
model::{GetManyItem, HotKvError, HotKvRead, HotKvWrite},
2+
model::{HotKvError, HotKvRead, HotKvWrite},
33
tables::{self, Bytecodes, DualKey, PlainAccountState, SingleKey, Table},
44
};
55
use alloy::primitives::{Address, B256, KECCAK256_EMPTY};
@@ -74,18 +74,6 @@ impl<U: HotKvRead> HotKvRead for RevmRead<U> {
7474
) -> Result<Option<T::Value>, Self::Error> {
7575
self.reader.get_dual::<T>(key1, key2)
7676
}
77-
78-
fn get_many<'a, T, I>(
79-
&self,
80-
keys: I,
81-
) -> impl IntoIterator<Item = Result<GetManyItem<'a, T>, Self::Error>>
82-
where
83-
T::Key: 'a,
84-
T: SingleKey,
85-
I: IntoIterator<Item = &'a T::Key>,
86-
{
87-
self.reader.get_many::<T, I>(keys)
88-
}
8977
}
9078

9179
/// Read-write REVM database adapter. This adapter allows committing changes.
@@ -155,18 +143,6 @@ impl<U: HotKvWrite> HotKvRead for RevmWrite<U> {
155143
) -> Result<Option<T::Value>, Self::Error> {
156144
self.writer.get_dual::<T>(key1, key2)
157145
}
158-
159-
fn get_many<'a, T, I>(
160-
&self,
161-
keys: I,
162-
) -> impl IntoIterator<Item = Result<GetManyItem<'a, T>, Self::Error>>
163-
where
164-
T::Key: 'a,
165-
T: SingleKey,
166-
I: IntoIterator<Item = &'a T::Key>,
167-
{
168-
self.writer.get_many::<T, I>(keys)
169-
}
170146
}
171147

172148
impl<U: HotKvWrite> HotKvWrite for RevmWrite<U> {

crates/hot/src/model/traits.rs

Lines changed: 2 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
22
model::{
3-
DualKeyTraverse, DualKeyValue, DualTableCursor, GetManyDualItem, GetManyItem, HotKvError,
4-
HotKvReadError, KeyValue, KvTraverse, KvTraverseMut, TableCursor,
3+
DualKeyTraverse, DualKeyValue, DualTableCursor, HotKvError, HotKvReadError, KeyValue,
4+
KvTraverse, KvTraverseMut, TableCursor,
55
revm::{RevmRead, RevmWrite},
66
},
77
ser::{KeySer, MAX_KEY_SIZE, ValSer},
@@ -175,79 +175,6 @@ pub trait HotKvRead {
175175
};
176176
T::Value::decode_value(&value_bytes).map(Some).map_err(Into::into)
177177
}
178-
179-
/// Get many values from a specific table.
180-
///
181-
/// # Arguments
182-
///
183-
/// * `keys` - An iterator over keys to retrieve.
184-
///
185-
/// # Returns
186-
///
187-
/// An iterator of [`KeyValue`] where each element corresponds to the value
188-
/// for the respective key in the input iterator. If a key does not exist
189-
/// in the table, the corresponding element will be `None`.
190-
///
191-
/// Implementations ARE NOT required to preserve the order of the input
192-
/// keys in the output iterator. Users should not rely on any specific
193-
/// ordering.
194-
///
195-
/// If any error occurs during retrieval or deserialization, the entire
196-
/// operation will return an error.
197-
fn get_many<'a, T, I>(
198-
&self,
199-
keys: I,
200-
) -> impl IntoIterator<Item = Result<GetManyItem<'a, T>, Self::Error>>
201-
where
202-
T::Key: 'a,
203-
T: SingleKey,
204-
I: IntoIterator<Item = &'a T::Key>,
205-
{
206-
let mut key_buf = [0u8; MAX_KEY_SIZE];
207-
208-
keys.into_iter()
209-
.map(move |key| (key, self.raw_get(T::NAME, key.encode_key(&mut key_buf))))
210-
.map(|(key, maybe_val)| {
211-
maybe_val
212-
.and_then(|val| {
213-
<T::Value as ValSer>::maybe_decode_value(val.as_deref()).map_err(Into::into)
214-
})
215-
.map(|res| (key, res))
216-
})
217-
}
218-
219-
/// Get many values from a specific dual-keyed table.
220-
///
221-
/// # Arguments
222-
/// * `keys` - An iterator over tuples of (key1, key2) to retrieve.
223-
///
224-
/// # Returns
225-
fn get_many_dual<'a, T, I>(
226-
&self,
227-
keys: I,
228-
) -> impl IntoIterator<Item = Result<GetManyDualItem<'a, T>, Self::Error>>
229-
where
230-
T: DualKey,
231-
T::Key: 'a,
232-
T::Key2: 'a,
233-
I: IntoIterator<Item = (&'a T::Key, &'a T::Key2)>,
234-
{
235-
let mut key_buf = [0u8; MAX_KEY_SIZE];
236-
let mut key2_buf = [0u8; MAX_KEY_SIZE];
237-
keys.into_iter().map(move |(key1, key2)| {
238-
let key1_bytes = key1.encode_key(&mut key_buf);
239-
let key2_bytes = key2.encode_key(&mut key2_buf);
240-
241-
let maybe_val = self.raw_get_dual(T::NAME, key1_bytes, key2_bytes)?;
242-
243-
let decoded_val = match maybe_val {
244-
Some(val) => Some(<T::Value as ValSer>::decode_value(&val)?),
245-
None => None,
246-
};
247-
248-
Ok((key1, key2, decoded_val))
249-
})
250-
}
251178
}
252179

253180
/// Trait for hot storage write transactions.

crates/hot/src/model/traverse.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use crate::{
55
ser::{KeySer, MAX_KEY_SIZE},
66
tables::{DualKey, SingleKey},
77
};
8+
use core::marker::PhantomData;
89
use std::ops::Range;
910

1011
/// Trait for traversing key-value pairs in the database.
@@ -449,8 +450,6 @@ where
449450
// Wrapper Structs
450451
// ============================================================================
451452

452-
use core::marker::PhantomData;
453-
454453
/// A wrapper struct for typed table traversal.
455454
///
456455
/// This struct wraps a raw cursor and provides type-safe access to table

0 commit comments

Comments
 (0)