From 109bfc3e7a9b1947a4465dfe4b108f8bc585dc92 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 28 Apr 2020 11:36:17 -0700 Subject: [PATCH] Use Blockstore lowest_slot to start root iterator (#9738) (#9768) automerge --- core/src/rpc.rs | 9 +++++---- ledger/src/blockstore.rs | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/rpc.rs b/core/src/rpc.rs index c84e163ef4..b05ba706a9 100644 --- a/core/src/rpc.rs +++ b/core/src/rpc.rs @@ -36,6 +36,7 @@ use solana_transaction_status::{ }; use solana_vote_program::vote_state::{VoteState, MAX_LOCKOUT_HISTORY}; use std::{ + cmp::max, collections::HashMap, net::{SocketAddr, UdpSocket}, str::FromStr, @@ -383,7 +384,7 @@ impl JsonRpcRequestProcessor { } Ok(self .blockstore - .rooted_slot_iterator(start_slot) + .rooted_slot_iterator(max(start_slot, self.blockstore.lowest_slot())) .map_err(|_| Error::internal_error())? .filter(|&slot| slot <= end_slot) .collect()) @@ -2654,7 +2655,7 @@ pub mod tests { let result: Value = serde_json::from_str(&res.expect("actual response")) .expect("actual response deserialization"); let confirmed_blocks: Vec = serde_json::from_value(result["result"].clone()).unwrap(); - assert_eq!(confirmed_blocks, roots); + assert_eq!(confirmed_blocks, roots[1..].to_vec()); let req = format!(r#"{{"jsonrpc":"2.0","id":1,"method":"getConfirmedBlocks","params":[2]}}"#); @@ -2670,7 +2671,7 @@ pub mod tests { let result: Value = serde_json::from_str(&res.expect("actual response")) .expect("actual response deserialization"); let confirmed_blocks: Vec = serde_json::from_value(result["result"].clone()).unwrap(); - assert_eq!(confirmed_blocks, vec![0, 1, 3, 4]); + assert_eq!(confirmed_blocks, vec![1, 3, 4]); let req = format!(r#"{{"jsonrpc":"2.0","id":1,"method":"getConfirmedBlocks","params":[0, 7]}}"#); @@ -2678,7 +2679,7 @@ pub mod tests { let result: Value = serde_json::from_str(&res.expect("actual response")) .expect("actual response deserialization"); let confirmed_blocks: Vec = serde_json::from_value(result["result"].clone()).unwrap(); - assert_eq!(confirmed_blocks, vec![0, 1, 3, 4]); + assert_eq!(confirmed_blocks, vec![1, 3, 4]); let req = format!(r#"{{"jsonrpc":"2.0","id":1,"method":"getConfirmedBlocks","params":[9, 11]}}"#); diff --git a/ledger/src/blockstore.rs b/ledger/src/blockstore.rs index a638f620e6..00789c937b 100644 --- a/ledger/src/blockstore.rs +++ b/ledger/src/blockstore.rs @@ -1502,7 +1502,7 @@ impl Blockstore { } pub fn get_first_available_block(&self) -> Result { - let mut root_iterator = self.rooted_slot_iterator(0)?; + let mut root_iterator = self.rooted_slot_iterator(self.lowest_slot())?; Ok(root_iterator.next().unwrap_or_default()) }