handle start_http failure in rpc_service (#25400)
This commit is contained in:
parent
e025376719
commit
e263be2000
|
@ -769,27 +769,34 @@ impl Validator {
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let json_rpc_service = JsonRpcService::new(
|
||||||
|
rpc_addr,
|
||||||
|
config.rpc_config.clone(),
|
||||||
|
config.snapshot_config.clone(),
|
||||||
|
bank_forks.clone(),
|
||||||
|
block_commitment_cache.clone(),
|
||||||
|
blockstore.clone(),
|
||||||
|
cluster_info.clone(),
|
||||||
|
Some(poh_recorder.clone()),
|
||||||
|
genesis_config.hash(),
|
||||||
|
ledger_path,
|
||||||
|
config.validator_exit.clone(),
|
||||||
|
config.known_validators.clone(),
|
||||||
|
rpc_override_health_check.clone(),
|
||||||
|
optimistically_confirmed_bank.clone(),
|
||||||
|
config.send_transaction_service_config.clone(),
|
||||||
|
max_slots.clone(),
|
||||||
|
leader_schedule_cache.clone(),
|
||||||
|
max_complete_transaction_status_slot,
|
||||||
|
)
|
||||||
|
.unwrap_or_else(|s| {
|
||||||
|
error!("Failed to create JSON RPC Service: {}", s);
|
||||||
|
abort();
|
||||||
|
});
|
||||||
|
|
||||||
(
|
(
|
||||||
Some(JsonRpcService::new(
|
Some(json_rpc_service),
|
||||||
rpc_addr,
|
|
||||||
config.rpc_config.clone(),
|
|
||||||
config.snapshot_config.clone(),
|
|
||||||
bank_forks.clone(),
|
|
||||||
block_commitment_cache.clone(),
|
|
||||||
blockstore.clone(),
|
|
||||||
cluster_info.clone(),
|
|
||||||
Some(poh_recorder.clone()),
|
|
||||||
genesis_config.hash(),
|
|
||||||
ledger_path,
|
|
||||||
config.validator_exit.clone(),
|
|
||||||
config.known_validators.clone(),
|
|
||||||
rpc_override_health_check.clone(),
|
|
||||||
optimistically_confirmed_bank.clone(),
|
|
||||||
config.send_transaction_service_config.clone(),
|
|
||||||
max_slots.clone(),
|
|
||||||
leader_schedule_cache.clone(),
|
|
||||||
max_complete_transaction_status_slot,
|
|
||||||
)),
|
|
||||||
if !config.rpc_config.full_api {
|
if !config.rpc_config.full_api {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -353,7 +353,7 @@ impl JsonRpcService {
|
||||||
max_slots: Arc<MaxSlots>,
|
max_slots: Arc<MaxSlots>,
|
||||||
leader_schedule_cache: Arc<LeaderScheduleCache>,
|
leader_schedule_cache: Arc<LeaderScheduleCache>,
|
||||||
current_transaction_status_slot: Arc<AtomicU64>,
|
current_transaction_status_slot: Arc<AtomicU64>,
|
||||||
) -> Self {
|
) -> Result<Self, String> {
|
||||||
info!("rpc bound to {:?}", rpc_addr);
|
info!("rpc bound to {:?}", rpc_addr);
|
||||||
info!("rpc configuration: {:?}", config);
|
info!("rpc configuration: {:?}", config);
|
||||||
let rpc_threads = 1.max(config.rpc_threads);
|
let rpc_threads = 1.max(config.rpc_threads);
|
||||||
|
@ -519,28 +519,29 @@ impl JsonRpcService {
|
||||||
e,
|
e,
|
||||||
rpc_addr.port()
|
rpc_addr.port()
|
||||||
);
|
);
|
||||||
|
close_handle_sender.send(Err(e.to_string())).unwrap();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let server = server.unwrap();
|
let server = server.unwrap();
|
||||||
close_handle_sender.send(server.close_handle()).unwrap();
|
close_handle_sender.send(Ok(server.close_handle())).unwrap();
|
||||||
server.wait();
|
server.wait();
|
||||||
exit_bigtable_ledger_upload_service.store(true, Ordering::Relaxed);
|
exit_bigtable_ledger_upload_service.store(true, Ordering::Relaxed);
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let close_handle = close_handle_receiver.recv().unwrap();
|
let close_handle = close_handle_receiver.recv().unwrap()?;
|
||||||
let close_handle_ = close_handle.clone();
|
let close_handle_ = close_handle.clone();
|
||||||
validator_exit
|
validator_exit
|
||||||
.write()
|
.write()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.register_exit(Box::new(move || close_handle_.close()));
|
.register_exit(Box::new(move || close_handle_.close()));
|
||||||
Self {
|
Ok(Self {
|
||||||
thread_hdl,
|
thread_hdl,
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
request_processor: test_request_processor,
|
request_processor: test_request_processor,
|
||||||
close_handle: Some(close_handle),
|
close_handle: Some(close_handle),
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn exit(&mut self) {
|
pub fn exit(&mut self) {
|
||||||
|
@ -632,7 +633,8 @@ mod tests {
|
||||||
Arc::new(MaxSlots::default()),
|
Arc::new(MaxSlots::default()),
|
||||||
Arc::new(LeaderScheduleCache::default()),
|
Arc::new(LeaderScheduleCache::default()),
|
||||||
Arc::new(AtomicU64::default()),
|
Arc::new(AtomicU64::default()),
|
||||||
);
|
)
|
||||||
|
.unwrap();
|
||||||
let thread = rpc_service.thread_hdl.thread();
|
let thread = rpc_service.thread_hdl.thread();
|
||||||
assert_eq!(thread.name().unwrap(), "solana-jsonrpc");
|
assert_eq!(thread.name().unwrap(), "solana-jsonrpc");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue