- pub fn set_node_state(&self, addr: SocketAddr, state: AddressState, services: u64) -> bool {
+ pub fn set_node_state(&self, addr: SocketAddr, state: AddressState, services: u64) -> AddressState {
let mut nodes_lock = self.nodes.write().unwrap();
let nodes = nodes_lock.borrow_mut();
let state_ref = nodes.nodes_to_state.get_mut(&addr).unwrap();
let mut nodes_lock = self.nodes.write().unwrap();
let nodes = nodes_lock.borrow_mut();
let state_ref = nodes.nodes_to_state.get_mut(&addr).unwrap();
let now = Instant::now();
if (state_ref.state == AddressState::Good || state_ref.state == AddressState::WasGood)
&& state != AddressState::Good
let now = Instant::now();
if (state_ref.state == AddressState::Good || state_ref.state == AddressState::WasGood)
&& state != AddressState::Good
- let mut res = Vec::with_capacity(600);
+ let results = 30 * self.get_u64(U64Setting::ConnsPerSec) as usize;
+ let per_bucket_results = results / (AddressState::get_count() as usize);
+ let mut res = Vec::with_capacity(results);
state_nodes.binary_search_by(|a| a.0.cmp(&cmp_time)).unwrap_or_else(|idx| idx));
let mut new_nodes = state_nodes.split_off(split_point);
mem::swap(&mut new_nodes, state_nodes);
state_nodes.binary_search_by(|a| a.0.cmp(&cmp_time)).unwrap_or_else(|idx| idx));
let mut new_nodes = state_nodes.split_off(split_point);
mem::swap(&mut new_nodes, state_nodes);