syncthing/lib
Jakob Borg 488444354b lib/db: Don't panic
So, when first implementing the database layer I added panics on every
unexpected error condition mostly to be sure to flush out bugs and
inconsistencies. Then it became sort of standard, and we don't seem to
have many bugs here any more so the panics are usually caused by things
like checksum errors on read. But it's not an optimal user experience to
crash all the time.

Here I've weeded out most of the panics, while retaining a few "can't
happen" ones like errors on marshalling and write that we really can't
recover from.

For the rest, I'm mostly treating any read error as "entry didn't
exist". This should mean we'll rescan the file and correct the info (if
scanning) or treat it as a new file and do conflict handling (when
pulling). In some cases things like our global stats may be slightly
incorrect until a restart, if a database entry goes suddenly missing
during runtime.

All in all, I think this makes us a bit more robust and friendly without
introducing too many risks for the user. If the database is truly toast,
probably many other things on the system will be toast as well...

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4118
2017-04-25 22:52:37 +00:00
..
auto all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
beacon all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
config lib/model: Create root directory for paused folders (fixes #4094) 2017-04-23 23:50:56 +00:00
connections lib/connections: Allow negative ACL entries on devices (fixes #4096) 2017-04-13 17:43:29 +00:00
db lib/db: Don't panic 2017-04-25 22:52:37 +00:00
dialer all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
discover all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
events cmd/syncthing: Allow custom event subscriptions (fixes #1879) 2017-04-13 17:14:34 +00:00
fs lib/scanner: Use fs.Filesystem for all operations 2017-04-01 09:04:11 +00:00
ignore lib/model, gui: Allow creating and editing ignores of paused folders (fixes #3608) 2017-04-01 09:58:06 +00:00
logger cmd/syncthing: Extract interfaces for things the API depends on 2016-03-21 19:36:08 +00:00
model lib/model: Create root directory for paused folders (fixes #4094) 2017-04-23 23:50:56 +00:00
nat all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
osutil all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
pmp all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
protocol lib/protocol: Accept invalid files without blocks (fixes #4093) 2017-04-12 11:28:12 +02:00
rand all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
rc all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
relay all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
scanner lib/scanner: Use fs.Filesystem for all operations 2017-04-01 09:04:11 +00:00
sha256 all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
signature all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
stats all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
sync lib/sync: Make some tests not depend on real clock 2017-04-01 11:03:11 +00:00
tlsutil all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
upgrade all: Correct various typos 2017-02-25 08:12:13 +00:00
upnp all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
util all: Update license url to https (ref #3976) 2017-02-09 08:04:16 +01:00
versioner all: Correct various typos 2017-02-25 08:12:13 +00:00
weakhash all: Correct various typos 2017-02-25 08:12:13 +00:00