mirror of
https://github.com/Cuprate/cuprate.git
synced 2025-02-04 20:26:33 +00:00
misc changes
This commit is contained in:
parent
d3c6128fc7
commit
d646eac694
6 changed files with 31 additions and 10 deletions
|
@ -244,7 +244,6 @@ try_err = "deny"
|
||||||
lossy_float_literal = "deny"
|
lossy_float_literal = "deny"
|
||||||
let_underscore_must_use = "deny"
|
let_underscore_must_use = "deny"
|
||||||
iter_over_hash_type = "deny"
|
iter_over_hash_type = "deny"
|
||||||
impl_trait_in_params = "deny"
|
|
||||||
get_unwrap = "deny"
|
get_unwrap = "deny"
|
||||||
error_impl_error = "deny"
|
error_impl_error = "deny"
|
||||||
empty_structs_with_brackets = "deny"
|
empty_structs_with_brackets = "deny"
|
||||||
|
|
|
@ -37,13 +37,24 @@ use crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- init_read_service
|
//---------------------------------------------------------------------------------------------------- init_read_service
|
||||||
/// Initialize the blockchain database read service.
|
/// Initialize the [`BCReadHandle`] thread-pool backed by `rayon`.
|
||||||
|
///
|
||||||
|
/// This spawns `threads` amount of reader threads
|
||||||
|
/// attached to `env` and returns a handle to the pool.
|
||||||
|
///
|
||||||
|
/// Should be called _once_ per actual database.
|
||||||
|
#[cold]
|
||||||
|
#[inline(never)] // Only called once.
|
||||||
pub fn init_read_service(env: Arc<ConcreteEnv>, threads: ReaderThreads) -> BCReadHandle {
|
pub fn init_read_service(env: Arc<ConcreteEnv>, threads: ReaderThreads) -> BCReadHandle {
|
||||||
init_read_service_with_pool(env, init_thread_pool(threads))
|
init_read_service_with_pool(env, init_thread_pool(threads))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initialize the blockchain database read service, with a specific rayon thread-pool instead of
|
/// Initialize the blockchain database read service, with a specific rayon thread-pool instead of
|
||||||
/// creating a new one.
|
/// creating a new one.
|
||||||
|
///
|
||||||
|
/// Should be called _once_ per actual database.
|
||||||
|
#[cold]
|
||||||
|
#[inline(never)] // Only called once.
|
||||||
pub fn init_read_service_with_pool(env: Arc<ConcreteEnv>, pool: Arc<ThreadPool>) -> BCReadHandle {
|
pub fn init_read_service_with_pool(env: Arc<ConcreteEnv>, pool: Arc<ThreadPool>) -> BCReadHandle {
|
||||||
DatabaseReadService::new(env, pool, map_request)
|
DatabaseReadService::new(env, pool, map_request)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#![allow(clippy::impl_trait_in_params)]
|
|
||||||
|
|
||||||
mod reader_threads;
|
mod reader_threads;
|
||||||
mod service;
|
mod service;
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ use rayon::ThreadPool;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- init_thread_pool
|
//---------------------------------------------------------------------------------------------------- init_thread_pool
|
||||||
|
/// Initialize the reader thread-pool backed by `rayon`.
|
||||||
pub fn init_thread_pool(reader_threads: ReaderThreads) -> Arc<ThreadPool> {
|
pub fn init_thread_pool(reader_threads: ReaderThreads) -> Arc<ThreadPool> {
|
||||||
// How many reader threads to spawn?
|
// How many reader threads to spawn?
|
||||||
let reader_count = reader_threads.as_threads().get();
|
let reader_count = reader_threads.as_threads().get();
|
||||||
|
|
|
@ -14,13 +14,17 @@ use cuprate_helper::asynch::InfallibleOneshotReceiver;
|
||||||
///
|
///
|
||||||
/// Uses an inner request handler and a rayon thread-pool to asynchronously handler requests.
|
/// Uses an inner request handler and a rayon thread-pool to asynchronously handler requests.
|
||||||
pub struct DatabaseReadService<Req, Res> {
|
pub struct DatabaseReadService<Req, Res> {
|
||||||
/// The rayon thread-pool.
|
/// Handle to the custom `rayon` DB reader thread-pool.
|
||||||
|
///
|
||||||
|
/// Requests are [`rayon::ThreadPool::spawn`]ed in this thread-pool,
|
||||||
|
/// and responses are returned via a channel we (the caller) provide.
|
||||||
pool: Arc<ThreadPool>,
|
pool: Arc<ThreadPool>,
|
||||||
|
|
||||||
/// The function used to handle request.
|
/// The function used to handle request.
|
||||||
inner_handler: Arc<dyn Fn(Req) -> Result<Res, RuntimeError> + Send + Sync + 'static>,
|
inner_handler: Arc<dyn Fn(Req) -> Result<Res, RuntimeError> + Send + Sync + 'static>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deriving clone means Req & Res needs to be clone, when they don't.
|
||||||
impl<Req, Res> Clone for DatabaseReadService<Req, Res> {
|
impl<Req, Res> Clone for DatabaseReadService<Req, Res> {
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
@ -35,6 +39,11 @@ where
|
||||||
Req: Send + 'static,
|
Req: Send + 'static,
|
||||||
Res: Send + 'static,
|
Res: Send + 'static,
|
||||||
{
|
{
|
||||||
|
/// Creates the [`DatabaseReadService`] with the provided backing thread-pool.
|
||||||
|
///
|
||||||
|
/// Should be called _once_ per actual database.
|
||||||
|
#[cold]
|
||||||
|
#[inline(never)] // Only called once.
|
||||||
pub fn new(
|
pub fn new(
|
||||||
env: Arc<ConcreteEnv>,
|
env: Arc<ConcreteEnv>,
|
||||||
pool: Arc<ThreadPool>,
|
pool: Arc<ThreadPool>,
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
|
use std::{
|
||||||
|
fmt::Debug,
|
||||||
|
sync::Arc,
|
||||||
|
task::{Context, Poll},
|
||||||
|
};
|
||||||
|
|
||||||
|
use futures::channel::oneshot;
|
||||||
|
|
||||||
use cuprate_database::{ConcreteEnv, Env, RuntimeError};
|
use cuprate_database::{ConcreteEnv, Env, RuntimeError};
|
||||||
use cuprate_helper::asynch::InfallibleOneshotReceiver;
|
use cuprate_helper::asynch::InfallibleOneshotReceiver;
|
||||||
use futures::channel::oneshot;
|
|
||||||
use std::fmt::Debug;
|
|
||||||
use std::sync::Arc;
|
|
||||||
use std::task::{Context, Poll};
|
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------------------- Constants
|
//---------------------------------------------------------------------------------------------------- Constants
|
||||||
/// Name of the writer thread.
|
/// Name of the writer thread.
|
||||||
|
|
Loading…
Reference in a new issue