Skip to content
This repository was archived by the owner on Nov 6, 2020. It is now read-only.

Commit 39d1ac2

Browse files
committed
rpc: fix informant printout when waiting for peers
1 parent 0a63746 commit 39d1ac2

File tree

3 files changed

+17
-10
lines changed

3 files changed

+17
-10
lines changed

parity/informant.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use io::{TimerToken, IoContext, IoHandler};
3535
use light::Cache as LightDataCache;
3636
use light::client::{LightChainClient, LightChainNotify};
3737
use number_prefix::{binary_prefix, Standalone, Prefixed};
38-
use parity_rpc::{is_major_importing};
38+
use parity_rpc::is_major_importing_or_waiting;
3939
use parity_rpc::informant::RpcStats;
4040
use ethereum_types::H256;
4141
use bytes::Bytes;
@@ -128,7 +128,7 @@ impl InformantData for FullNodeInformantData {
128128

129129
fn is_major_importing(&self) -> bool {
130130
let state = self.sync.as_ref().map(|sync| sync.status().state);
131-
is_major_importing(state, self.client.queue_info())
131+
is_major_importing_or_waiting(state, self.client.queue_info(), false)
132132
}
133133

134134
fn report(&self) -> Report {
@@ -142,24 +142,24 @@ impl InformantData for FullNodeInformantData {
142142
cache_sizes.insert("queue", queue_info.mem_used);
143143
cache_sizes.insert("chain", blockchain_cache_info.total());
144144

145-
let (importing, sync_info) = match (self.sync.as_ref(), self.net.as_ref()) {
145+
let importing = self.is_major_importing();
146+
let sync_info = match (self.sync.as_ref(), self.net.as_ref()) {
146147
(Some(sync), Some(net)) => {
147148
let status = sync.status();
148149
let num_peers_range = net.num_peers_range();
149150
debug_assert!(num_peers_range.end > num_peers_range.start);
150151

151152
cache_sizes.insert("sync", status.mem_used);
152153

153-
let importing = is_major_importing(Some(status.state), queue_info.clone());
154-
(importing, Some(SyncInfo {
154+
Some(SyncInfo {
155155
last_imported_block_number: status.last_imported_block_number.unwrap_or(chain_info.best_block_number),
156156
last_imported_old_block_number: status.last_imported_old_block_number,
157157
num_peers: status.num_peers,
158158
max_peers: status.current_max_peers(num_peers_range.start, num_peers_range.end - 1),
159159
snapshot_sync: status.is_snapshot_syncing(),
160-
}))
160+
})
161161
}
162-
_ => (is_major_importing(self.sync.as_ref().map(|s| s.status().state), queue_info.clone()), None),
162+
_ => None
163163
};
164164

165165
Report {

rpc/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ pub use http::{
118118
};
119119

120120
pub use v1::{NetworkSettings, Metadata, Origin, informant, dispatch, signer};
121-
pub use v1::block_import::is_major_importing;
121+
pub use v1::block_import::{is_major_importing, is_major_importing_or_waiting};
122122
pub use v1::extractors::{RpcExtractor, WsExtractor, WsStats, WsDispatcher};
123123
pub use authcodes::{AuthCodes, TimeProvider};
124124
pub use http_common::HttpMetaExtractor;

rpc/src/v1/helpers/block_import.rs

+9-2
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,23 @@
1919
use ethcore::client::BlockQueueInfo;
2020
use sync::SyncState;
2121

22-
/// Check if client is during major sync or during block import.
23-
pub fn is_major_importing(sync_state: Option<SyncState>, queue_info: BlockQueueInfo) -> bool {
22+
/// Check if client is during major sync or during block import and allows defining whether 'waiting for peers' should
23+
/// be considered a syncing state.
24+
pub fn is_major_importing_or_waiting(sync_state: Option<SyncState>, queue_info: BlockQueueInfo, waiting_is_syncing_state: bool) -> bool {
2425
let is_syncing_state = sync_state.map_or(false, |s| match s {
2526
SyncState::Idle | SyncState::NewBlocks => false,
27+
SyncState::WaitingPeers if !waiting_is_syncing_state => false,
2628
_ => true,
2729
});
2830
let is_verifying = queue_info.unverified_queue_size + queue_info.verified_queue_size > 3;
2931
is_verifying || is_syncing_state
3032
}
3133

34+
/// Check if client is during major sync or during block import.
35+
pub fn is_major_importing(sync_state: Option<SyncState>, queue_info: BlockQueueInfo) -> bool {
36+
is_major_importing_or_waiting(sync_state, queue_info, true)
37+
}
38+
3239
#[cfg(test)]
3340
mod tests {
3441
use ethcore::client::BlockQueueInfo;

0 commit comments

Comments
 (0)