remove arbitrary sleep timer
This commit is contained in:
parent
a6d3ff61f1
commit
2e9803de72
@ -128,6 +128,7 @@ impl Web3Rpcs {
|
|||||||
|
|
||||||
if sender.send(()).is_err() {
|
if sender.send(()).is_err() {
|
||||||
// errors are okay. they mean that all receivers have been dropped, or the rpcs just haven't started yet
|
// errors are okay. they mean that all receivers have been dropped, or the rpcs just haven't started yet
|
||||||
|
// TODO: i'm seeing this error a lot more than expected
|
||||||
trace!("no http receivers");
|
trace!("no http receivers");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -548,6 +549,11 @@ impl Web3Rpcs {
|
|||||||
.unwrap_or(false)
|
.unwrap_or(false)
|
||||||
{
|
{
|
||||||
// server does not have the max block
|
// server does not have the max block
|
||||||
|
trace!(
|
||||||
|
"{} does not have the max block ({:?})",
|
||||||
|
x,
|
||||||
|
max_block_needed
|
||||||
|
);
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
!min_block_needed
|
!min_block_needed
|
||||||
@ -573,7 +579,7 @@ impl Web3Rpcs {
|
|||||||
if let Some(min_block_age) = min_block_age {
|
if let Some(min_block_age) = min_block_age {
|
||||||
if x_head.age() > min_block_age {
|
if x_head.age() > min_block_age {
|
||||||
// rpc is still syncing
|
// rpc is still syncing
|
||||||
trace!("block is too old");
|
trace!("server's block is too old");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -818,9 +824,7 @@ impl Web3Rpcs {
|
|||||||
|
|
||||||
// TODO: maximum retries? right now its the total number of servers
|
// TODO: maximum retries? right now its the total number of servers
|
||||||
loop {
|
loop {
|
||||||
let num_skipped = skip_rpcs.len();
|
if skip_rpcs.len() >= self.by_name.read().len() {
|
||||||
|
|
||||||
if num_skipped >= self.by_name.read().len() {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -997,29 +1001,26 @@ impl Web3Rpcs {
|
|||||||
let num_skipped = skip_rpcs.len();
|
let num_skipped = skip_rpcs.len();
|
||||||
|
|
||||||
if num_skipped == 0 {
|
if num_skipped == 0 {
|
||||||
error!("No servers synced ({} known). None skipped", num_conns);
|
error!(
|
||||||
|
"No servers synced ({:?}-{:?}) ({} known). None skipped",
|
||||||
// TODO: what error code?
|
min_block_needed, max_block_needed, num_conns
|
||||||
Ok(JsonRpcForwardedResponse::from_str(
|
);
|
||||||
"No servers synced",
|
debug!("{}", serde_json::to_string(&request).unwrap());
|
||||||
Some(-32000),
|
|
||||||
Some(request.id),
|
|
||||||
))
|
|
||||||
} else {
|
} else {
|
||||||
// TODO: warn? debug? trace?
|
// TODO: warn? debug? trace?
|
||||||
warn!(
|
warn!(
|
||||||
"Requested data was not available on {}/{} servers",
|
"Requested data was not available on {}/{} servers",
|
||||||
num_skipped, num_conns
|
num_skipped, num_conns
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: what error code?
|
|
||||||
// cloudflare gives {"jsonrpc":"2.0","error":{"code":-32043,"message":"Requested data cannot be older than 128 blocks."},"id":1}
|
|
||||||
Ok(JsonRpcForwardedResponse::from_str(
|
|
||||||
"Requested data is not available",
|
|
||||||
Some(-32043),
|
|
||||||
Some(request.id),
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: what error code?
|
||||||
|
// cloudflare gives {"jsonrpc":"2.0","error":{"code":-32043,"message":"Requested data cannot be older than 128 blocks."},"id":1}
|
||||||
|
Ok(JsonRpcForwardedResponse::from_str(
|
||||||
|
"Requested data is not available",
|
||||||
|
Some(-32043),
|
||||||
|
Some(request.id),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// be sure there is a timeout on this or it might loop forever
|
/// be sure there is a timeout on this or it might loop forever
|
||||||
@ -1035,6 +1036,8 @@ impl Web3Rpcs {
|
|||||||
max_count: Option<usize>,
|
max_count: Option<usize>,
|
||||||
always_include_backups: bool,
|
always_include_backups: bool,
|
||||||
) -> anyhow::Result<JsonRpcForwardedResponse> {
|
) -> anyhow::Result<JsonRpcForwardedResponse> {
|
||||||
|
let mut watch_consensus_rpcs = self.watch_consensus_rpcs_sender.subscribe();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match self
|
match self
|
||||||
.all_connections(
|
.all_connections(
|
||||||
@ -1083,18 +1086,19 @@ impl Web3Rpcs {
|
|||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
Err(None) => {
|
Err(None) => {
|
||||||
warn!("No servers in sync on {:?}! Retrying", self);
|
warn!(
|
||||||
|
"No servers in sync on {:?} (block {:?} - {:?})! Retrying",
|
||||||
|
self, min_block_needed, max_block_needed
|
||||||
|
);
|
||||||
|
|
||||||
if let Some(request_metadata) = &request_metadata {
|
if let Some(request_metadata) = &request_metadata {
|
||||||
|
// TODO: if this times out, i think we drop this
|
||||||
request_metadata.no_servers.fetch_add(1, Ordering::Release);
|
request_metadata.no_servers.fetch_add(1, Ordering::Release);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: i don't think this will ever happen
|
watch_consensus_rpcs.changed().await?;
|
||||||
// TODO: return a 502? if it does?
|
|
||||||
// return Err(anyhow::anyhow!("no available rpcs!"));
|
watch_consensus_rpcs.borrow_and_update();
|
||||||
// TODO: sleep how long?
|
|
||||||
// TODO: subscribe to something in ConsensusConnections instead
|
|
||||||
sleep(Duration::from_millis(200)).await;
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1108,7 +1112,12 @@ impl Web3Rpcs {
|
|||||||
request_metadata.no_servers.fetch_add(1, Ordering::Release);
|
request_metadata.no_servers.fetch_add(1, Ordering::Release);
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep_until(retry_at).await;
|
tokio::select! {
|
||||||
|
_ = sleep_until(retry_at) => {}
|
||||||
|
_ = watch_consensus_rpcs.changed() => {
|
||||||
|
watch_consensus_rpcs.borrow_and_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -697,10 +697,10 @@ impl Web3Rpc {
|
|||||||
};
|
};
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let http_interval_receiver = http_interval_sender.as_ref().map(|x| x.subscribe());
|
|
||||||
|
|
||||||
let mut futures = vec![];
|
let mut futures = vec![];
|
||||||
|
|
||||||
|
let http_interval_receiver = http_interval_sender.as_ref().map(|x| x.subscribe());
|
||||||
|
|
||||||
{
|
{
|
||||||
// TODO: move this into a proper function
|
// TODO: move this into a proper function
|
||||||
let authorization = authorization.clone();
|
let authorization = authorization.clone();
|
||||||
|
Loading…
Reference in New Issue
Block a user