## Issue Addressed NA ## Proposed Changes Shift practically all HTTP endpoint handlers to the blocking executor (some very light tasks are left on the core executor). ## Additional Info This PR covers the `rest_api` which will soon be refactored to suit the standard API. As such, I've cut a few corners and left some existing issues open in this patch. What I have done here should leave the API in state that is not necessary *exactly* the same, but good enough for us to run validators with. Specifically, the number of blocking workers that can be spawned is unbounded and I have not implemented a queue; this will need to be fixed when we implement the standard API.
40 lines
1.1 KiB
Rust
40 lines
1.1 KiB
Rust
use crate::{ApiError, Context};
|
|
use beacon_chain::BeaconChainTypes;
|
|
use eth2_libp2p::types::SyncState;
|
|
use rest_types::{SyncingResponse, SyncingStatus};
|
|
use std::sync::Arc;
|
|
use types::Slot;
|
|
|
|
/// Returns a syncing status.
|
|
pub fn syncing<T: BeaconChainTypes>(ctx: Arc<Context<T>>) -> Result<SyncingResponse, ApiError> {
|
|
let current_slot = ctx
|
|
.beacon_chain
|
|
.head_info()
|
|
.map_err(|e| ApiError::ServerError(format!("Unable to read head slot: {:?}", e)))?
|
|
.slot;
|
|
|
|
let (starting_slot, highest_slot) = match ctx.network_globals.sync_state() {
|
|
SyncState::SyncingFinalized {
|
|
start_slot,
|
|
head_slot,
|
|
..
|
|
}
|
|
| SyncState::SyncingHead {
|
|
start_slot,
|
|
head_slot,
|
|
} => (start_slot, head_slot),
|
|
SyncState::Synced | SyncState::Stalled => (Slot::from(0u64), current_slot),
|
|
};
|
|
|
|
let sync_status = SyncingStatus {
|
|
starting_slot,
|
|
current_slot,
|
|
highest_slot,
|
|
};
|
|
|
|
Ok(SyncingResponse {
|
|
is_syncing: ctx.network_globals.is_syncing(),
|
|
sync_status,
|
|
})
|
|
}
|