Refactor and make is_syncing.
This commit is contained in:
parent
35b18485d4
commit
396ab5b361
@ -312,7 +312,7 @@ pub fn execute(cmd: RunCmd, can_restart: bool, logger: Arc<RotatingLogger>) -> R
|
|||||||
}
|
}
|
||||||
|
|
||||||
// the updater service
|
// the updater service
|
||||||
let updater = Updater::new(Arc::downgrade(&(service.client() as Arc<BlockChainClient>)), update_policy);
|
let updater = Updater::new(Arc::downgrade(&(service.client() as Arc<BlockChainClient>)), Arc::downgrade(&sync_provider), update_policy);
|
||||||
service.add_notify(updater.clone());
|
service.add_notify(updater.clone());
|
||||||
|
|
||||||
// set up dependencies for rpc servers
|
// set up dependencies for rpc servers
|
||||||
|
@ -94,7 +94,7 @@ use rlp::*;
|
|||||||
use network::*;
|
use network::*;
|
||||||
use ethcore::views::{HeaderView};
|
use ethcore::views::{HeaderView};
|
||||||
use ethcore::header::{BlockNumber, Header as BlockHeader};
|
use ethcore::header::{BlockNumber, Header as BlockHeader};
|
||||||
use ethcore::client::{BlockChainClient, BlockStatus, BlockId, BlockChainInfo, BlockImportError};
|
use ethcore::client::{BlockChainClient, BlockStatus, BlockId, BlockChainInfo, BlockImportError, BlockQueueInfo};
|
||||||
use ethcore::error::*;
|
use ethcore::error::*;
|
||||||
use ethcore::snapshot::{ManifestData, RestorationStatus};
|
use ethcore::snapshot::{ManifestData, RestorationStatus};
|
||||||
use sync_io::SyncIo;
|
use sync_io::SyncIo;
|
||||||
@ -235,6 +235,13 @@ impl SyncStatus {
|
|||||||
min_peers
|
min_peers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Is it doing a major sync?
|
||||||
|
pub fn is_syncing(&self, queue_info: BlockQueueInfo) -> bool {
|
||||||
|
let is_syncing_state = match self.state { SyncState::Idle | SyncState::NewBlocks => false, _ => true };
|
||||||
|
let is_verifying = queue_info.unverified_queue_size + queue_info.verified_queue_size > 3;
|
||||||
|
is_verifying || is_syncing_state
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(PartialEq, Eq, Debug, Clone)]
|
#[derive(PartialEq, Eq, Debug, Clone)]
|
||||||
@ -2112,6 +2119,29 @@ mod tests {
|
|||||||
rlp.out()
|
rlp.out()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn queue_info(unverified: usize, verified: usize) -> BlockQueueInfo {
|
||||||
|
BlockQueueInfo {
|
||||||
|
unverified_queue_size: unverified,
|
||||||
|
verified_queue_size: verified,
|
||||||
|
verifying_queue_size: 0,
|
||||||
|
max_queue_size: 1000,
|
||||||
|
max_mem_use: 1000,
|
||||||
|
mem_used: 500
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn is_still_verifying() {
|
||||||
|
assert!(!is_major_importing(None, queue_info(2, 1)));
|
||||||
|
assert!(is_major_importing(None, queue_info(2, 2)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn is_synced_state() {
|
||||||
|
assert!(is_major_importing(Some(SyncState::Blocks), queue_info(0, 0)));
|
||||||
|
assert!(!is_major_importing(Some(SyncState::Idle), queue_info(0, 0)));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn return_receipts_empty() {
|
fn return_receipts_empty() {
|
||||||
let mut client = TestBlockChainClient::new();
|
let mut client = TestBlockChainClient::new();
|
||||||
|
@ -27,7 +27,6 @@ use hash_fetch::{self as fetch, HashFetch};
|
|||||||
use operations::Operations;
|
use operations::Operations;
|
||||||
use service::{Service};
|
use service::{Service};
|
||||||
use types::all::{ReleaseInfo, OperationsInfo, CapState};
|
use types::all::{ReleaseInfo, OperationsInfo, CapState};
|
||||||
use ethcore_rpc::is_major_importing;
|
|
||||||
|
|
||||||
/// Filter for releases.
|
/// Filter for releases.
|
||||||
#[derive(Debug, Eq, PartialEq, Clone)]
|
#[derive(Debug, Eq, PartialEq, Clone)]
|
||||||
@ -99,7 +98,7 @@ pub struct Updater {
|
|||||||
const CLIENT_ID: &'static str = "parity";
|
const CLIENT_ID: &'static str = "parity";
|
||||||
|
|
||||||
impl Updater {
|
impl Updater {
|
||||||
pub fn new(client: Weak<BlockChainClient>, sync: Arc<SyncProvider>, update_policy: UpdatePolicy) -> Arc<Self> {
|
pub fn new(client: Weak<BlockChainClient>, sync: Weak<SyncProvider>, update_policy: UpdatePolicy) -> Arc<Self> {
|
||||||
let r = Arc::new(Updater {
|
let r = Arc::new(Updater {
|
||||||
update_policy: update_policy,
|
update_policy: update_policy,
|
||||||
weak_self: Mutex::new(Default::default()),
|
weak_self: Mutex::new(Default::default()),
|
||||||
@ -295,7 +294,7 @@ impl Updater {
|
|||||||
impl ChainNotify for Updater {
|
impl ChainNotify for Updater {
|
||||||
fn new_blocks(&self, _imported: Vec<H256>, _invalid: Vec<H256>, _enacted: Vec<H256>, _retracted: Vec<H256>, _sealed: Vec<H256>, _proposed: Vec<Bytes>, _duration: u64) {
|
fn new_blocks(&self, _imported: Vec<H256>, _invalid: Vec<H256>, _enacted: Vec<H256>, _retracted: Vec<H256>, _sealed: Vec<H256>, _proposed: Vec<Bytes>, _duration: u64) {
|
||||||
match (self.client.upgrade(), self.sync.upgrade()) {
|
match (self.client.upgrade(), self.sync.upgrade()) {
|
||||||
(Some(c), Some(s)) if is_major_importing(s.status().state, c.queue_info()) => self.poll(),
|
(Some(ref c), Some(ref s)) if s.status().is_syncing(c.queue_info()) => self.poll(),
|
||||||
_ => {},
|
_ => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user