Skip to content

Commit d73fc53

Browse files
committed
misc(ledger): use LoggableError to log storage problems
1 parent 667507d commit d73fc53

File tree

7 files changed

+49
-60
lines changed

7 files changed

+49
-60
lines changed

ledger/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ optional = true
123123
[dependencies.snarkvm-synthesizer]
124124
workspace = true
125125

126+
[dependencies.snarkvm-utilities]
127+
workspace = true
128+
126129
[dependencies.aleo-std]
127130
workspace = true
128131
features = [ "storage" ]
@@ -188,9 +191,6 @@ features = [ "preserve_order" ]
188191
[dev-dependencies.snarkvm-circuit]
189192
workspace = true
190193

191-
[dev-dependencies.snarkvm-utilities]
192-
workspace = true
193-
194194
[dev-dependencies.snarkvm-synthesizer]
195195
workspace = true
196196
features = [ "test" ]

ledger/src/find.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
use super::*;
1717

18+
use snarkvm_utilities::LoggableError;
19+
1820
impl<N: Network, C: ConsensusStorage<N>> Ledger<N, C> {
1921
/// Returns the block height that contains the given `state root`.
2022
pub fn find_block_height_from_state_root(&self, state_root: N::StateRoot) -> Result<Option<u32>> {
@@ -128,8 +130,8 @@ impl<N: Network, C: ConsensusStorage<N>> Ledger<N, C> {
128130
match commitment {
129131
Ok(Some(commitment)) => Some((commitment, record)),
130132
Ok(None) => None,
131-
Err(e) => {
132-
warn!("Failed to process 'find_record_ciphertexts({:?})': {e}", filter);
133+
Err(err) => {
134+
err.log_warning(format!("Failed to process 'find_record_ciphertexts({filter:?})'"));
133135
None
134136
}
135137
}
@@ -146,8 +148,8 @@ impl<N: Network, C: ConsensusStorage<N>> Ledger<N, C> {
146148
self.find_record_ciphertexts(view_key, filter).map(|iter| {
147149
iter.flat_map(|(commitment, record)| match record.decrypt(view_key) {
148150
Ok(record) => Some((commitment, record)),
149-
Err(e) => {
150-
warn!("Failed to decrypt the record: {e}");
151+
Err(err) => {
152+
err.log_warning("Failed to decrypt record");
151153
None
152154
}
153155
})

ledger/store/Cargo.toml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ edition = "2024"
1919
[features]
2020
default = [ "indexmap/rayon" ]
2121
locktick = [ "dep:locktick", "snarkvm-ledger-puzzle/locktick" ]
22-
rocks = [ "rocksdb", "smallvec", "tracing" ]
22+
rocks = [ "rocksdb", "smallvec" ]
2323
serial = [
2424
"snarkvm-console/serial",
2525
"snarkvm-ledger-block/serial",
@@ -109,10 +109,6 @@ workspace = true
109109
features = [ "write" ]
110110
optional = true
111111

112-
[dependencies.tracing]
113-
workspace = true
114-
optional = true
115-
116112
[dev-dependencies.aleo-std]
117113
workspace = true
118114

@@ -131,3 +127,6 @@ workspace = true
131127

132128
[dev-dependencies.tracing-test]
133129
version = "0.2.5"
130+
131+
[dev-dependencies.tracing]
132+
workspace = true

ledger/store/src/helpers/rocksdb/internal/map.rs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@
1818
use super::*;
1919
use crate::helpers::{Map, MapRead};
2020

21-
use snarkvm_utilities::bytes::unchecked_deserialize;
21+
use snarkvm_utilities::{LoggableError, bytes::unchecked_deserialize};
2222

2323
use core::{fmt, fmt::Debug, hash::Hash, mem};
2424
use indexmap::IndexMap;
2525
use smallvec::SmallVec;
2626
use std::{borrow::Cow, ops::Deref, path::Path, sync::atomic::Ordering};
27-
use tracing::error;
2827

2928
#[derive(Clone)]
3029
pub struct DataMap<K: Serialize + DeserializeOwned, V: Serialize + DeserializeOwned>(
@@ -456,15 +455,10 @@ impl<
456455

457456
// Deserialize the key and value.
458457
let key = unchecked_deserialize(&key[PREFIX_LEN..])
459-
.map_err(|e| {
460-
error!("RocksDB Iter deserialize(key) error: {e}");
461-
})
462-
.ok()?;
463-
let value = unchecked_deserialize(value)
464-
.map_err(|e| {
465-
error!("RocksDB Iter deserialize(value) error: {e}");
466-
})
458+
.map_err(|err| err.log_error("RocksDB Iter deserialize(key) error"))
467459
.ok()?;
460+
let value =
461+
unchecked_deserialize(value).map_err(|err| err.log_error("RocksDB Iter deserialize(value) error")).ok()?;
468462

469463
self.db_iter.next();
470464

@@ -494,9 +488,7 @@ impl<'a, K: 'a + Clone + Debug + PartialEq + Eq + Hash + Serialize + Deserialize
494488

495489
// Deserialize the key.
496490
let key = unchecked_deserialize(&self.db_iter.key()?[PREFIX_LEN..])
497-
.map_err(|e| {
498-
error!("RocksDB Keys deserialize(key) error: {e}");
499-
})
491+
.map_err(|err| err.log_error("RocksDB Keys deserialize(key) error"))
500492
.ok()?;
501493

502494
self.db_iter.next();
@@ -527,9 +519,7 @@ impl<'a, V: 'a + Clone + Serialize + DeserializeOwned> Iterator for Values<'a, V
527519

528520
// Deserialize the value.
529521
let value = unchecked_deserialize(self.db_iter.value()?)
530-
.map_err(|e| {
531-
error!("RocksDB Values deserialize(value) error: {e}");
532-
})
522+
.map_err(|err| err.log_error("RocksDB Values deserialize(value) error"))
533523
.ok()?;
534524

535525
self.db_iter.next();

ledger/store/src/helpers/rocksdb/internal/nested_map.rs

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
use super::*;
1919
use crate::helpers::{NestedMap, NestedMapRead};
2020
use console::prelude::{FromBytes, anyhow, cfg_into_iter};
21-
use snarkvm_utilities::bytes::unchecked_deserialize;
21+
use snarkvm_utilities::{LoggableError, bytes::unchecked_deserialize};
2222

2323
use anyhow::Context;
2424
use core::{fmt, fmt::Debug, hash::Hash, mem};
2525
use std::{borrow::Cow, sync::atomic::Ordering};
26-
use tracing::error;
2726

2827
#[cfg(not(feature = "serial"))]
2928
use rayon::iter::{IntoParallelIterator, ParallelIterator};
@@ -648,28 +647,19 @@ impl<
648647
let (map_key, value) = self.db_iter.item()?;
649648

650649
// Extract the bytes belonging to the map and the key.
651-
let (entry_map, entry_key) = get_map_and_key(map_key)
652-
.map_err(|e| {
653-
error!("RocksDB NestedIter get_map_and_key error: {e}");
654-
})
655-
.ok()?;
650+
let (entry_map, entry_key) =
651+
get_map_and_key(map_key).map_err(|err| err.log_error("RocksDB NestedIter get_map_and_key error")).ok()?;
656652

657653
// Deserialize the map, key, and value.
658654
let map = unchecked_deserialize(entry_map)
659-
.map_err(|e| {
660-
error!("RocksDB NestedIter deserialize(map) error: {e}");
661-
})
655+
.map_err(|err| err.log_error("RocksDB NestedIter deserialize(map) error"))
662656
.ok()?;
663657
let key = unchecked_deserialize(entry_key)
664-
.map_err(|e| {
665-
error!("RocksDB NestedIter deserialize(key) error: {e}");
666-
})
658+
.map_err(|err| err.log_error("RocksDB NestedIter deserialize(key) error"))
667659
.ok()?;
668660
// Deserialize the value.
669661
let value = unchecked_deserialize(value)
670-
.map_err(|e| {
671-
error!("RocksDB NestedIter deserialize(value) error: {e}");
672-
})
662+
.map_err(|err| err.log_error("RocksDB NestedIter deserialize(value) error"))
673663
.ok()?;
674664

675665
self.db_iter.next();
@@ -715,22 +705,15 @@ impl<
715705
let map_key = self.db_iter.key()?;
716706

717707
// Extract the bytes belonging to the map and the key.
718-
let (entry_map, entry_key) = get_map_and_key(map_key)
719-
.map_err(|e| {
720-
error!("RocksDB NestedKeys get_map_and_key error: {e}");
721-
})
722-
.ok()?;
708+
let (entry_map, entry_key) =
709+
get_map_and_key(map_key).map_err(|err| err.log_error("RocksDB NestedKeys get_map_and_key error")).ok()?;
723710

724711
// Deserialize the map and key.
725712
let map = unchecked_deserialize(entry_map)
726-
.map_err(|e| {
727-
error!("RocksDB NestedKeys deserialize(map) error: {e}");
728-
})
713+
.map_err(|err| err.log_error("RocksDB NestedKeys deserialize(map) error"))
729714
.ok()?;
730715
let key = unchecked_deserialize(entry_key)
731-
.map_err(|e| {
732-
error!("RocksDB NestedKeys deserialize(key) error: {e}");
733-
})
716+
.map_err(|err| err.log_error("RocksDB NestedKeys deserialize(key) error"))
734717
.ok()?;
735718

736719
self.db_iter.next();
@@ -763,8 +746,8 @@ impl<'a, V: 'a + Clone + Serialize + DeserializeOwned> Iterator for NestedValues
763746

764747
// Deserialize the value.
765748
let value = unchecked_deserialize(value)
766-
.map_err(|e| {
767-
error!("RocksDB NestedValues deserialize(value) error: {e}");
749+
.map_err(|err| {
750+
err.log_error("RocksDB NestedValues deserialize(value) error");
768751
})
769752
.ok()?;
770753

utilities/src/errors.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,20 @@ macro_rules! ensure_equals {
8888
};
8989
}
9090

91-
/// A trait that allows turning an Error into a log message.
91+
/// A trait that allows printing the entire error chain of an Error (it is implemented for [`anyhow::Error`]) along with a custom context message.
92+
///
93+
/// This reduces the need for custom error printing code and ensures consistency across log messages.
94+
///
95+
/// # Example
96+
/// The following code will log `user-facing message - low level error` as an error.
97+
///
98+
/// ```rust
99+
/// use anyhow::anyhow;
100+
/// use snarkvm_utilities::LoggableError;
101+
///
102+
/// let my_error = anyhow!("low level problem");
103+
/// my_error.log_error("user-facing message");
104+
/// ```
92105
pub trait LoggableError {
93106
/// Log the error with the given context and log level `ERROR`.
94107
fn log_error<S: Send + Sync + Display + 'static>(self, context: S);
@@ -128,7 +141,7 @@ impl<E: Into<anyhow::Error>> LoggableError for E {
128141
pub trait PrettyUnwrap {
129142
type Inner;
130143

131-
/// Behaves like [`std::Result::unwrap`] but will print the entire anyhow chain to stderr.
144+
/// Behaves like [`std::result::Result::unwrap`] but will print the entire anyhow chain to stderr.
132145
fn pretty_unwrap(self) -> Self::Inner;
133146
}
134147

utilities/src/lib.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,12 @@ mod print;
5050
pub mod rand;
5151
pub use self::rand::*;
5252

53+
/// Helpers for data (de-)serialization.
5354
pub mod serialize;
5455
pub use serialize::*;
5556

56-
mod errors;
57+
/// Helpers for error handling.
58+
pub mod errors;
5759
pub use errors::*;
5860

5961
/// Use old name for backward-compatibility.

0 commit comments

Comments
 (0)