Skip to content

Commit

Permalink
Add Env::max_key_size() method to determine the max supported key len…
Browse files Browse the repository at this point in the history
…gth.

This calls the LMDB mdb_env_get_maxkeysize function.
  • Loading branch information
tpunder committed May 30, 2024
1 parent d925a5a commit 92a8cd1
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
25 changes: 25 additions & 0 deletions heed/src/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -901,6 +901,14 @@ impl Env {
mdb_result(unsafe { ffi::mdb_env_set_mapsize(self.env_mut_ptr(), new_size) })
.map_err(Into::into)
}

/// Get the maximum size of keys and MDB_DUPSORT data we can write.
///
/// Depends on the compile-time constant MDB_MAXKEYSIZE. Default 511
pub fn max_key_size(&self) -> usize {
let maxsize: i32 = unsafe { ffi::mdb_env_get_maxkeysize(self.env_mut_ptr()) };
maxsize as usize
}
}

/// Contains information about the environment.
Expand Down Expand Up @@ -1251,4 +1259,21 @@ mod tests {
env.prepare_for_closing().wait();
}
}

#[test]
fn max_key_size() {
let dir = tempfile::tempdir().unwrap();
let env = unsafe { EnvOpenOptions::new().open(dir.path().join(dir.path())).unwrap() };
let maxkeysize = env.max_key_size();

eprintln!("maxkeysize: {}", maxkeysize);

if cfg!(feature = "longer-keys") {
// Should be larger than the default of 511
assert!(maxkeysize > 511);
} else {
// Should be the default of 511
assert_eq!(maxkeysize, 511);
}
}
}
11 changes: 6 additions & 5 deletions heed/src/mdb/lmdb_ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ use std::ptr;
pub use ffi::{
mdb_cursor_close, mdb_cursor_del, mdb_cursor_get, mdb_cursor_open, mdb_cursor_put,
mdb_dbi_open, mdb_del, mdb_drop, mdb_env_close, mdb_env_copyfd2, mdb_env_create,
mdb_env_get_fd, mdb_env_get_flags, mdb_env_info, mdb_env_open, mdb_env_set_flags,
mdb_env_set_mapsize, mdb_env_set_maxdbs, mdb_env_set_maxreaders, mdb_env_stat, mdb_env_sync,
mdb_filehandle_t, mdb_get, mdb_put, mdb_reader_check, mdb_set_compare, mdb_stat, mdb_txn_abort,
mdb_txn_begin, mdb_txn_commit, mdb_version, MDB_cursor, MDB_dbi, MDB_env, MDB_stat, MDB_txn,
MDB_val, MDB_CP_COMPACT, MDB_CURRENT, MDB_RDONLY, MDB_RESERVE,
mdb_env_get_fd, mdb_env_get_flags, mdb_env_get_maxkeysize, mdb_env_info, mdb_env_open,
mdb_env_set_flags, mdb_env_set_mapsize, mdb_env_set_maxdbs, mdb_env_set_maxreaders,
mdb_env_stat, mdb_env_sync, mdb_filehandle_t, mdb_get, mdb_put, mdb_reader_check,
mdb_set_compare, mdb_stat, mdb_txn_abort, mdb_txn_begin, mdb_txn_commit, mdb_version,
MDB_cursor, MDB_dbi, MDB_env, MDB_stat, MDB_txn, MDB_val, MDB_CP_COMPACT, MDB_CURRENT,
MDB_RDONLY, MDB_RESERVE,
};
use lmdb_master_sys as ffi;

Expand Down

0 comments on commit 92a8cd1

Please sign in to comment.