comment
This commit is contained in:
parent
b980d90b05
commit
af64c184f3
1 changed files with 47 additions and 0 deletions
|
@ -0,0 +1,47 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 1"""
|
||||
date="2021-06-23T17:05:38Z"
|
||||
content="""
|
||||
I think it could at least use synchronous=NORMAL, entirely safely, since it
|
||||
uses WAL mode.
|
||||
|
||||
"WAL mode is always consistent with synchronous=NORMAL, but WAL mode does
|
||||
lose durability. A transaction committed in WAL mode with
|
||||
synchronous=NORMAL might roll back following a power loss or system crash."
|
||||
|
||||
It's certianly already possible for a power loss or ctrl-c while git-annex
|
||||
is running to cause database changes to be lost, since git-annex buffers
|
||||
several changes together into a transaction and until it sends that
|
||||
transaction, can lose the data.
|
||||
|
||||
Exactly how well git-annex recovers from that probably varies, eg
|
||||
Database.Keys.reconcileStaged flushes the transactions before updating its
|
||||
own state files, so on power loss it will just run again and recover. The
|
||||
fsck database gets recovered likewise. But there are probably other write points
|
||||
where getting the data recovered is harder.
|
||||
|
||||
For example, moveAnnex updates the inode cache at the end when it populated
|
||||
a pointer file. If that database write is lost, git-annex won't know that
|
||||
the pointer file is populated with annexed content. So it will treat it as
|
||||
a possibly modified unlocked file, and when it eventually has a reason to,
|
||||
will re-hash it, and then should recover the lost information.
|
||||
|
||||
Quite possible there are situations where it fails to recover the lost
|
||||
information and does something annoying. But like I said, such situations
|
||||
can already happen and setting synchronous=NORMAL does not make them more
|
||||
likely.
|
||||
|
||||
It would still make sense to benchmark it before changing to it. It may
|
||||
well be that git-annex's buffering of changes into larger transactions
|
||||
already has a similar performance gain as the pragma and that the pragma
|
||||
does not speed it up.
|
||||
|
||||
As far as OFF goes, I'd need to see some serious performance improvements
|
||||
in benchmarking, and also be sure that git-annex always recovered well,
|
||||
which would have to somehow include detecting corrupted sqlite databases
|
||||
and rebuilding them. I don't know if it's really possible to detect.
|
||||
Might some form of corrupted sqlite database cause sqlite, and thus
|
||||
git-annex, to crash? And rebuilding might entail re-hashing the entire
|
||||
repository, so very expensive.
|
||||
"""]]
|
Loading…
Reference in a new issue