Skip to content

Commit f9cc093

Browse files
committed
Use Vec::with_capacity where applicable, and pass owned PendingLogEntry to avoid clone
1 parent 3a0f655 commit f9cc093

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

crates/ct_worker/src/ctlog.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,12 @@ impl PoolState {
104104
}
105105
}
106106
// Add a new entry to the pool.
107-
fn add(&mut self, key: LookupKey, entry: &PendingLogEntry) -> AddLeafResult {
107+
fn add(&mut self, key: LookupKey, entry: PendingLogEntry) -> AddLeafResult {
108108
if self.pending_entries.len() >= MAX_POOL_SIZE {
109109
return AddLeafResult::RateLimited;
110110
}
111111
let (tx, rx) = channel((0, 0));
112-
self.pending_entries.push((entry.clone(), tx));
112+
self.pending_entries.push((entry, tx));
113113
self.pending.insert(key, rx.clone());
114114

115115
AddLeafResult::Pending {
@@ -387,7 +387,7 @@ pub(crate) enum PendingSource {
387387
pub(crate) fn add_leaf_to_pool(
388388
state: &mut PoolState,
389389
cache: &impl CacheRead,
390-
entry: &PendingLogEntry,
390+
entry: PendingLogEntry,
391391
) -> AddLeafResult {
392392
let hash = entry.lookup_key();
393393

@@ -545,8 +545,8 @@ async fn sequence_entries(
545545
}
546546
let mut overlay = HashMap::new();
547547
let mut n = old_size;
548-
let mut sequenced_entries: Vec<LogEntry> = Vec::new();
549-
let mut sequenced_metadata = Vec::new();
548+
let mut sequenced_entries: Vec<LogEntry> = Vec::with_capacity(entries.len());
549+
let mut sequenced_metadata = Vec::with_capacity(entries.len());
550550

551551
for (entry, sender) in entries {
552552
let sequenced_entry = LogEntry {
@@ -916,7 +916,7 @@ async fn read_and_verify_tiles(
916916
}
917917

918918
// Fetch all the tile data.
919-
let mut data = Vec::new();
919+
let mut data = Vec::with_capacity(tiles.len());
920920
for tile in &tiles {
921921
let result = object
922922
.fetch(&tile.path())
@@ -1123,7 +1123,7 @@ mod tests {
11231123
certificate,
11241124
..Default::default()
11251125
};
1126-
add_leaf_to_pool(&mut log.pool_state, &log.cache, &leaf);
1126+
add_leaf_to_pool(&mut log.pool_state, &log.cache, leaf);
11271127
}
11281128
log.sequence().unwrap();
11291129
}
@@ -1913,7 +1913,7 @@ mod tests {
19131913

19141914
block_on(upload_issuers(&self.object, issuers, &self.config.name)).unwrap();
19151915

1916-
add_leaf_to_pool(&mut self.pool_state, &self.cache, &leaf)
1916+
add_leaf_to_pool(&mut self.pool_state, &self.cache, leaf)
19171917
}
19181918

19191919
fn check(&self, size: u64) -> u64 {
@@ -2033,7 +2033,7 @@ mod tests {
20332033
let (tiles_with_bytes, index_tile_order) =
20342034
block_on(read_and_verify_tiles(object, tree_size, tree_hash, indexes))?;
20352035

2036-
let mut hashes = Vec::new();
2036+
let mut hashes = Vec::with_capacity(indexes.len());
20372037
for (i, &x) in indexes.iter().enumerate() {
20382038
let j = index_tile_order[i];
20392039
let h = tiles_with_bytes[j]

crates/ct_worker/src/sequencer_do.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ impl DurableObject for Sequencer {
8282
"/add_batch" => {
8383
endpoint = "add_batch";
8484
let pending_entries: Vec<PendingLogEntry> = req.json().await?;
85-
self.add_batch(&pending_entries).await
85+
self.add_batch(pending_entries).await
8686
}
8787
_ => {
8888
endpoint = "unknown";
@@ -220,15 +220,17 @@ impl Sequencer {
220220
// Add a batch of entries, returning a Response with metadata for
221221
// successfully sequenced entries. Entries that fail to be added (e.g., due to rate limiting)
222222
// are omitted.
223-
async fn add_batch(&mut self, pending_entries: &[PendingLogEntry]) -> Result<Response> {
223+
async fn add_batch(&mut self, pending_entries: Vec<PendingLogEntry>) -> Result<Response> {
224224
// Safe to unwrap config here as the log must be initialized.
225225
let mut futures = Vec::with_capacity(pending_entries.len());
226+
let mut lookup_keys = Vec::with_capacity(pending_entries.len());
226227
for pending_entry in pending_entries {
227228
let typ = if pending_entry.is_precert {
228229
"add-pre-chain"
229230
} else {
230231
"add-chain"
231232
};
233+
lookup_keys.push(pending_entry.lookup_key());
232234

233235
let add_leaf_result = ctlog::add_leaf_to_pool(
234236
&mut self.pool_state,
@@ -243,14 +245,14 @@ impl Sequencer {
243245

244246
futures.push(add_leaf_result.resolve());
245247
}
246-
let cache_values = join_all(futures).await;
248+
let entries_metadata = join_all(futures).await;
247249

248250
// Zip the cache keys with the cache values, filtering out entries that
249251
// were not sequenced (e.g., due to rate limiting).
250-
let result = pending_entries
252+
let result = lookup_keys
251253
.iter()
252-
.zip(cache_values.iter())
253-
.filter_map(|(entry, value)| value.as_ref().map(|v| (entry.lookup_key(), v)))
254+
.zip(entries_metadata.iter())
255+
.filter_map(|(key, value_opt)| value_opt.as_ref().map(|metadata| (key, metadata)))
254256
.collect::<Vec<_>>();
255257

256258
Response::from_json(&result)

0 commit comments

Comments
 (0)