mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: add default max readers 32000 (#3465)
This commit is contained in:
@ -11,11 +11,16 @@ use reth_libmdbx::{
|
|||||||
SyncMode, RO, RW,
|
SyncMode, RO, RW,
|
||||||
};
|
};
|
||||||
use std::{ops::Deref, path::Path};
|
use std::{ops::Deref, path::Path};
|
||||||
|
use tx::Tx;
|
||||||
|
|
||||||
pub mod cursor;
|
pub mod cursor;
|
||||||
|
|
||||||
pub mod tx;
|
pub mod tx;
|
||||||
use tx::Tx;
|
|
||||||
|
const GIGABYTE: usize = 1024 * 1024 * 1024;
|
||||||
|
const TERABYTE: usize = GIGABYTE * 1024;
|
||||||
|
|
||||||
|
/// MDBX allows up to 32767 readers (`MDBX_READERS_LIMIT`), but we limit it to slightly below that
|
||||||
|
const DEFAULT_MAX_READERS: u64 = 32_000;
|
||||||
|
|
||||||
/// Environment used when opening a MDBX environment. RO/RW.
|
/// Environment used when opening a MDBX environment. RO/RW.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -52,9 +57,6 @@ impl<E: EnvironmentKind> Database for Env<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const GIGABYTE: usize = 1024 * 1024 * 1024;
|
|
||||||
const TERABYTE: usize = GIGABYTE * 1024;
|
|
||||||
|
|
||||||
impl<E: EnvironmentKind> Env<E> {
|
impl<E: EnvironmentKind> Env<E> {
|
||||||
/// Opens the database at the specified path with the given `EnvKind`.
|
/// Opens the database at the specified path with the given `EnvKind`.
|
||||||
///
|
///
|
||||||
@ -85,6 +87,8 @@ impl<E: EnvironmentKind> Env<E> {
|
|||||||
coalesce: true,
|
coalesce: true,
|
||||||
..Default::default()
|
..Default::default()
|
||||||
})
|
})
|
||||||
|
// configure more readers
|
||||||
|
.set_max_readers(DEFAULT_MAX_READERS)
|
||||||
.open(path)
|
.open(path)
|
||||||
.map_err(|e| DatabaseError::FailedToOpen(e.into()))?,
|
.map_err(|e| DatabaseError::FailedToOpen(e.into()))?,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -114,7 +114,7 @@ pub fn init_db<P: AsRef<std::path::Path>>(path: P) -> eyre::Result<DatabaseEnv>
|
|||||||
}
|
}
|
||||||
#[cfg(feature = "mdbx")]
|
#[cfg(feature = "mdbx")]
|
||||||
{
|
{
|
||||||
let db = Env::<WriteMap>::open(rpath, EnvKind::RW)?;
|
let db = DatabaseEnv::open(rpath, EnvKind::RW)?;
|
||||||
db.create_tables()?;
|
db.create_tables()?;
|
||||||
Ok(db)
|
Ok(db)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@ use crate::{
|
|||||||
Mode, Transaction, TransactionKind,
|
Mode, Transaction, TransactionKind,
|
||||||
};
|
};
|
||||||
use byteorder::{ByteOrder, NativeEndian};
|
use byteorder::{ByteOrder, NativeEndian};
|
||||||
use libc::c_uint;
|
|
||||||
use mem::size_of;
|
use mem::size_of;
|
||||||
use std::{
|
use std::{
|
||||||
ffi::CString,
|
ffi::CString,
|
||||||
@ -376,7 +375,7 @@ where
|
|||||||
E: EnvironmentKind,
|
E: EnvironmentKind,
|
||||||
{
|
{
|
||||||
flags: EnvironmentFlags,
|
flags: EnvironmentFlags,
|
||||||
max_readers: Option<c_uint>,
|
max_readers: Option<u64>,
|
||||||
max_dbs: Option<u64>,
|
max_dbs: Option<u64>,
|
||||||
rp_augment_limit: Option<u64>,
|
rp_augment_limit: Option<u64>,
|
||||||
loose_limit: Option<u64>,
|
loose_limit: Option<u64>,
|
||||||
@ -453,6 +452,15 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set max readers if specified
|
||||||
|
if let Some(max_readers) = self.max_readers {
|
||||||
|
mdbx_result(ffi::mdbx_env_set_option(
|
||||||
|
env,
|
||||||
|
ffi::MDBX_opt_max_readers,
|
||||||
|
max_readers,
|
||||||
|
))?;
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
fn path_to_bytes<P: AsRef<Path>>(path: P) -> Vec<u8> {
|
fn path_to_bytes<P: AsRef<Path>>(path: P) -> Vec<u8> {
|
||||||
use std::os::unix::ffi::OsStrExt;
|
use std::os::unix::ffi::OsStrExt;
|
||||||
@ -544,7 +552,7 @@ where
|
|||||||
/// This defines the number of slots in the lock table that is used to track readers in the
|
/// This defines the number of slots in the lock table that is used to track readers in the
|
||||||
/// the environment. The default is 126. Starting a read-only transaction normally ties a lock
|
/// the environment. The default is 126. Starting a read-only transaction normally ties a lock
|
||||||
/// table slot to the [Transaction] object until it or the [Environment] object is destroyed.
|
/// table slot to the [Transaction] object until it or the [Environment] object is destroyed.
|
||||||
pub fn set_max_readers(&mut self, max_readers: c_uint) -> &mut Self {
|
pub fn set_max_readers(&mut self, max_readers: u64) -> &mut Self {
|
||||||
self.max_readers = Some(max_readers);
|
self.max_readers = Some(max_readers);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user