Comments (11)
badger.NewKV("non-existent-dir/foo")
crashes my program. That's not acceptable. Opening a non-existent file is not an internal error, it's a user error which my program will want to relay to the user in an arbitrary way.
from badger.
Besides the pragmatic concerns, it violates go conventions to panic across a package boundary.
from badger.
Yup. Agree with all the concerns here. We have started to surface errors via the API calls (see 31c0bd2). We'll do a sweep over the next couple of weeks over the entire code base. And try to remove all calls to y.Checkf, if possible.
The biggest hurdle would be to deal with background tasks, and we'll need to build mechanisms to deal graciously with them. I'll keep you updated on this thread.
from badger.
We are adding basic checks for the directory to ease usage for the newcomers, see #29.
Overall, we decided that it's library user's responsibility to provide a writable directory for badger for the whole duration of using KV.
There is also a separate thread for disk errors: #28
from badger.
Any operation that could fail, under any conditions, should return an error.
we decided that it's library user's responsibility to provide a writable directory
Sure, you can hope the user provides a writeable directory, but the fact remains that if they give you a directory, and you can't write to it, you need to tell them they failed on their end of the contract.
from badger.
I see that there is a way to get errors when using Entry
. Would still be nice to have a version of NewKV
that doesn't exit the program.
from badger.
log.Fatals only happen when Badger itself causes issues. External input won't cause it. In fact, these Fatals are really great at catching bugs and making the library robust.
We send errors back when justified, for e.g. when doing CAS operations.
from badger.
I see your point, you are right. We can do much better error handling.
from badger.
Good to hear, looking forward to using the library.
from badger.
See changes: 55c350d and 7610c2f. These surface error handling all the way from disk to public APIs. They should address the concerns raised in this issue.
Closing the issue. Feel free to reopen if some API is still unhandled.
from badger.
Excellent. I will probably switch our usage of BoltDB to Badger, since we are in the early stages of our project as well.
from badger.
Related Issues (20)
- [BUG]: Panic from a lot of DELs and SETs with very large keys
- [BUG]: when compression is none block cache will cache the table
- [QUESTION]: Batch write is partially committed when badger crashes
- [QUESTION]: Search keys by regular expressions HOT 1
- [BUG]: arm64 inconsistencies HOT 1
- [QUESTION]: Is Badger rsync friendly during db in use ? HOT 3
- How to achieve multiple process sharing and open a db
- [BUG]: compilation fails with `GOOS=aix` (Unix) HOT 1
- Memory crash
- [BUG]: RunValueGC HOT 1
- [FEATURE]: Storing values larger than 2 GB HOT 2
- [BUG]: Panic, help!
- [FEATURE]: <TTL Event>
- update ristretto HOT 2
- [BUG]: db.Backup maybe see the `partial write` in one transaction
- [QUESTION]: Can transactions be seen out-of-order within a single Go application?
- loop run backup, out of memory
- [FEATURE]: Allow holding back specific timestamps
- [BUG]: serializable behavior is broken HOT 5
- [BUG]: Corrupt and lost data HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from badger.