bring back head_delay

This commit is contained in:
Bryan Stitt 2023-10-12 23:21:40 -07:00
parent 93533eabc7
commit fc3d2420bd
2 changed files with 10 additions and 12 deletions

@ -585,10 +585,7 @@ impl ConsensusFinder {
let latency = first_seen.elapsed();
// record the time behind the fastest node
rpc.head_delay
.write()
.await
.record_secs(latency.as_secs_f32());
rpc.head_delay.write().record_secs(latency.as_secs_f32());
// update the local mapping of rpc -> block
self.rpc_heads.insert(rpc, block)

@ -18,6 +18,7 @@ use latency::{EwmaLatency, PeakEwmaLatency, RollingQuantileLatency};
use migration::sea_orm::DatabaseConnection;
use nanorand::tls::TlsWyRand;
use nanorand::Rng;
use parking_lot::RwLock;
use redis_rate_limiter::{RedisPool, RedisRateLimitResult, RedisRateLimiter};
use serde::ser::{SerializeStruct, Serializer};
use serde::Serialize;
@ -29,7 +30,7 @@ use std::hash::{Hash, Hasher};
use std::sync::atomic::{self, AtomicBool, AtomicU32, AtomicU64, AtomicUsize};
use std::{cmp::Ordering, sync::Arc};
use tokio::select;
use tokio::sync::{mpsc, watch, RwLock as AsyncRwLock};
use tokio::sync::{mpsc, watch};
use tokio::task::yield_now;
use tokio::time::{interval, sleep, sleep_until, Duration, Instant, MissedTickBehavior};
use tracing::{debug, error, info, trace, warn, Level};
@ -69,7 +70,8 @@ pub struct Web3Rpc {
/// head_block is only inside an Option so that the "Default" derive works. it will always be set.
pub(super) head_block_sender: Option<watch::Sender<Option<Web3ProxyBlock>>>,
/// Track head block latency.
pub(super) head_delay: AsyncRwLock<EwmaLatency>,
/// TODO: This is in a sync lock, but writes are infrequent and quick. Is this actually okay? Set from a spawned task and read an atomic instead?
pub(super) head_delay: RwLock<EwmaLatency>,
/// Track peak request latency
/// peak_latency is only inside an Option so that the "Default" derive works. it will always be set.
pub(super) peak_latency: Option<PeakEwmaLatency>,
@ -1315,8 +1317,7 @@ impl Serialize for Web3Rpc {
where
S: Serializer,
{
// 15 if we bring head_delay back
let mut state = serializer.serialize_struct("Web3Rpc", 14)?;
let mut state = serializer.serialize_struct("Web3Rpc", 15)?;
// the url is excluded because it likely includes private information. just show the name that we use in keys
state.serialize_field("name", &self.name)?;
@ -1361,10 +1362,10 @@ impl Serialize for Web3Rpc {
&self.active_requests.load(atomic::Ordering::Relaxed),
)?;
// {
// let head_delay_ms = self.head_delay.read().await.latency().as_secs_f32() * 1000.0;
// state.serialize_field("head_delay_ms", &(head_delay_ms))?;
// }
{
let head_delay_ms = self.head_delay.read().latency().as_secs_f32() * 1000.0;
state.serialize_field("head_delay_ms", &(head_delay_ms))?;
}
{
let median_latency_ms = self