Add more logging to eth1 voting

This commit is contained in:
Paul Hauner
2019-11-26 14:42:27 +11:00
parent 4d4edda230
commit 743029a1de
3 changed files with 43 additions and 18 deletions

View File

@@ -4,7 +4,7 @@ use exit_future::Exit;
use futures::Future; use futures::Future;
use integer_sqrt::IntegerSquareRoot; use integer_sqrt::IntegerSquareRoot;
use rand::prelude::*; use rand::prelude::*;
use slog::{crit, trace, Logger}; use slog::{crit, error, trace, Logger};
use std::collections::HashMap; use std::collections::HashMap;
use std::iter::DoubleEndedIterator; use std::iter::DoubleEndedIterator;
use std::iter::FromIterator; use std::iter::FromIterator;
@@ -205,14 +205,16 @@ impl<T: EthSpec, S: Store> Eth1ChainBackend<T> for CachingEth1Backend<T, S> {
let blocks = self.core.blocks().read(); let blocks = self.core.blocks().read();
let (new_eth1_data, all_eth1_data) = let (new_eth1_data, all_eth1_data) = if let Some(sets) =
if let Some(sets) = eth1_data_sets(blocks.iter(), state, prev_eth1_hash, spec) { eth1_data_sets(blocks.iter(), state, prev_eth1_hash, spec, &self.log)
{
sets sets
} else { } else {
crit!( crit!(
self.log, self.log,
"Unable to find eth1 data sets"; "Unable to find eth1 data sets";
"earliest_cached_block" => self.core.earliest_block_timestamp(), "lowest_block_number" => self.core.lowest_block_number(),
"earliest_block_timestamp" => self.core.earliest_block_timestamp(),
"genesis_time" => state.genesis_time, "genesis_time" => state.genesis_time,
"outcome" => "casting random eth1 vote" "outcome" => "casting random eth1 vote"
); );
@@ -332,6 +334,7 @@ fn eth1_data_sets<'a, T: EthSpec, I>(
state: &BeaconState<T>, state: &BeaconState<T>,
prev_eth1_hash: Hash256, prev_eth1_hash: Hash256,
spec: &ChainSpec, spec: &ChainSpec,
log: &Logger,
) -> Option<(Eth1DataBlockNumber, Eth1DataBlockNumber)> ) -> Option<(Eth1DataBlockNumber, Eth1DataBlockNumber)>
where where
T: EthSpec, T: EthSpec,
@@ -367,6 +370,12 @@ where
HashMap::from_iter(all_eth1_data), HashMap::from_iter(all_eth1_data),
)) ))
} else { } else {
error!(
log,
"The previous eth1 hash is not in cache";
"previous_hash" => format!("{:?}", prev_eth1_hash)
);
None None
} }
} }
@@ -439,6 +448,7 @@ fn slot_start_seconds<T: EthSpec>(
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::*; use super::*;
use environment::null_logger;
use types::{test_utils::DepositTestTask, MinimalEthSpec}; use types::{test_utils::DepositTestTask, MinimalEthSpec};
type E = MinimalEthSpec; type E = MinimalEthSpec;
@@ -490,7 +500,6 @@ mod test {
mod eth1_chain_json_backend { mod eth1_chain_json_backend {
use super::*; use super::*;
use environment::null_logger;
use eth1::DepositLog; use eth1::DepositLog;
use store::MemoryStore; use store::MemoryStore;
use types::test_utils::{generate_deterministic_keypair, TestingDepositBuilder}; use types::test_utils::{generate_deterministic_keypair, TestingDepositBuilder};
@@ -781,6 +790,8 @@ mod test {
#[test] #[test]
fn empty_cache() { fn empty_cache() {
let log = null_logger().unwrap();
let spec = &E::default_spec(); let spec = &E::default_spec();
let state: BeaconState<E> = BeaconState::new(0, get_eth1_data(0), spec); let state: BeaconState<E> = BeaconState::new(0, get_eth1_data(0), spec);
let prev_eth1_hash = Hash256::zero(); let prev_eth1_hash = Hash256::zero();
@@ -788,13 +799,15 @@ mod test {
let blocks = vec![]; let blocks = vec![];
assert_eq!( assert_eq!(
eth1_data_sets(blocks.iter(), &state, prev_eth1_hash, &spec), eth1_data_sets(blocks.iter(), &state, prev_eth1_hash, &spec, &log),
None None
); );
} }
#[test] #[test]
fn no_known_block_hash() { fn no_known_block_hash() {
let log = null_logger().unwrap();
let mut spec = E::default_spec(); let mut spec = E::default_spec();
spec.milliseconds_per_slot = 1_000; spec.milliseconds_per_slot = 1_000;
@@ -804,13 +817,15 @@ mod test {
let blocks = vec![get_eth1_block(0, 0)]; let blocks = vec![get_eth1_block(0, 0)];
assert_eq!( assert_eq!(
eth1_data_sets(blocks.iter(), &state, prev_eth1_hash, &spec), eth1_data_sets(blocks.iter(), &state, prev_eth1_hash, &spec, &log),
None None
); );
} }
#[test] #[test]
fn ideal_scenario() { fn ideal_scenario() {
let log = null_logger().unwrap();
let mut spec = E::default_spec(); let mut spec = E::default_spec();
spec.milliseconds_per_slot = 1_000; spec.milliseconds_per_slot = 1_000;
@@ -828,7 +843,7 @@ mod test {
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let (new_eth1_data, all_eth1_data) = let (new_eth1_data, all_eth1_data) =
eth1_data_sets(blocks.iter(), &state, prev_eth1_hash, &spec) eth1_data_sets(blocks.iter(), &state, prev_eth1_hash, &spec, &log)
.expect("should find data"); .expect("should find data");
assert_eq!( assert_eq!(

View File

@@ -59,6 +59,11 @@ impl BlockCache {
self.blocks.first().map(|block| block.timestamp) self.blocks.first().map(|block| block.timestamp)
} }
/// Returns the lowest block number stored.
pub fn lowest_block_number(&self) -> Option<u64> {
self.blocks.first().map(|block| block.number)
}
/// Returns the highest block number stored. /// Returns the highest block number stored.
pub fn highest_block_number(&self) -> Option<u64> { pub fn highest_block_number(&self) -> Option<u64> {
self.blocks.last().map(|block| block.number) self.blocks.last().map(|block| block.number)

View File

@@ -173,6 +173,11 @@ impl Service {
self.inner.block_cache.read().earliest_block_timestamp() self.inner.block_cache.read().earliest_block_timestamp()
} }
/// Returns the lowest block number stored.
pub fn lowest_block_number(&self) -> Option<u64> {
self.inner.block_cache.read().lowest_block_number()
}
/// Returns the number of currently cached blocks. /// Returns the number of currently cached blocks.
pub fn block_cache_len(&self) -> usize { pub fn block_cache_len(&self) -> usize {
self.blocks().read().len() self.blocks().read().len()