Checking for already opened LMDB Environments
darnuria opened this issue · comments
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 #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 #145 (comment)
- #179
- LMDB assumptions: #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
@Kerollmops would suggest removing from 0.20.0 this issue the solution may cause more trouble than the initial issue.