using WRITE_MAP for lmdb

Niko PLP 1 year ago
parent d8bdaa911c
commit 9c225ea773
  1. 12
      stores-lmdb/src/kcv_store.rs

@ -13,6 +13,8 @@ use p2p_repo::types::*;
use p2p_repo::utils::*; use p2p_repo::utils::*;
use p2p_repo::log::*; use p2p_repo::log::*;
use rkv::backend::BackendEnvironmentBuilder;
use rkv::EnvironmentFlags;
use std::path::Path; use std::path::Path;
use std::path::PathBuf; use std::path::PathBuf;
use std::sync::RwLockReadGuard; use std::sync::RwLockReadGuard;
@ -448,11 +450,19 @@ impl LmdbKCVStore {
/// The key is the encryption key for the data at rest. /// The key is the encryption key for the data at rest.
pub fn open<'a>(path: &Path, key: [u8; 32]) -> Result<LmdbKCVStore, StorageError> { pub fn open<'a>(path: &Path, key: [u8; 32]) -> Result<LmdbKCVStore, StorageError> {
let mut manager = Manager::<LmdbEnvironment>::singleton().write().unwrap(); let mut manager = Manager::<LmdbEnvironment>::singleton().write().unwrap();
let mut builder = Lmdb::new();
builder.set_enc_key(key);
builder.set_flags(EnvironmentFlags::WRITE_MAP);
builder.set_map_size(1 * 1024 * 1024 * 1024);
builder.set_max_dbs(10);
let shared_rkv = manager let shared_rkv = manager
.get_or_create(path, |path| { .get_or_create(path, |path| {
//Rkv::new::<Lmdb>(path) // use this instead to disable encryption //Rkv::new::<Lmdb>(path) // use this instead to disable encryption
// TODO: fix memory management of the key. it should be zeroized all the way to the LMDB C FFI // TODO: fix memory management of the key. it should be zeroized all the way to the LMDB C FFI
Rkv::with_encryption_key_and_mapsize::<Lmdb>(path, key, 1 * 1024 * 1024 * 1024)
Rkv::from_builder::<Lmdb>(path, builder)
}) })
.map_err(|e| { .map_err(|e| {
log_debug!("open LMDB failed: {}", e); log_debug!("open LMDB failed: {}", e);

Loading…
Cancel
Save