Avoid panic if no rpc peers exist
This commit is contained in:
parent
b44d8c394e
commit
feeaad619a
@ -549,47 +549,51 @@ impl Replicator {
|
|||||||
previous_blockhash: &Hash,
|
previous_blockhash: &Hash,
|
||||||
) -> result::Result<(Hash, u64), Error> {
|
) -> result::Result<(Hash, u64), Error> {
|
||||||
for _ in 0..10 {
|
for _ in 0..10 {
|
||||||
let rpc_client = {
|
let rpc_peers = {
|
||||||
let cluster_info = cluster_info.read().unwrap();
|
let cluster_info = cluster_info.read().unwrap();
|
||||||
let rpc_peers = cluster_info.rpc_peers();
|
cluster_info.rpc_peers()
|
||||||
debug!("rpc peers: {:?}", rpc_peers);
|
|
||||||
let node_index = thread_rng().gen_range(0, rpc_peers.len());
|
|
||||||
RpcClient::new_socket(rpc_peers[node_index].rpc)
|
|
||||||
};
|
};
|
||||||
let response = rpc_client
|
debug!("rpc peers: {:?}", rpc_peers);
|
||||||
.retry_make_rpc_request(&RpcRequest::GetStorageBlockhash, None, 0)
|
if !rpc_peers.is_empty() {
|
||||||
.map_err(|err| {
|
let rpc_client = {
|
||||||
warn!("Error while making rpc request {:?}", err);
|
let node_index = thread_rng().gen_range(0, rpc_peers.len());
|
||||||
Error::IO(io::Error::new(ErrorKind::Other, "rpc error"))
|
RpcClient::new_socket(rpc_peers[node_index].rpc)
|
||||||
})?;
|
};
|
||||||
let storage_blockhash =
|
let response = rpc_client
|
||||||
serde_json::from_value::<(String)>(response).map_err(|err| {
|
.retry_make_rpc_request(&RpcRequest::GetStorageBlockhash, None, 0)
|
||||||
io::Error::new(
|
|
||||||
io::ErrorKind::Other,
|
|
||||||
format!("Couldn't parse response: {:?}", err),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
let storage_blockhash = storage_blockhash.parse().map_err(|err| {
|
|
||||||
io::Error::new(
|
|
||||||
io::ErrorKind::Other,
|
|
||||||
format!(
|
|
||||||
"Blockhash parse failure: {:?} on {:?}",
|
|
||||||
err, storage_blockhash
|
|
||||||
),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
if storage_blockhash != *previous_blockhash {
|
|
||||||
let storage_slot = rpc_client
|
|
||||||
.retry_make_rpc_request(&RpcRequest::GetStorageSlot, None, 0)
|
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
warn!("Error while making rpc request {:?}", err);
|
warn!("Error while making rpc request {:?}", err);
|
||||||
Error::IO(io::Error::new(ErrorKind::Other, "rpc error"))
|
Error::IO(io::Error::new(ErrorKind::Other, "rpc error"))
|
||||||
})?
|
})?;
|
||||||
.as_u64()
|
let storage_blockhash =
|
||||||
.unwrap();
|
serde_json::from_value::<(String)>(response).map_err(|err| {
|
||||||
info!("storage slot: {}", storage_slot);
|
io::Error::new(
|
||||||
if get_segment_from_slot(storage_slot) != 0 {
|
io::ErrorKind::Other,
|
||||||
return Ok((storage_blockhash, storage_slot));
|
format!("Couldn't parse response: {:?}", err),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
let storage_blockhash = storage_blockhash.parse().map_err(|err| {
|
||||||
|
io::Error::new(
|
||||||
|
io::ErrorKind::Other,
|
||||||
|
format!(
|
||||||
|
"Blockhash parse failure: {:?} on {:?}",
|
||||||
|
err, storage_blockhash
|
||||||
|
),
|
||||||
|
)
|
||||||
|
})?;
|
||||||
|
if storage_blockhash != *previous_blockhash {
|
||||||
|
let storage_slot = rpc_client
|
||||||
|
.retry_make_rpc_request(&RpcRequest::GetStorageSlot, None, 0)
|
||||||
|
.map_err(|err| {
|
||||||
|
warn!("Error while making rpc request {:?}", err);
|
||||||
|
Error::IO(io::Error::new(ErrorKind::Other, "rpc error"))
|
||||||
|
})?
|
||||||
|
.as_u64()
|
||||||
|
.unwrap();
|
||||||
|
info!("storage slot: {}", storage_slot);
|
||||||
|
if get_segment_from_slot(storage_slot) != 0 {
|
||||||
|
return Ok((storage_blockhash, storage_slot));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
info!("waiting for segment...");
|
info!("waiting for segment...");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user