Follow distance fix (#1082)
* Ensure eth1 follow distance is respected * Add more info! logs for eth1 * Improve builder log * Fix timestamp
This commit is contained in:
parent
e0723dfc3b
commit
b6c027b9ec
@ -207,7 +207,9 @@ where
|
|||||||
info!(
|
info!(
|
||||||
context.log,
|
context.log,
|
||||||
"Waiting for eth2 genesis from eth1";
|
"Waiting for eth2 genesis from eth1";
|
||||||
"eth1_node" => &config.eth1.endpoint
|
"eth1_endpoint" => &config.eth1.endpoint,
|
||||||
|
"contract_deploy_block" => config.eth1.deposit_contract_deploy_block,
|
||||||
|
"deposit_contract" => &config.eth1.deposit_contract_address
|
||||||
);
|
);
|
||||||
|
|
||||||
let genesis_service =
|
let genesis_service =
|
||||||
|
@ -12,10 +12,10 @@ use futures::{
|
|||||||
};
|
};
|
||||||
use parking_lot::{RwLock, RwLockReadGuard};
|
use parking_lot::{RwLock, RwLockReadGuard};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use slog::{debug, error, trace, Logger};
|
use slog::{debug, error, info, trace, Logger};
|
||||||
use std::ops::{Range, RangeInclusive};
|
use std::ops::{Range, RangeInclusive};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
|
||||||
use tokio::timer::Delay;
|
use tokio::timer::Delay;
|
||||||
|
|
||||||
const STANDARD_TIMEOUT_MILLIS: u64 = 15_000;
|
const STANDARD_TIMEOUT_MILLIS: u64 = 15_000;
|
||||||
@ -61,19 +61,15 @@ pub enum Error {
|
|||||||
|
|
||||||
/// The success message for an Eth1Data cache update.
|
/// The success message for an Eth1Data cache update.
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub enum BlockCacheUpdateOutcome {
|
pub struct BlockCacheUpdateOutcome {
|
||||||
/// The cache was sucessfully updated.
|
pub blocks_imported: usize,
|
||||||
Success {
|
pub head_block_number: Option<u64>,
|
||||||
blocks_imported: usize,
|
|
||||||
head_block_number: Option<u64>,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The success message for an Eth1 deposit cache update.
|
/// The success message for an Eth1 deposit cache update.
|
||||||
#[derive(Debug, PartialEq, Clone)]
|
#[derive(Debug, PartialEq, Clone)]
|
||||||
pub enum DepositCacheUpdateOutcome {
|
pub struct DepositCacheUpdateOutcome {
|
||||||
/// The cache was sucessfully updated.
|
pub logs_imported: usize,
|
||||||
Success { logs_imported: usize },
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
@ -259,7 +255,7 @@ impl Service {
|
|||||||
.map_err(|e| format!("Failed to update eth1 cache: {:?}", e))
|
.map_err(|e| format!("Failed to update eth1 cache: {:?}", e))
|
||||||
.then(move |result| {
|
.then(move |result| {
|
||||||
match &result {
|
match &result {
|
||||||
Ok(DepositCacheUpdateOutcome::Success { logs_imported }) => trace!(
|
Ok(DepositCacheUpdateOutcome { logs_imported }) => trace!(
|
||||||
log_a,
|
log_a,
|
||||||
"Updated eth1 deposit cache";
|
"Updated eth1 deposit cache";
|
||||||
"cached_deposits" => inner_1.deposit_cache.read().cache.len(),
|
"cached_deposits" => inner_1.deposit_cache.read().cache.len(),
|
||||||
@ -281,7 +277,7 @@ impl Service {
|
|||||||
.map_err(|e| format!("Failed to update eth1 cache: {:?}", e))
|
.map_err(|e| format!("Failed to update eth1 cache: {:?}", e))
|
||||||
.then(move |result| {
|
.then(move |result| {
|
||||||
match &result {
|
match &result {
|
||||||
Ok(BlockCacheUpdateOutcome::Success {
|
Ok(BlockCacheUpdateOutcome {
|
||||||
blocks_imported,
|
blocks_imported,
|
||||||
head_block_number,
|
head_block_number,
|
||||||
}) => trace!(
|
}) => trace!(
|
||||||
@ -382,6 +378,7 @@ impl Service {
|
|||||||
) -> impl Future<Item = DepositCacheUpdateOutcome, Error = Error> {
|
) -> impl Future<Item = DepositCacheUpdateOutcome, Error = Error> {
|
||||||
let service_1 = self.clone();
|
let service_1 = self.clone();
|
||||||
let service_2 = self.clone();
|
let service_2 = self.clone();
|
||||||
|
let service_3 = self.clone();
|
||||||
let blocks_per_log_query = self.config().blocks_per_log_query;
|
let blocks_per_log_query = self.config().blocks_per_log_query;
|
||||||
let max_log_requests_per_update = self
|
let max_log_requests_per_update = self
|
||||||
.config()
|
.config()
|
||||||
@ -484,7 +481,26 @@ impl Service {
|
|||||||
|
|
||||||
Ok(sum)
|
Ok(sum)
|
||||||
})
|
})
|
||||||
.map(|logs_imported| DepositCacheUpdateOutcome::Success { logs_imported })
|
.map(move |logs_imported| {
|
||||||
|
if logs_imported > 0 {
|
||||||
|
info!(
|
||||||
|
service_3.log,
|
||||||
|
"Imported deposit log(s)";
|
||||||
|
"latest_block" => service_3.inner.deposit_cache.read().cache.latest_block_number(),
|
||||||
|
"total" => service_3.deposit_cache_len(),
|
||||||
|
"new" => logs_imported
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
debug!(
|
||||||
|
service_3.log,
|
||||||
|
"No new deposits found";
|
||||||
|
"latest_block" => service_3.inner.deposit_cache.read().cache.latest_block_number(),
|
||||||
|
"total_deposits" => service_3.deposit_cache_len(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
DepositCacheUpdateOutcome { logs_imported }
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,6 +523,8 @@ impl Service {
|
|||||||
let cache_5 = self.inner.clone();
|
let cache_5 = self.inner.clone();
|
||||||
let cache_6 = self.inner.clone();
|
let cache_6 = self.inner.clone();
|
||||||
|
|
||||||
|
let service_1 = self.clone();
|
||||||
|
|
||||||
let block_cache_truncation = self.config().block_cache_truncation;
|
let block_cache_truncation = self.config().block_cache_truncation;
|
||||||
let max_blocks_per_update = self
|
let max_blocks_per_update = self
|
||||||
.config()
|
.config()
|
||||||
@ -613,7 +631,37 @@ impl Service {
|
|||||||
cache_4.block_cache.read().len() as i64,
|
cache_4.block_cache.read().len() as i64,
|
||||||
);
|
);
|
||||||
|
|
||||||
Ok(BlockCacheUpdateOutcome::Success {
|
let block_cache = service_1.inner.block_cache.read();
|
||||||
|
let latest_block_mins = block_cache
|
||||||
|
.latest_block_timestamp()
|
||||||
|
.and_then(|timestamp| {
|
||||||
|
SystemTime::now()
|
||||||
|
.duration_since(UNIX_EPOCH)
|
||||||
|
.ok()
|
||||||
|
.and_then(|now| now.checked_sub(Duration::from_secs(timestamp)))
|
||||||
|
})
|
||||||
|
.map(|duration| format!("{} mins", duration.as_secs() / 60))
|
||||||
|
.unwrap_or_else(|| "n/a".into());
|
||||||
|
|
||||||
|
if blocks_imported > 0 {
|
||||||
|
info!(
|
||||||
|
service_1.log,
|
||||||
|
"Imported eth1 block(s)";
|
||||||
|
"latest_block_age" => latest_block_mins,
|
||||||
|
"latest_block" => block_cache.highest_block_number(),
|
||||||
|
"total_cached_blocks" => block_cache.len(),
|
||||||
|
"new" => blocks_imported
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
debug!(
|
||||||
|
service_1.log,
|
||||||
|
"No new eth1 blocks imported";
|
||||||
|
"latest_block" => block_cache.highest_block_number(),
|
||||||
|
"cached_blocks" => block_cache.len(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(BlockCacheUpdateOutcome {
|
||||||
blocks_imported,
|
blocks_imported,
|
||||||
head_block_number: cache_4.block_cache.read().highest_block_number(),
|
head_block_number: cache_4.block_cache.read().highest_block_number(),
|
||||||
})
|
})
|
||||||
|
@ -12,7 +12,7 @@ use std::io::prelude::*;
|
|||||||
use std::net::{IpAddr, Ipv4Addr};
|
use std::net::{IpAddr, Ipv4Addr};
|
||||||
use std::net::{TcpListener, UdpSocket};
|
use std::net::{TcpListener, UdpSocket};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use types::EthSpec;
|
use types::{ChainSpec, EthSpec};
|
||||||
|
|
||||||
pub const CLIENT_CONFIG_FILENAME: &str = "beacon-node.toml";
|
pub const CLIENT_CONFIG_FILENAME: &str = "beacon-node.toml";
|
||||||
pub const BEACON_NODE_DIR: &str = "beacon";
|
pub const BEACON_NODE_DIR: &str = "beacon";
|
||||||
@ -29,6 +29,7 @@ pub const NETWORK_DIR: &str = "network";
|
|||||||
pub fn get_config<E: EthSpec>(
|
pub fn get_config<E: EthSpec>(
|
||||||
cli_args: &ArgMatches,
|
cli_args: &ArgMatches,
|
||||||
spec_constants: &str,
|
spec_constants: &str,
|
||||||
|
spec: &ChainSpec,
|
||||||
log: Logger,
|
log: Logger,
|
||||||
) -> Result<ClientConfig, String> {
|
) -> Result<ClientConfig, String> {
|
||||||
let mut client_config = ClientConfig::default();
|
let mut client_config = ClientConfig::default();
|
||||||
@ -331,6 +332,7 @@ pub fn get_config<E: EthSpec>(
|
|||||||
eth2_testnet_config.deposit_contract_deploy_block;
|
eth2_testnet_config.deposit_contract_deploy_block;
|
||||||
client_config.eth1.lowest_cached_block_number =
|
client_config.eth1.lowest_cached_block_number =
|
||||||
client_config.eth1.deposit_contract_deploy_block;
|
client_config.eth1.deposit_contract_deploy_block;
|
||||||
|
client_config.eth1.follow_distance = spec.eth1_follow_distance;
|
||||||
|
|
||||||
if let Some(mut boot_nodes) = eth2_testnet_config.boot_enr {
|
if let Some(mut boot_nodes) = eth2_testnet_config.boot_enr {
|
||||||
client_config.network.boot_nodes.append(&mut boot_nodes)
|
client_config.network.boot_nodes.append(&mut boot_nodes)
|
||||||
|
@ -58,6 +58,7 @@ impl<E: EthSpec> ProductionBeaconNode<E> {
|
|||||||
get_config::<E>(
|
get_config::<E>(
|
||||||
&matches,
|
&matches,
|
||||||
&context.eth2_config.spec_constants,
|
&context.eth2_config.spec_constants,
|
||||||
|
&context.eth2_config().spec,
|
||||||
context.log.clone(),
|
context.log.clone(),
|
||||||
)
|
)
|
||||||
.into_future()
|
.into_future()
|
||||||
|
Loading…
Reference in New Issue
Block a user