google / google/leveldb

Various operations not supported when stored in a FUSE filesystem

Open
#915 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
39.4k
Forks
8.2k
PR merge metrics
No merged PRs in 30d

Description

I mentioned this in https://github.com/google/leveldb/issues/211#issuecomment-863091440, but I thought it's worth pulling out into a separate issue if only to confirm that it is intended (or undefined) behaviour that LevelDB doesn't (may not) work in a FUSE filesystem.

I haven't used LevelDB, so please forgive me that this is from an end-user (of an application that uses it) perspective, but what I see are errors like (Spotify):
```
09:21:29.248 E [f:130 ] Failed to open database: IO error: ~/.cache/spotify/Users/[...]/primary.ldb: Operation not supported
09:21:29.248 E [f:92 ] Could not read from database: IO error: ~/.cache/spotify/Users/[...]/primary.ldb: Operation not supported
```

and (Keybase):
```
▶ ERROR sync ~/.local/share/keybase/keybase.leveldb: operation not supported
```

In both cases this seems to be caused by my home directory (and thus those `.ldb`/`.leveldb` files) being a FUSE mountpoint; if I symlink those containing directories to outside of my home, the applications start OK.

I reported this to keybase/client#24544 (before I found the cause) but Spotify is closed source and frankly I don't have the energy for non-technical customer support suggestions! I'm sure it affects all sorts of things I don't use, or that I do but haven't noticed since it doesn't prevent them operating anyway.

Essentially I'm interested in whether this is to be considered a bug, or merely a known limitation? If the latter it's quite a 'gotcha' for FUSE homes (which might sound really oddball, but for me it arises from encrypting it at rest, and the provider I chose happens to be implemented with FUSE, I don't _think_ that's as niche as it might at first sound), I can cope with a couple of symlinks, but it wouldn't be many before I felt I had to give in and do something differently. Especially worrying in a way is everything that might be using LevelDB but just non-critically, and that might change, or I might try to use the functionality that requires it, etc.

Thanks.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.