fix(ManageNetwork): replace Range with RangeInclusive (#10209)

* fix(ManageNetwork): replace Range -> RangeIncls

Fixes `TODO: Range should be changed to RangeInclusive once stable (https://github.com/rust-lang/rust/pull/50758)`

* fix(tests)

* fix(grumbles): off-by-one error in debug_asserts

* RangeInclusive::end() is inclusive which means that if start and end is equal the `debug_assert(range.end() >
range.start()` will fail which is shouldn't
This commit is contained in:
Niklas Adolfsson 2019-01-22 09:51:40 +01:00 committed by GitHub
parent c35abe4196
commit 4b11d79829
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 22 deletions

View File

@ -17,7 +17,7 @@
use std::sync::{Arc, mpsc, atomic}; use std::sync::{Arc, mpsc, atomic};
use std::collections::{HashMap, BTreeMap}; use std::collections::{HashMap, BTreeMap};
use std::io; use std::io;
use std::ops::Range; use std::ops::RangeInclusive;
use std::time::Duration; use std::time::Duration;
use bytes::Bytes; use bytes::Bytes;
use devp2p::NetworkService; use devp2p::NetworkService;
@ -615,9 +615,7 @@ pub trait ManageNetwork : Send + Sync {
/// Stop network /// Stop network
fn stop_network(&self); fn stop_network(&self);
/// Returns the minimum and maximum peers. /// Returns the minimum and maximum peers.
/// Note that `range.end` is *exclusive*. fn num_peers_range(&self) -> RangeInclusive<u32>;
// TODO: Range should be changed to RangeInclusive once stable (https://github.com/rust-lang/rust/pull/50758)
fn num_peers_range(&self) -> Range<u32>;
/// Get network context for protocol. /// Get network context for protocol.
fn with_proto_context(&self, proto: ProtocolId, f: &mut FnMut(&NetworkContext)); fn with_proto_context(&self, proto: ProtocolId, f: &mut FnMut(&NetworkContext));
} }
@ -656,7 +654,7 @@ impl ManageNetwork for EthSync {
self.stop(); self.stop();
} }
fn num_peers_range(&self) -> Range<u32> { fn num_peers_range(&self) -> RangeInclusive<u32> {
self.network.num_peers_range() self.network.num_peers_range()
} }
@ -935,7 +933,7 @@ impl ManageNetwork for LightSync {
self.network.stop(); self.network.stop();
} }
fn num_peers_range(&self) -> Range<u32> { fn num_peers_range(&self) -> RangeInclusive<u32> {
self.network.num_peers_range() self.network.num_peers_range()
} }
@ -948,12 +946,12 @@ impl LightSyncProvider for LightSync {
fn peer_numbers(&self) -> PeerNumbers { fn peer_numbers(&self) -> PeerNumbers {
let (connected, active) = self.proto.peer_count(); let (connected, active) = self.proto.peer_count();
let peers_range = self.num_peers_range(); let peers_range = self.num_peers_range();
debug_assert!(peers_range.end > peers_range.start); debug_assert!(peers_range.end() >= peers_range.start());
PeerNumbers { PeerNumbers {
connected: connected, connected: connected,
active: active, active: active,
max: peers_range.end as usize - 1, max: *peers_range.end() as usize,
min: peers_range.start as usize, min: *peers_range.start() as usize,
} }
} }

View File

@ -146,7 +146,7 @@ impl InformantData for FullNodeInformantData {
(Some(sync), Some(net)) => { (Some(sync), Some(net)) => {
let status = sync.status(); let status = sync.status();
let num_peers_range = net.num_peers_range(); let num_peers_range = net.num_peers_range();
debug_assert!(num_peers_range.end > num_peers_range.start); debug_assert!(num_peers_range.end() >= num_peers_range.start());
cache_sizes.insert("sync", status.mem_used); cache_sizes.insert("sync", status.mem_used);
@ -154,7 +154,7 @@ impl InformantData for FullNodeInformantData {
last_imported_block_number: status.last_imported_block_number.unwrap_or(chain_info.best_block_number), last_imported_block_number: status.last_imported_block_number.unwrap_or(chain_info.best_block_number),
last_imported_old_block_number: status.last_imported_old_block_number, last_imported_old_block_number: status.last_imported_old_block_number,
num_peers: status.num_peers, num_peers: status.num_peers,
max_peers: status.current_max_peers(num_peers_range.start, num_peers_range.end - 1), max_peers: status.current_max_peers(*num_peers_range.start(), *num_peers_range.end()),
snapshot_sync: status.is_snapshot_syncing(), snapshot_sync: status.is_snapshot_syncing(),
}) })
} }

