Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit 0c385de

Browse files
authored
[journaldb]: cleanup (#11534)
I was annoyed by the manual `clone` implementations which this removes and I fixed a few of clippy warnings.
1 parent 62b73a6 commit 0c385de

File tree

4 files changed

+25
-45
lines changed

4 files changed

+25
-45
lines changed

util/journaldb/src/archivedb.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ use crate::{
4242
/// write operations out to disk. Unlike `OverlayDB`, `remove()` operations do not take effect
4343
/// immediately. As this is an "archive" database, nothing is ever removed. This means
4444
/// that the states of any block the node has ever processed will be accessible.
45+
#[derive(Clone)]
4546
pub struct ArchiveDB {
4647
overlay: super::MemoryDB,
4748
backing: Arc<dyn KeyValueDB>,
@@ -98,12 +99,7 @@ impl HashDB<KeccakHasher, DBValue> for ArchiveDB {
9899

99100
impl JournalDB for ArchiveDB {
100101
fn boxed_clone(&self) -> Box<dyn JournalDB> {
101-
Box::new(ArchiveDB {
102-
overlay: self.overlay.clone(),
103-
backing: self.backing.clone(),
104-
latest_era: self.latest_era,
105-
column: self.column.clone(),
106-
})
102+
Box::new(self.clone())
107103
}
108104

109105
fn mem_used(&self) -> usize {

util/journaldb/src/earlymergedb.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ enum RemoveFrom {
106106
/// ```
107107
///
108108
/// TODO: `store_reclaim_period`
109+
#[derive(Clone)]
109110
pub struct EarlyMergeDB {
110111
overlay: super::MemoryDB,
111112
backing: Arc<dyn KeyValueDB>,
@@ -167,7 +168,7 @@ impl EarlyMergeDB {
167168
}
168169
entry.insert(RefInfo {
169170
queue_refs: 1,
170-
in_archive: in_archive,
171+
in_archive,
171172
});
172173
},
173174
}
@@ -318,13 +319,7 @@ impl HashDB<KeccakHasher, DBValue> for EarlyMergeDB {
318319

319320
impl JournalDB for EarlyMergeDB {
320321
fn boxed_clone(&self) -> Box<dyn JournalDB> {
321-
Box::new(EarlyMergeDB {
322-
overlay: self.overlay.clone(),
323-
backing: self.backing.clone(),
324-
refs: self.refs.clone(),
325-
latest_era: self.latest_era.clone(),
326-
column: self.column.clone(),
327-
})
322+
Box::new(self.clone())
328323
}
329324

330325
fn is_empty(&self) -> bool {
@@ -376,7 +371,7 @@ impl JournalDB for EarlyMergeDB {
376371

377372
let removes: Vec<H256> = drained
378373
.iter()
379-
.filter_map(|(k, &(_, c))| if c < 0 {Some(k.clone())} else {None})
374+
.filter_map(|(k, &(_, c))| if c < 0 { Some(*k) } else { None })
380375
.collect();
381376
let inserts: Vec<(H256, _)> = drained
382377
.into_iter()

util/journaldb/src/overlayrecentdb.rs

+15-20
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ use crate::{
7070
/// the removed key is not present in the history overlay.
7171
/// 7. Delete ancient record from memory and disk.
7272
73+
#[derive(Clone)]
7374
pub struct OverlayRecentDB {
7475
transaction_overlay: super::MemoryDB,
7576
backing: Arc<dyn KeyValueDB>,
@@ -140,17 +141,6 @@ struct JournalEntry {
140141
deletions: Vec<H256>,
141142
}
142143

143-
impl Clone for OverlayRecentDB {
144-
fn clone(&self) -> OverlayRecentDB {
145-
OverlayRecentDB {
146-
transaction_overlay: self.transaction_overlay.clone(),
147-
backing: self.backing.clone(),
148-
journal_overlay: self.journal_overlay.clone(),
149-
column: self.column.clone(),
150-
}
151-
}
152-
}
153-
154144
impl OverlayRecentDB {
155145
/// Create a new instance.
156146
pub fn new(backing: Arc<dyn KeyValueDB>, col: u32) -> OverlayRecentDB {
@@ -197,7 +187,11 @@ impl OverlayRecentDB {
197187
};
198188
while let Some(rlp_data) = db.get(col, &encode(&db_key)).expect("Low-level database error.") {
199189
trace!("read_overlay: era={}, index={}", era, db_key.index);
200-
let value = decode::<DatabaseValue>(&rlp_data).expect(&format!("read_overlay: Error decoding DatabaseValue era={}, index{}", era, db_key.index));
190+
let value = decode::<DatabaseValue>(&rlp_data).unwrap_or_else(|e| {
191+
panic!("read_overlay: Error decoding DatabaseValue era={}, index={}, error={}",
192+
era, db_key.index, e
193+
)
194+
});
201195
count += value.inserts.len();
202196
let mut inserted_keys = Vec::new();
203197
for (k, v) in value.inserts {
@@ -286,7 +280,7 @@ impl JournalDB for OverlayRecentDB {
286280
journal_overlay
287281
.backing_overlay
288282
.get(&key, EMPTY_PREFIX)
289-
.or_else(|| journal_overlay.pending_overlay.get(&key).map(|d| d.clone()))
283+
.or_else(|| journal_overlay.pending_overlay.get(&key).cloned())
290284
};
291285

292286
maybe_state_data.or_else(|| {
@@ -306,8 +300,8 @@ impl JournalDB for OverlayRecentDB {
306300
journal_overlay.pending_overlay.clear();
307301

308302
let mut tx = self.transaction_overlay.drain();
309-
let inserted_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c > 0 { Some(k.clone()) } else { None }).collect();
310-
let removed_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c < 0 { Some(k.clone()) } else { None }).collect();
303+
let inserted_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c > 0 { Some(*k) } else { None }).collect();
304+
let removed_keys: Vec<_> = tx.iter().filter_map(|(k, &(_, c))| if c < 0 { Some(*k) } else { None }).collect();
311305
let ops = inserted_keys.len() + removed_keys.len();
312306

313307
// Increase counter for each inserted key no matter if the block is canonical or not.
@@ -349,7 +343,10 @@ impl JournalDB for OverlayRecentDB {
349343
journal_overlay.earliest_era = Some(now);
350344
}
351345

352-
journal_overlay.journal.entry(now).or_insert_with(Vec::new).push(JournalEntry { id: id.clone(), insertions: inserted_keys, deletions: removed_keys });
346+
journal_overlay.journal
347+
.entry(now)
348+
.or_insert_with(Vec::new)
349+
.push(JournalEntry { id: *id, insertions: inserted_keys, deletions: removed_keys });
353350
Ok(ops as u32)
354351
}
355352

@@ -365,8 +362,7 @@ impl JournalDB for OverlayRecentDB {
365362
let mut canon_insertions: Vec<(H256, DBValue)> = Vec::new();
366363
let mut canon_deletions: Vec<H256> = Vec::new();
367364
let mut overlay_deletions: Vec<H256> = Vec::new();
368-
let mut index = 0usize;
369-
for mut journal in records.drain(..) {
365+
for (index, mut journal) in records.drain(..).enumerate() {
370366
//delete the record from the db
371367
let db_key = DatabaseKey {
372368
era: end_era,
@@ -379,15 +375,14 @@ impl JournalDB for OverlayRecentDB {
379375
for h in &journal.insertions {
380376
if let Some((d, rc)) = journal_overlay.backing_overlay.raw(&to_short_key(h), EMPTY_PREFIX) {
381377
if rc > 0 {
382-
canon_insertions.push((h.clone(), d.clone())); //TODO: optimize this to avoid data copy
378+
canon_insertions.push((*h, d.clone())); //TODO: optimize this to avoid data copy
383379
}
384380
}
385381
}
386382
canon_deletions = journal.deletions;
387383
}
388384
overlay_deletions.append(&mut journal.insertions);
389385
}
390-
index += 1;
391386
}
392387

393388
ops += canon_insertions.len();

util/journaldb/src/refcounteddb.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ use crate::{
5757
/// we remove all of its removes assuming it is canonical and all
5858
/// of its inserts otherwise.
5959
// TODO: store last_era, reclaim_period.
60+
#[derive(Clone)]
6061
pub struct RefCountedDB {
6162
forward: OverlayDB,
6263
backing: Arc<dyn KeyValueDB>,
@@ -88,20 +89,13 @@ impl HashDB<KeccakHasher, DBValue> for RefCountedDB {
8889
fn get(&self, key: &H256, prefix: Prefix) -> Option<DBValue> { self.forward.get(key, prefix) }
8990
fn contains(&self, key: &H256, prefix: Prefix) -> bool { self.forward.contains(key, prefix) }
9091
fn insert(&mut self, prefix: Prefix, value: &[u8]) -> H256 { let r = self.forward.insert(prefix, value); self.inserts.push(r.clone()); r }
91-
fn emplace(&mut self, key: H256, prefix: Prefix, value: DBValue) { self.inserts.push(key.clone()); self.forward.emplace(key, prefix, value); }
92-
fn remove(&mut self, key: &H256, _prefix: Prefix) { self.removes.push(key.clone()); }
92+
fn emplace(&mut self, key: H256, prefix: Prefix, value: DBValue) { self.inserts.push(key); self.forward.emplace(key, prefix, value); }
93+
fn remove(&mut self, key: &H256, _prefix: Prefix) { self.removes.push(*key); }
9394
}
9495

9596
impl JournalDB for RefCountedDB {
9697
fn boxed_clone(&self) -> Box<dyn JournalDB> {
97-
Box::new(RefCountedDB {
98-
forward: self.forward.clone(),
99-
backing: self.backing.clone(),
100-
latest_era: self.latest_era,
101-
inserts: self.inserts.clone(),
102-
removes: self.removes.clone(),
103-
column: self.column.clone(),
104-
})
98+
Box::new(self.clone())
10599
}
106100

107101
fn mem_used(&self) -> usize {

0 commit comments

Comments
 (0)