Open
Description
Heed strive to pursue opening LMDB safely, so a database environment must be opened only once inside a process address space.
Any subsequent opening shall return the corresponding already opened environment.
It was done with Path
Canonization but it fails to tackle symlinks, hardlinks and renaming/move of the whole database environment (both locks and database).
In an ideal world the environment already open checking must prevail:
- The solution should avoid keeping the environment "open" aka holding a file descriptor elsewhere see [Stale] Compare identical environments by using a
same_file::Handle
#179 (comment) - First opening
- Opening with the same path
- Access through symlink
[ ] Access through hardlinkNot possible since hard_link only apply to files and we track dir for envs.- Renaming
Related pull requests/ Issue
- Idea based on Env open with
Flags::MdbNoSubDir
flag requires target file to exists #145 (comment) - [Stale] Compare identical environments by using a
same_file::Handle
#179 - LMDB assumptions: Make transaction opening more safe #20 (comment)
Open question
Is Canonization still pertinant if we check already-openned by Unix: (device/inode) Windows: (Driver/fileID) through same_file?
How to do it compatible with windows without lefting file open.
Problems
Lmdb rely on Unixes on posix filelocking through fnctl