View File

@ -187,13 +187,13 @@ impl<C, M, U, S> Parity for ParityClient<C, M, U> where
fn net_peers(&self) -> Result<Peers> { fn net_peers(&self) -> Result<Peers> {
let sync_status = self.sync.status(); let sync_status = self.sync.status();
let num_peers_range = self.net.num_peers_range(); let num_peers_range = self.net.num_peers_range();
debug_assert!(num_peers_range.end > num_peers_range.start); debug_assert!(num_peers_range.end() >= num_peers_range.start());
let peers = self.sync.peers().into_iter().map(Into::into).collect(); let peers = self.sync.peers().into_iter().map(Into::into).collect();
Ok(Peers { Ok(Peers {
active: sync_status.num_active_peers, active: sync_status.num_active_peers,
connected: sync_status.num_peers, connected: sync_status.num_peers,
max: sync_status.current_max_peers(num_peers_range.start, num_peers_range.end - 1), max: sync_status.current_max_peers(*num_peers_range.start(), *num_peers_range.end()),
peers: peers peers: peers
}) })
} }

View File

@ -14,7 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>. // along with Parity Ethereum. If not, see <http://www.gnu.org/licenses/>.
use std::ops::Range; use std::ops::RangeInclusive;
use sync::ManageNetwork; use sync::ManageNetwork;
use self::ethcore_network::{ProtocolId, NetworkContext}; use self::ethcore_network::{ProtocolId, NetworkContext};
@ -30,6 +30,6 @@ impl ManageNetwork for TestManageNetwork {
fn add_reserved_peer(&self, _peer: String) -> Result<(), String> { Ok(()) } fn add_reserved_peer(&self, _peer: String) -> Result<(), String> { Ok(()) }
fn start_network(&self) {} fn start_network(&self) {}
fn stop_network(&self) {} fn stop_network(&self) {}
fn num_peers_range(&self) -> Range<u32> { 25 .. 51 } fn num_peers_range(&self) -> RangeInclusive<u32> { 25..=50 }
fn with_proto_context(&self, _: ProtocolId, _: &mut FnMut(&NetworkContext)) { } fn with_proto_context(&self, _: ProtocolId, _: &mut FnMut(&NetworkContext)) { }
} }

View File

@ -20,7 +20,7 @@ use host::Host;
use io::*; use io::*;
use parking_lot::RwLock; use parking_lot::RwLock;
use std::net::SocketAddr; use std::net::SocketAddr;
use std::ops::Range; use std::ops::RangeInclusive;
use std::sync::Arc; use std::sync::Arc;
use ansi_term::Colour; use ansi_term::Colour;
use network::ConnectionFilter; use network::ConnectionFilter;
@ -95,12 +95,8 @@ impl NetworkService {
} }
/// Returns the number of peers allowed. /// Returns the number of peers allowed.
/// pub fn num_peers_range(&self) -> RangeInclusive<u32> {
/// Keep in mind that `range.end` is *exclusive*. self.config.min_peers..=self.config.max_peers
pub fn num_peers_range(&self) -> Range<u32> {
let start = self.config.min_peers;
let end = self.config.max_peers + 1;
start .. end
} }
/// Returns external url if available. /// Returns external url if available.