Replace logging backend to log4rs and add log rotation (#1789)
* Replace logging backend to flexi-logger and add log rotation * Changed flexi_logger to log4rs * Disable logging level filtering in Root logger * Support different logging levels for file and stdout * Don't log messages from modules other than Grin-related * Fix formatting * Place backed up compressed log copies into log file directory * Increase default log file size to 16 MiB * Add comment to config file on log_max_size option
This commit is contained in:
@@ -24,7 +24,6 @@ use core::core::hash::Hashed;
|
||||
use core::core::transaction;
|
||||
use core::core::verifier_cache::VerifierCache;
|
||||
use pool::{DandelionConfig, PoolEntryState, PoolError, TransactionPool, TxSource};
|
||||
use util::LOGGER;
|
||||
|
||||
/// A process to monitor transactions in the stempool.
|
||||
/// With Dandelion, transaction can be broadcasted in stem or fluff phase.
|
||||
@@ -40,7 +39,7 @@ pub fn monitor_transactions(
|
||||
verifier_cache: Arc<RwLock<VerifierCache>>,
|
||||
stop: Arc<AtomicBool>,
|
||||
) {
|
||||
debug!(LOGGER, "Started Dandelion transaction monitor.");
|
||||
debug!("Started Dandelion transaction monitor.");
|
||||
|
||||
let _ = thread::Builder::new()
|
||||
.name("dandelion".to_string())
|
||||
@@ -58,26 +57,26 @@ pub fn monitor_transactions(
|
||||
// Aggregate them up to give a single (valid) aggregated tx and propagate it
|
||||
// to the next Dandelion relay along the stem.
|
||||
if process_stem_phase(tx_pool.clone(), verifier_cache.clone()).is_err() {
|
||||
error!(LOGGER, "dand_mon: Problem with stem phase.");
|
||||
error!("dand_mon: Problem with stem phase.");
|
||||
}
|
||||
|
||||
// Step 2: find all "ToFluff" entries in stempool from last run.
|
||||
// Aggregate them up to give a single (valid) aggregated tx and (re)add it
|
||||
// to our pool with stem=false (which will then broadcast it).
|
||||
if process_fluff_phase(tx_pool.clone(), verifier_cache.clone()).is_err() {
|
||||
error!(LOGGER, "dand_mon: Problem with fluff phase.");
|
||||
error!("dand_mon: Problem with fluff phase.");
|
||||
}
|
||||
|
||||
// Step 3: now find all "Fresh" entries in stempool since last run.
|
||||
// Coin flip for each (90/10) and label them as either "ToStem" or "ToFluff".
|
||||
// We will process these in the next run (waiting patience secs).
|
||||
if process_fresh_entries(dandelion_config.clone(), tx_pool.clone()).is_err() {
|
||||
error!(LOGGER, "dand_mon: Problem processing fresh pool entries.");
|
||||
error!("dand_mon: Problem processing fresh pool entries.");
|
||||
}
|
||||
|
||||
// Step 4: now find all expired entries based on embargo timer.
|
||||
if process_expired_entries(dandelion_config.clone(), tx_pool.clone()).is_err() {
|
||||
error!(LOGGER, "dand_mon: Problem processing fresh pool entries.");
|
||||
error!("dand_mon: Problem processing fresh pool entries.");
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -103,21 +102,14 @@ fn process_stem_phase(
|
||||
.transition_to_state(&stem_txs, PoolEntryState::Stemmed);
|
||||
|
||||
if stem_txs.len() > 0 {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"dand_mon: Found {} txs for stemming.",
|
||||
stem_txs.len()
|
||||
);
|
||||
debug!("dand_mon: Found {} txs for stemming.", stem_txs.len());
|
||||
|
||||
let agg_tx = transaction::aggregate(stem_txs)?;
|
||||
agg_tx.validate(verifier_cache.clone())?;
|
||||
|
||||
let res = tx_pool.adapter.stem_tx_accepted(&agg_tx);
|
||||
if res.is_err() {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"dand_mon: Unable to propagate stem tx. No relay, fluffing instead."
|
||||
);
|
||||
debug!("dand_mon: Unable to propagate stem tx. No relay, fluffing instead.");
|
||||
|
||||
let src = TxSource {
|
||||
debug_name: "no_relay".to_string(),
|
||||
@@ -150,11 +142,7 @@ fn process_fluff_phase(
|
||||
.transition_to_state(&stem_txs, PoolEntryState::Fluffed);
|
||||
|
||||
if stem_txs.len() > 0 {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"dand_mon: Found {} txs for fluffing.",
|
||||
stem_txs.len()
|
||||
);
|
||||
debug!("dand_mon: Found {} txs for fluffing.", stem_txs.len());
|
||||
|
||||
let agg_tx = transaction::aggregate(stem_txs)?;
|
||||
agg_tx.validate(verifier_cache.clone())?;
|
||||
@@ -186,7 +174,6 @@ fn process_fresh_entries(
|
||||
|
||||
if fresh_entries.len() > 0 {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"dand_mon: Found {} fresh entries in stempool.",
|
||||
fresh_entries.len()
|
||||
);
|
||||
@@ -220,21 +207,13 @@ fn process_expired_entries(
|
||||
.iter()
|
||||
.filter(|x| x.tx_at.timestamp() < cutoff)
|
||||
{
|
||||
debug!(
|
||||
LOGGER,
|
||||
"dand_mon: Embargo timer expired for {:?}",
|
||||
entry.tx.hash()
|
||||
);
|
||||
debug!("dand_mon: Embargo timer expired for {:?}", entry.tx.hash());
|
||||
expired_entries.push(entry.clone());
|
||||
}
|
||||
}
|
||||
|
||||
if expired_entries.len() > 0 {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"dand_mon: Found {} expired txs.",
|
||||
expired_entries.len()
|
||||
);
|
||||
debug!("dand_mon: Found {} expired txs.", expired_entries.len());
|
||||
|
||||
{
|
||||
let mut tx_pool = tx_pool.write();
|
||||
@@ -246,11 +225,8 @@ fn process_expired_entries(
|
||||
identifier: "?.?.?.?".to_string(),
|
||||
};
|
||||
match tx_pool.add_to_pool(src, entry.tx, false, &header) {
|
||||
Ok(_) => debug!(
|
||||
LOGGER,
|
||||
"dand_mon: embargo expired, fluffed tx successfully."
|
||||
),
|
||||
Err(e) => debug!(LOGGER, "dand_mon: Failed to fluff expired tx - {:?}", e),
|
||||
Ok(_) => debug!("dand_mon: embargo expired, fluffed tx successfully."),
|
||||
Err(e) => debug!("dand_mon: Failed to fluff expired tx - {:?}", e),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
+14
-19
@@ -27,7 +27,6 @@ use std::{cmp, io, str, thread, time};
|
||||
use p2p;
|
||||
use p2p::ChainAdapter;
|
||||
use pool::DandelionConfig;
|
||||
use util::LOGGER;
|
||||
|
||||
// DNS Seeds with contact email associated
|
||||
const DNS_SEEDS: &'static [&'static str] = &[
|
||||
@@ -119,8 +118,8 @@ fn monitor_peers(
|
||||
if interval >= config.ban_window() {
|
||||
peers.unban_peer(&x.addr);
|
||||
debug!(
|
||||
LOGGER,
|
||||
"monitor_peers: unbanned {} after {} seconds", x.addr, interval
|
||||
"monitor_peers: unbanned {} after {} seconds",
|
||||
x.addr, interval
|
||||
);
|
||||
} else {
|
||||
banned_count += 1;
|
||||
@@ -132,7 +131,6 @@ fn monitor_peers(
|
||||
}
|
||||
|
||||
debug!(
|
||||
LOGGER,
|
||||
"monitor_peers: on {}:{}, {} connected ({} most_work). \
|
||||
all {} = {} healthy + {} banned + {} defunct",
|
||||
config.host,
|
||||
@@ -158,8 +156,8 @@ fn monitor_peers(
|
||||
let mut connected_peers: Vec<SocketAddr> = vec![];
|
||||
for p in peers.connected_peers() {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"monitor_peers: {}:{} ask {} for more peers", config.host, config.port, p.info.addr,
|
||||
"monitor_peers: {}:{} ask {} for more peers",
|
||||
config.host, config.port, p.info.addr,
|
||||
);
|
||||
let _ = p.send_peer_request(capabilities);
|
||||
connected_peers.push(p.info.addr)
|
||||
@@ -178,7 +176,7 @@ fn monitor_peers(
|
||||
}
|
||||
}
|
||||
}
|
||||
None => debug!(LOGGER, "monitor_peers: no preferred peers"),
|
||||
None => debug!("monitor_peers: no preferred peers"),
|
||||
}
|
||||
|
||||
// take a random defunct peer and mark it healthy: over a long period any
|
||||
@@ -197,8 +195,8 @@ fn monitor_peers(
|
||||
);
|
||||
for p in new_peers.iter().filter(|p| !peers.is_known(&p.addr)) {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"monitor_peers: on {}:{}, queue to soon try {}", config.host, config.port, p.addr,
|
||||
"monitor_peers: on {}:{}, queue to soon try {}",
|
||||
config.host, config.port, p.addr,
|
||||
);
|
||||
tx.send(p.addr).unwrap();
|
||||
}
|
||||
@@ -208,13 +206,13 @@ fn update_dandelion_relay(peers: Arc<p2p::Peers>, dandelion_config: DandelionCon
|
||||
// Dandelion Relay Updater
|
||||
let dandelion_relay = peers.get_dandelion_relay();
|
||||
if dandelion_relay.is_empty() {
|
||||
debug!(LOGGER, "monitor_peers: no dandelion relay updating");
|
||||
debug!("monitor_peers: no dandelion relay updating");
|
||||
peers.update_dandelion_relay();
|
||||
} else {
|
||||
for last_added in dandelion_relay.keys() {
|
||||
let dandelion_interval = Utc::now().timestamp() - last_added;
|
||||
if dandelion_interval >= dandelion_config.relay_secs.unwrap() as i64 {
|
||||
debug!(LOGGER, "monitor_peers: updating expired dandelion relay");
|
||||
debug!("monitor_peers: updating expired dandelion relay");
|
||||
peers.update_dandelion_relay();
|
||||
}
|
||||
}
|
||||
@@ -242,11 +240,11 @@ fn connect_to_seeds_and_preferred_peers(
|
||||
// If we have preferred peers add them to the connection
|
||||
match peers_preferred_list {
|
||||
Some(mut peers_preferred) => peer_addrs.append(&mut peers_preferred),
|
||||
None => debug!(LOGGER, "No preferred peers"),
|
||||
None => debug!("No preferred peers"),
|
||||
};
|
||||
|
||||
if peer_addrs.len() == 0 {
|
||||
warn!(LOGGER, "No seeds were retrieved.");
|
||||
warn!("No seeds were retrieved.");
|
||||
}
|
||||
|
||||
// connect to this first set of addresses
|
||||
@@ -311,7 +309,7 @@ pub fn dns_seeds() -> Box<Fn() -> Vec<SocketAddr> + Send> {
|
||||
let mut addresses: Vec<SocketAddr> = vec![];
|
||||
for dns_seed in DNS_SEEDS {
|
||||
let temp_addresses = addresses.clone();
|
||||
debug!(LOGGER, "Retrieving seed nodes from dns {}", dns_seed);
|
||||
debug!("Retrieving seed nodes from dns {}", dns_seed);
|
||||
match (dns_seed.to_owned(), 0).to_socket_addrs() {
|
||||
Ok(addrs) => addresses.append(
|
||||
&mut (addrs
|
||||
@@ -321,13 +319,10 @@ pub fn dns_seeds() -> Box<Fn() -> Vec<SocketAddr> + Send> {
|
||||
}).filter(|addr| !temp_addresses.contains(addr))
|
||||
.collect()),
|
||||
),
|
||||
Err(e) => debug!(
|
||||
LOGGER,
|
||||
"Failed to resolve seed {:?} got error {:?}", dns_seed, e
|
||||
),
|
||||
Err(e) => debug!("Failed to resolve seed {:?} got error {:?}", dns_seed, e),
|
||||
}
|
||||
}
|
||||
debug!(LOGGER, "Retrieved seed addresses: {:?}", addresses);
|
||||
debug!("Retrieved seed addresses: {:?}", addresses);
|
||||
addresses
|
||||
})
|
||||
}
|
||||
|
||||
@@ -39,7 +39,6 @@ use p2p;
|
||||
use pool;
|
||||
use store;
|
||||
use util::file::get_first_line;
|
||||
use util::LOGGER;
|
||||
|
||||
/// Grin server holding internal structures.
|
||||
pub struct Server {
|
||||
@@ -156,7 +155,7 @@ impl Server {
|
||||
global::ChainTypes::Mainnet => genesis::genesis_testnet2(), //TODO: Fix, obviously
|
||||
};
|
||||
|
||||
info!(LOGGER, "Starting server, genesis block: {}", genesis.hash());
|
||||
info!("Starting server, genesis block: {}", genesis.hash());
|
||||
|
||||
let db_env = Arc::new(store::new_env(config.db_root.clone()));
|
||||
let shared_chain = Arc::new(chain::Chain::init(
|
||||
@@ -205,10 +204,7 @@ impl Server {
|
||||
if config.p2p_config.seeding_type.clone() != p2p::Seeding::Programmatic {
|
||||
let seeder = match config.p2p_config.seeding_type.clone() {
|
||||
p2p::Seeding::None => {
|
||||
warn!(
|
||||
LOGGER,
|
||||
"No seed configured, will stay solo until connected to"
|
||||
);
|
||||
warn!("No seed configured, will stay solo until connected to");
|
||||
seed::predefined_seeds(vec![])
|
||||
}
|
||||
p2p::Seeding::List => {
|
||||
@@ -255,7 +251,7 @@ impl Server {
|
||||
.name("p2p-server".to_string())
|
||||
.spawn(move || p2p_inner.listen());
|
||||
|
||||
info!(LOGGER, "Starting rest apis at: {}", &config.api_http_addr);
|
||||
info!("Starting rest apis at: {}", &config.api_http_addr);
|
||||
let api_secret = get_first_line(config.api_secret_path.clone());
|
||||
api::start_rest_apis(
|
||||
config.api_http_addr.clone(),
|
||||
@@ -266,10 +262,7 @@ impl Server {
|
||||
None,
|
||||
);
|
||||
|
||||
info!(
|
||||
LOGGER,
|
||||
"Starting dandelion monitor: {}", &config.api_http_addr
|
||||
);
|
||||
info!("Starting dandelion monitor: {}", &config.api_http_addr);
|
||||
dandelion_monitor::monitor_transactions(
|
||||
config.dandelion_config.clone(),
|
||||
tx_pool.clone(),
|
||||
@@ -277,7 +270,7 @@ impl Server {
|
||||
stop.clone(),
|
||||
);
|
||||
|
||||
warn!(LOGGER, "Grin server started.");
|
||||
warn!("Grin server started.");
|
||||
Ok(Server {
|
||||
config,
|
||||
p2p: p2p_server,
|
||||
@@ -336,7 +329,7 @@ impl Server {
|
||||
/// internal miner, and should only be used for automated testing. Burns
|
||||
/// reward if wallet_listener_url is 'None'
|
||||
pub fn start_test_miner(&self, wallet_listener_url: Option<String>, stop: Arc<AtomicBool>) {
|
||||
info!(LOGGER, "start_test_miner - start",);
|
||||
info!("start_test_miner - start",);
|
||||
let sync_state = self.sync_state.clone();
|
||||
let config_wallet_url = match wallet_listener_url.clone() {
|
||||
Some(u) => u,
|
||||
@@ -467,6 +460,6 @@ impl Server {
|
||||
/// Stops the test miner without stopping the p2p layer
|
||||
pub fn stop_test_miner(&self, stop: Arc<AtomicBool>) {
|
||||
stop.store(true, Ordering::Relaxed);
|
||||
info!(LOGGER, "stop_test_miner - stop",);
|
||||
info!("stop_test_miner - stop",);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ use common::types::{SyncState, SyncStatus};
|
||||
use core::core::hash::{Hash, Hashed, ZERO_HASH};
|
||||
use core::global;
|
||||
use p2p;
|
||||
use util::LOGGER;
|
||||
|
||||
pub struct BodySync {
|
||||
chain: Arc<chain::Chain>,
|
||||
@@ -94,7 +93,6 @@ impl BodySync {
|
||||
self.reset();
|
||||
|
||||
debug!(
|
||||
LOGGER,
|
||||
"body_sync: body_head - {}, {}, header_head - {}, {}, sync_head - {}, {}",
|
||||
body_head.last_block_h,
|
||||
body_head.height,
|
||||
@@ -148,7 +146,6 @@ impl BodySync {
|
||||
|
||||
if hashes_to_get.len() > 0 {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"block_sync: {}/{} requesting blocks {:?} from {} peers",
|
||||
body_head.height,
|
||||
header_head.height,
|
||||
@@ -161,7 +158,7 @@ impl BodySync {
|
||||
for hash in hashes_to_get.clone() {
|
||||
if let Some(peer) = peers_iter.next() {
|
||||
if let Err(e) = peer.send_block_request(*hash) {
|
||||
debug!(LOGGER, "Skipped request to {}: {:?}", peer.info.addr, e);
|
||||
debug!("Skipped request to {}: {:?}", peer.info.addr, e);
|
||||
} else {
|
||||
self.body_sync_hashes.push(hash.clone());
|
||||
}
|
||||
@@ -199,7 +196,6 @@ impl BodySync {
|
||||
.filter(|x| !self.chain.get_block(*x).is_ok() && !self.chain.is_orphan(*x))
|
||||
.collect::<Vec<_>>();
|
||||
debug!(
|
||||
LOGGER,
|
||||
"body_sync: {}/{} blocks received, and no more in 200ms",
|
||||
self.body_sync_hashes.len() - hashes_not_get.len(),
|
||||
self.body_sync_hashes.len(),
|
||||
@@ -210,7 +206,6 @@ impl BodySync {
|
||||
None => {
|
||||
if Utc::now() - self.sync_start_ts > Duration::seconds(5) {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"body_sync: 0/{} blocks received in 5s",
|
||||
self.body_sync_hashes.len(),
|
||||
);
|
||||
|
||||
@@ -20,7 +20,6 @@ use chain;
|
||||
use common::types::{Error, SyncState, SyncStatus};
|
||||
use core::core::hash::{Hash, Hashed};
|
||||
use p2p::{self, Peer};
|
||||
use util::LOGGER;
|
||||
|
||||
pub struct HeaderSync {
|
||||
sync_state: Arc<SyncState>,
|
||||
@@ -60,7 +59,6 @@ impl HeaderSync {
|
||||
// but ONLY on initial transition to HeaderSync state.
|
||||
let sync_head = self.chain.get_sync_head().unwrap();
|
||||
debug!(
|
||||
LOGGER,
|
||||
"sync: initial transition to HeaderSync. sync_head: {} at {}, reset to: {} at {}",
|
||||
sync_head.hash(),
|
||||
sync_head.height,
|
||||
@@ -141,8 +139,8 @@ impl HeaderSync {
|
||||
fn request_headers(&mut self, peer: &Peer) {
|
||||
if let Ok(locator) = self.get_locator() {
|
||||
debug!(
|
||||
LOGGER,
|
||||
"sync: request_headers: asking {} for headers, {:?}", peer.info.addr, locator,
|
||||
"sync: request_headers: asking {} for headers, {:?}",
|
||||
peer.info.addr, locator,
|
||||
);
|
||||
|
||||
let _ = peer.send_header_request(locator);
|
||||
@@ -165,7 +163,7 @@ impl HeaderSync {
|
||||
self.history_locators.clear();
|
||||
}
|
||||
|
||||
debug!(LOGGER, "sync: locator heights : {:?}", heights);
|
||||
debug!("sync: locator heights : {:?}", heights);
|
||||
|
||||
let mut locator: Vec<Hash> = vec![];
|
||||
let mut current = self.chain.get_block_header(&tip.last_block_h);
|
||||
@@ -237,7 +235,7 @@ impl HeaderSync {
|
||||
}
|
||||
}
|
||||
|
||||
debug!(LOGGER, "sync: locator heights': {:?}", new_heights);
|
||||
debug!("sync: locator heights': {:?}", new_heights);
|
||||
|
||||
// shrink history_locators properly
|
||||
if heights.len() > 1 {
|
||||
@@ -258,14 +256,13 @@ impl HeaderSync {
|
||||
}
|
||||
}
|
||||
debug!(
|
||||
LOGGER,
|
||||
"sync: history locators: len={}, shrunk={}",
|
||||
self.history_locators.len(),
|
||||
shrunk_size
|
||||
);
|
||||
}
|
||||
|
||||
debug!(LOGGER, "sync: locator: {:?}", locator);
|
||||
debug!("sync: locator: {:?}", locator);
|
||||
|
||||
Ok(locator)
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ use common::types::{Error, SyncState, SyncStatus};
|
||||
use core::core::hash::Hashed;
|
||||
use core::global;
|
||||
use p2p::{self, Peer};
|
||||
use util::LOGGER;
|
||||
|
||||
/// Fast sync has 3 "states":
|
||||
/// * syncing headers
|
||||
@@ -77,10 +76,7 @@ impl StateSync {
|
||||
{
|
||||
let clone = self.sync_state.sync_error();
|
||||
if let Some(ref sync_error) = *clone.read() {
|
||||
error!(
|
||||
LOGGER,
|
||||
"fast_sync: error = {:?}. restart fast sync", sync_error
|
||||
);
|
||||
error!("fast_sync: error = {:?}. restart fast sync", sync_error);
|
||||
sync_need_restart = true;
|
||||
}
|
||||
drop(clone);
|
||||
@@ -92,8 +88,8 @@ impl StateSync {
|
||||
if !peer.is_connected() {
|
||||
sync_need_restart = true;
|
||||
info!(
|
||||
LOGGER,
|
||||
"fast_sync: peer connection lost: {:?}. restart", peer.info.addr,
|
||||
"fast_sync: peer connection lost: {:?}. restart",
|
||||
peer.info.addr,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -110,10 +106,7 @@ impl StateSync {
|
||||
|
||||
if let SyncStatus::TxHashsetDownload { .. } = self.sync_state.status() {
|
||||
if download_timeout {
|
||||
error!(
|
||||
LOGGER,
|
||||
"fast_sync: TxHashsetDownload status timeout in 10 minutes!"
|
||||
);
|
||||
error!("fast_sync: TxHashsetDownload status timeout in 10 minutes!");
|
||||
self.sync_state
|
||||
.set_sync_error(Error::P2P(p2p::Error::Timeout));
|
||||
}
|
||||
@@ -168,7 +161,6 @@ impl StateSync {
|
||||
}
|
||||
let bhash = txhashset_head.hash();
|
||||
debug!(
|
||||
LOGGER,
|
||||
"fast_sync: before txhashset request, header head: {} / {}, txhashset_head: {} / {}",
|
||||
header_head.height,
|
||||
header_head.last_block_h,
|
||||
@@ -176,7 +168,7 @@ impl StateSync {
|
||||
bhash
|
||||
);
|
||||
if let Err(e) = peer.send_txhashset_request(txhashset_head.height, bhash) {
|
||||
error!(LOGGER, "fast_sync: send_txhashset_request err! {:?}", e);
|
||||
error!("fast_sync: send_txhashset_request err! {:?}", e);
|
||||
return Err(e);
|
||||
}
|
||||
return Ok(peer.clone());
|
||||
|
||||
@@ -24,7 +24,6 @@ use grin::sync::body_sync::BodySync;
|
||||
use grin::sync::header_sync::HeaderSync;
|
||||
use grin::sync::state_sync::StateSync;
|
||||
use p2p::{self, Peers};
|
||||
use util::LOGGER;
|
||||
|
||||
pub fn run_sync(
|
||||
sync_state: Arc<SyncState>,
|
||||
@@ -164,7 +163,6 @@ fn needs_syncing(
|
||||
if peer.info.total_difficulty() <= local_diff {
|
||||
let ch = chain.head().unwrap();
|
||||
info!(
|
||||
LOGGER,
|
||||
"synchronized at {} @ {} [{}]",
|
||||
local_diff.to_num(),
|
||||
ch.height,
|
||||
@@ -175,7 +173,7 @@ fn needs_syncing(
|
||||
return (false, most_work_height);
|
||||
}
|
||||
} else {
|
||||
warn!(LOGGER, "sync: no peers available, disabling sync");
|
||||
warn!("sync: no peers available, disabling sync");
|
||||
return (false, 0);
|
||||
}
|
||||
} else {
|
||||
@@ -192,7 +190,6 @@ fn needs_syncing(
|
||||
let peer_diff = peer.info.total_difficulty();
|
||||
if peer_diff > local_diff.clone() + threshold.clone() {
|
||||
info!(
|
||||
LOGGER,
|
||||
"sync: total_difficulty {}, peer_difficulty {}, threshold {} (last 5 blocks), enabling sync",
|
||||
local_diff,
|
||||
peer_diff,
|
||||
|
||||
Reference in New Issue
Block a user