meilisearch / heed

A fully typed LMDB wrapper with minimum overhead 🐦

Home Page:https://docs.rs/heed

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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 hardlink Not possible since hard_link only apply to files and we track dir for envs.
  • Renaming

Related pull requests/ Issue

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.