feat: Improve verify grovedb + better debug statements #161
Triggered via pull request
September 25, 2023 18:57
Status
Success
Total duration
13m 48s
Artifacts
–
Annotations
31 warnings
very complex type used. Consider factoring parts into `type` definitions:
grovedb/src/lib.rs#L902
warning: very complex type used. Consider factoring parts into `type` definitions
--> grovedb/src/lib.rs:902:10
|
902 | ) -> Result<HashMap<Vec<Vec<u8>>, (CryptoHash, CryptoHash, CryptoHash)>, Error> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
|
very complex type used. Consider factoring parts into `type` definitions:
grovedb/src/lib.rs#L840
warning: very complex type used. Consider factoring parts into `type` definitions
--> grovedb/src/lib.rs:840:10
|
840 | ) -> Result<HashMap<Vec<Vec<u8>>, (CryptoHash, CryptoHash, CryptoHash)>, Error> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
|
very complex type used. Consider factoring parts into `type` definitions:
grovedb/src/lib.rs#L814
warning: very complex type used. Consider factoring parts into `type` definitions
--> grovedb/src/lib.rs:814:10
|
814 | ) -> Result<HashMap<Vec<Vec<u8>>, (CryptoHash, CryptoHash, CryptoHash)>, Error> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#type_complexity
= note: `#[warn(clippy::type_complexity)]` on by default
|
this function has too many arguments (9/7):
grovedb/src/operations/proof/generate.rs#L487
warning: this function has too many arguments (9/7)
--> grovedb/src/operations/proof/generate.rs:487:5
|
487 | / fn generate_and_store_merk_proof<'a, S, B>(
488 | | &self,
489 | | path: &SubtreePath<B>,
490 | | subtree: &'a Merk<S>,
... |
496 | | key: &[u8],
497 | | ) -> CostResult<(Option<u16>, Option<u16>), Error>
| |______________________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments
|
this function has too many arguments (8/7):
grovedb/src/operations/proof/generate.rs#L181
warning: this function has too many arguments (8/7)
--> grovedb/src/operations/proof/generate.rs:181:5
|
181 | / fn prove_subqueries(
182 | | &self,
183 | | proofs: &mut Vec<u8>,
184 | | path: Vec<&[u8]>,
... |
189 | | is_verbose: bool,
190 | | ) -> CostResult<(), Error> {
| |______________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments
|
this expression creates a reference which is immediately dereferenced by the compiler:
grovedb/src/operations/delete/mod.rs#L524
warning: this expression creates a reference which is immediately dereferenced by the compiler
--> grovedb/src/operations/delete/mod.rs:524:25
|
524 | &batch,
| ^^^^^^ help: change this to: `batch`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
|
this expression creates a reference which is immediately dereferenced by the compiler:
grovedb/src/operations/delete/mod.rs#L272
warning: this expression creates a reference which is immediately dereferenced by the compiler
--> grovedb/src/operations/delete/mod.rs:272:13
|
272 | &batch,
| ^^^^^^ help: change this to: `batch`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
= note: `#[warn(clippy::needless_borrow)]` on by default
|
casting to the same type is unnecessary (`u16` -> `u16`):
grovedb/src/operations/delete/worst_case.rs#L71
warning: casting to the same type is unnecessary (`u16` -> `u16`)
--> grovedb/src/operations/delete/worst_case.rs:71:46
|
71 | for height in (stop_path_height..(path_len as u16)).rev() {
| ^^^^^^^^^^^^^^^^^ help: try: `path_len`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast
|
casting to the same type is unnecessary (`u16` -> `u16`):
grovedb/src/operations/delete/average_case.rs#L76
warning: casting to the same type is unnecessary (`u16` -> `u16`)
--> grovedb/src/operations/delete/average_case.rs:76:46
|
76 | for height in (stop_path_height..(path_len as u16)).rev() {
| ^^^^^^^^^^^^^^^^^ help: try: `path_len`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_cast
= note: `#[warn(clippy::unnecessary_cast)]` on by default
|
this function has too many arguments (12/7):
grovedb/src/element/query.rs#L535
warning: this function has too many arguments (12/7)
--> grovedb/src/element/query.rs:535:5
|
535 | / fn query_item(
536 | | storage: &RocksDbStorage,
537 | | item: &QueryItem,
538 | | results: &mut Vec<QueryResultElement>,
... |
547 | | add_element_function: fn(PathQueryPushArgs) -> CostResult<(), Error>,
548 | | ) -> CostResult<(), Error> {
| |______________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments
|
this function has too many arguments (8/7):
grovedb/src/element/query.rs#L138
warning: this function has too many arguments (8/7)
--> grovedb/src/element/query.rs:138:5
|
138 | / pub fn get_query_apply_function(
139 | | storage: &RocksDbStorage,
140 | | path: &[&[u8]],
141 | | sized_query: &SizedQuery,
... |
146 | | add_element_function: fn(PathQueryPushArgs) -> CostResult<(), Error>,
147 | | ) -> CostResult<(QueryResultElements, u16), Error> {
| |______________________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments
= note: `#[warn(clippy::too_many_arguments)]` on by default
|
implicitly performing saturating subtraction:
grovedb/src/batch/mod.rs#L1581
warning: implicitly performing saturating subtraction
--> grovedb/src/batch/mod.rs:1581:13
|
1581 | / if current_level > 0 {
1582 | | current_level -= 1;
1583 | | }
| |_____________^ help: try: `current_level = current_level.saturating_sub(1);`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#implicit_saturating_sub
= note: `#[warn(clippy::implicit_saturating_sub)]` on by default
|
iterating on a map's keys:
grovedb/src/batch/estimated_costs/average_case_costs.rs#L235
warning: iterating on a map's keys
--> grovedb/src/batch/estimated_costs/average_case_costs.rs:235:33
|
235 | let paths = self
| _________________________________^
236 | | .paths
237 | | .iter()
238 | | .map(|(k, _v)| k.0.iter().map(|k| hex::encode(k.as_slice())).join("/"))
| |_______________________________________________________________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map
help: try
|
235 ~ let paths = self
236 + .paths.keys().map(|k| k.0.iter().map(|k| hex::encode(k.as_slice())).join("/"))
|
|
iterating on a map's keys:
grovedb/src/batch/estimated_costs/average_case_costs.rs#L213
warning: iterating on a map's keys
--> grovedb/src/batch/estimated_costs/average_case_costs.rs:213:29
|
213 | let paths = self
| _____________________________^
214 | | .paths
215 | | .iter()
216 | | .map(|(k, _v)| k.0.iter().map(|k| hex::encode(k.as_slice())).join("/"))
| |___________________________________________________________________________________________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#iter_kv_map
= note: `#[warn(clippy::iter_kv_map)]` on by default
help: try
|
213 ~ let paths = self
214 + .paths.keys().map(|k| k.0.iter().map(|k| hex::encode(k.as_slice())).join("/"))
|
|
function `read_proof_version` is never used:
grovedb/src/versioning.rs#L12
warning: function `read_proof_version` is never used
--> grovedb/src/versioning.rs:12:8
|
12 | pub fn read_proof_version(mut bytes: &[u8]) -> Result<u32, Error> {
| ^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(dead_code)]` on by default
|
unused variable: `proof_version`:
grovedb/src/operations/proof/verify.rs#L263
warning: unused variable: `proof_version`
--> grovedb/src/operations/proof/verify.rs:263:14
|
263 | let (proof_version, proof) = read_and_consume_proof_version(proof)?;
| ^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_proof_version`
|
= note: `#[warn(unused_variables)]` on by default
|
unused import: `Error::InternalError`:
grovedb/src/versioning.rs#L5
warning: unused import: `Error::InternalError`
--> grovedb/src/versioning.rs:5:20
|
5 | use crate::{Error, Error::InternalError};
| ^^^^^^^^^^^^^^^^^^^^
|
unused import: `VarIntWriter`:
grovedb/src/versioning.rs#L3
warning: unused import: `VarIntWriter`
--> grovedb/src/versioning.rs:3:46
|
3 | use integer_encoding::{VarInt, VarIntReader, VarIntWriter};
| ^^^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
|
this `else { if .. }` block can be collapsed:
grovedb/src/batch/mod.rs#L1806
warning: this `else { if .. }` block can be collapsed
--> grovedb/src/batch/mod.rs:1806:16
|
1806 | } else {
| ________________^
1807 | | if new_merk {
1808 | | Ok(Merk::open_empty(storage, MerkType::BaseMerk, false)).wrap_with_cost(cost)
1809 | | } else {
... |
1813 | | }
1814 | | }
| |_________^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#collapsible_else_if
= note: `#[warn(clippy::collapsible_else_if)]` on by default
help: collapse nested if block
|
1806 ~ } else if new_merk {
1807 + Ok(Merk::open_empty(storage, MerkType::BaseMerk, false)).wrap_with_cost(cost)
1808 + } else {
1809 + Merk::open_base(storage, false)
1810 + .map_err(|_| Error::CorruptedData("cannot open a the root subtree".to_owned()))
1811 + .add_cost(cost)
1812 + }
|
|
this `impl` can be derived:
merk/src/estimated_costs/average_case_costs.rs#L75
warning: this `impl` can be derived
--> merk/src/estimated_costs/average_case_costs.rs:75:1
|
75 | / impl Default for EstimatedSumTrees {
76 | | fn default() -> Self {
77 | | EstimatedSumTrees::NoSumTrees
78 | | }
79 | | }
| |_^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls
= note: `#[warn(clippy::derivable_impls)]` on by default
= help: remove the manual implementation...
help: ...and instead derive it...
|
60 + #[derive(Default)]
61 | pub enum EstimatedSumTrees {
|
help: ...and mark the default variant
|
62 ~ #[default]
63 ~ NoSumTrees,
|
|
unused `std::result::Result` that must be used:
storage/src/rocksdb_storage/storage.rs#L431
warning: unused `std::result::Result` that must be used
--> storage/src/rocksdb_storage/storage.rs:431:13
|
431 | self.db.delete(iter.key().expect("should have key"));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this `Result` may be an `Err` variant, which should be handled
= note: `#[warn(unused_must_use)]` on by default
help: use `let _ = ...` to ignore the resulting value
|
431 | let _ = self.db.delete(iter.key().expect("should have key"));
| +++++++
|
the borrowed expression implements the required traits:
storage/src/rocksdb_storage/storage_context/raw_iterator.rs#L172
warning: the borrowed expression implements the required traits
--> storage/src/rocksdb_storage/storage_context/raw_iterator.rs:172:32
|
172 | self.raw_iterator.seek(&self.prefix);
| ^^^^^^^^^^^^ help: change this to: `self.prefix`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
|
the borrowed expression implements the required traits:
storage/src/rocksdb_storage/storage_context/raw_iterator.rs#L51
warning: the borrowed expression implements the required traits
--> storage/src/rocksdb_storage/storage_context/raw_iterator.rs:51:32
|
51 | self.raw_iterator.seek(&self.prefix);
| ^^^^^^^^^^^^ help: change this to: `self.prefix`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrow
= note: `#[warn(clippy::needless_borrow)]` on by default
|
using `clone` on type `[u8; 32]` which implements the `Copy` trait:
storage/src/rocksdb_storage/storage_context/context_tx.rs#L314
warning: using `clone` on type `[u8; 32]` which implements the `Copy` trait
--> storage/src/rocksdb_storage/storage_context/context_tx.rs:314:21
|
314 | prefix: self.prefix.clone(),
| ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.prefix`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
|
using `clone` on type `[u8; 32]` which implements the `Copy` trait:
storage/src/rocksdb_storage/storage_context/context_tx.rs#L299
warning: using `clone` on type `[u8; 32]` which implements the `Copy` trait
--> storage/src/rocksdb_storage/storage_context/context_tx.rs:299:21
|
299 | prefix: self.prefix.clone(),
| ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.prefix`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
|
using `clone` on type `[u8; 32]` which implements the `Copy` trait:
storage/src/rocksdb_storage/storage_context/context_no_tx.rs#L282
warning: using `clone` on type `[u8; 32]` which implements the `Copy` trait
--> storage/src/rocksdb_storage/storage_context/context_no_tx.rs:282:21
|
282 | prefix: self.prefix.clone(),
| ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.prefix`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
|
using `clone` on type `[u8; 32]` which implements the `Copy` trait:
storage/src/rocksdb_storage/storage_context/context_no_tx.rs#L268
warning: using `clone` on type `[u8; 32]` which implements the `Copy` trait
--> storage/src/rocksdb_storage/storage_context/context_no_tx.rs:268:21
|
268 | prefix: self.prefix.clone(),
| ^^^^^^^^^^^^^^^^^^^ help: try removing the `clone` call: `self.prefix`
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#clone_on_copy
= note: `#[warn(clippy::clone_on_copy)]` on by default
|
unused import: `Error::StorageError`:
storage/src/rocksdb_storage/storage.rs#L56
warning: unused import: `Error::StorageError`
--> storage/src/rocksdb_storage/storage.rs:56:5
|
56 | Error::StorageError,
| ^^^^^^^^^^^^^^^^^^^
|
unused imports: `DB`, `Options`:
storage/src/rocksdb_storage/storage.rs#L43
warning: unused imports: `DB`, `Options`
--> storage/src/rocksdb_storage/storage.rs:43:92
|
43 | checkpoint::Checkpoint, ColumnFamily, ColumnFamilyDescriptor, OptimisticTransactionDB, Options,
| ^^^^^^^
44 | Transaction, WriteBatchWithTransaction, DB, DEFAULT_COLUMN_FAMILY_NAME,
| ^^
|
= note: `#[warn(unused_imports)]` on by default
|
this `impl` can be derived:
costs/src/storage_cost/removal.rs#L62
warning: this `impl` can be derived
--> costs/src/storage_cost/removal.rs:62:1
|
62 | / impl Default for StorageRemovedBytes {
63 | | fn default() -> Self {
64 | | NoStorageRemoval
65 | | }
66 | | }
| |_^
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#derivable_impls
= note: `#[warn(clippy::derivable_impls)]` on by default
= help: remove the manual implementation...
help: ...and instead derive it...
|
53 + #[derive(Default)]
54 | pub enum StorageRemovedBytes {
|
help: ...and mark the default variant
|
55 ~ #[default]
56 ~ NoStorageRemoval,
|
|
Code Coverage
The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/
|