Skip to content

Commit dc358d1

Browse files
Optimise HDiffBuffer by using Arc instead of Vec
1 parent a0a6b93 commit dc358d1

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

beacon_node/store/src/hdiff.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use std::cmp::Ordering;
99
use std::io::{Read, Write};
1010
use std::ops::RangeInclusive;
1111
use std::str::FromStr;
12-
use std::sync::LazyLock;
12+
use std::sync::{Arc, LazyLock};
1313
use superstruct::superstruct;
1414
use types::historical_summary::HistoricalSummary;
1515
use types::{BeaconState, ChainSpec, Epoch, EthSpec, Hash256, List, Slot, Validator};
@@ -100,7 +100,7 @@ pub struct HDiffBuffer {
100100
state: Vec<u8>,
101101
balances: Vec<u64>,
102102
inactivity_scores: Vec<u64>,
103-
validators: Vec<Validator>,
103+
validators: Arc<[Validator]>,
104104
historical_roots: Vec<Hash256>,
105105
historical_summaries: Vec<HistoricalSummary>,
106106
}
@@ -184,6 +184,7 @@ impl HDiffBuffer {
184184
vec![]
185185
};
186186
let validators = std::mem::take(beacon_state.validators_mut()).to_vec();
187+
let validators = Arc::from(validators);
187188
let historical_roots = std::mem::take(beacon_state.historical_roots_mut()).to_vec();
188189
let historical_summaries =
189190
if let Ok(historical_summaries) = beacon_state.historical_summaries_mut() {
@@ -282,8 +283,11 @@ impl HDiff {
282283
self.balances_diff().apply(&mut source.balances, config)?;
283284
self.inactivity_scores_diff()
284285
.apply(&mut source.inactivity_scores, config)?;
285-
self.validators_diff()
286-
.apply(&mut source.validators, config)?;
286+
287+
let mut validators_vec = source.validators.to_vec();
288+
self.validators_diff().apply(&mut validators_vec, config)?;
289+
source.validators = Arc::from(validators_vec);
290+
287291
self.historical_roots().apply(&mut source.historical_roots);
288292
self.historical_summaries()
289293
.apply(&mut source.historical_summaries);
@@ -972,15 +976,15 @@ mod tests {
972976
state: vec![0, 1, 2, 3, 3, 2, 1, 0],
973977
balances: pre_balances,
974978
inactivity_scores: pre_inactivity_scores,
975-
validators: pre_validators,
979+
validators: Arc::from(pre_validators),
976980
historical_roots: pre_historical_roots,
977981
historical_summaries: pre_historical_summaries,
978982
};
979983
let post_buffer = HDiffBuffer {
980984
state: vec![0, 1, 3, 2, 2, 3, 1, 1],
981985
balances: post_balances,
982986
inactivity_scores: post_inactivity_scores,
983-
validators: post_validators,
987+
validators: Arc::from(post_validators),
984988
historical_roots: post_historical_roots,
985989
historical_summaries: post_historical_summaries,
986990
};

0 commit comments

Comments
 (0)