diff --git a/core/Cargo.toml b/core/Cargo.toml index 63604b019e19bf..1d2f79b90af299 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -84,6 +84,9 @@ rustc_version = "0.4" [[bench]] name = "banking_stage" +[[bench]] +name = "blockstore" + [[bench]] name = "cluster_info" diff --git a/ledger/benches/blockstore.rs b/core/benches/blockstore.rs similarity index 100% rename from ledger/benches/blockstore.rs rename to core/benches/blockstore.rs diff --git a/ledger/Cargo.toml b/ledger/Cargo.toml index 05fef1404f7046..8c26165bde7fb1 100644 --- a/ledger/Cargo.toml +++ b/ledger/Cargo.toml @@ -80,8 +80,5 @@ name = "solana_ledger" [[bench]] name = "sigverify_shreds" -[[bench]] -name = "blockstore" - [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"] diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index d60fcda6baa679..f385c1b65b287c 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -2396,35 +2396,6 @@ impl Blockstore { .map(|signatures| signatures.iter().map(|(_, signature)| *signature).collect()) } - fn get_sorted_block_signatures(&self, slot: Slot) -> Result> { - let block = self.get_complete_block(slot, false).map_err(|err| { - BlockstoreError::Io(IoError::new( - ErrorKind::Other, - format!("Unable to get block: {}", err), - )) - })?; - - // Load all signatures for the block - let mut slot_signatures: Vec<_> = block - .transactions - .into_iter() - .filter_map(|transaction_with_meta| { - transaction_with_meta - .transaction - .signatures - .into_iter() - .next() - }) - .collect(); - - // Reverse sort signatures as a way to entire a stable ordering within a slot, as - // the AddressSignatures column is ordered by signatures within a slot, - // not by block ordering - slot_signatures.sort_unstable_by(|a, b| b.cmp(a)); - - Ok(slot_signatures) - } - pub fn get_confirmed_signatures_for_address2( &self, address: Pubkey, @@ -2458,7 +2429,32 @@ impl Blockstore { match transaction_status { None => return Ok(vec![]), Some((slot, _)) => { - let mut slot_signatures = self.get_sorted_block_signatures(slot)?; + let block = self.get_complete_block(slot, false).map_err(|err| { + BlockstoreError::Io(IoError::new( + ErrorKind::Other, + format!("Unable to get block: {}", err), + )) + })?; + + // Load all signatures for the block + let mut slot_signatures: Vec<_> = block + .transactions + .into_iter() + .filter_map(|transaction_with_meta| { + transaction_with_meta + .transaction + .signatures + .into_iter() + .next() + }) + .collect(); + + // Sort signatures as a way to entire a stable ordering within a slot, as + // the AddressSignatures column is ordered by signatures within a slot, + // not by block ordering + slot_signatures.sort(); + slot_signatures.reverse(); + if let Some(pos) = slot_signatures.iter().position(|&x| x == before) { slot_signatures.truncate(pos + 1); } @@ -2484,7 +2480,32 @@ impl Blockstore { match transaction_status { None => (0, HashSet::new()), Some((slot, _)) => { - let mut slot_signatures = self.get_sorted_block_signatures(slot)?; + let block = self.get_complete_block(slot, false).map_err(|err| { + BlockstoreError::Io(IoError::new( + ErrorKind::Other, + format!("Unable to get block: {}", err), + )) + })?; + + // Load all signatures for the block + let mut slot_signatures: Vec<_> = block + .transactions + .into_iter() + .filter_map(|transaction_with_meta| { + transaction_with_meta + .transaction + .signatures + .into_iter() + .next() + }) + .collect(); + + // Sort signatures as a way to entire a stable ordering within a slot, as + // the AddressSignatures column is ordered by signatures within a slot, + // not by block ordering + slot_signatures.sort(); + slot_signatures.reverse(); + if let Some(pos) = slot_signatures.iter().position(|&x| x == until) { slot_signatures = slot_signatures.split_off(pos); }