mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
forbid atomic transactions on writable, upgradable databases
We can't (but currently do) allow upgrades within transactions because upgrades need their own transactions. We don't want to re-use the current transaction because bailing out of an upgrade would mean loosing all previous changes (because our "atomic" transactions don't commit before hand). This gives us two options: 1. Fail at the beginning of upgrade (tell the user to end the transaction, upgrade, and start over). 2. Don't allow the user to start the transaction. I went with the latter because: 1. There is no reason to call `begin_atomic` unless you intend to to write to the database and anyone intending to write to the database should upgrade it first. 2. This means that nothing inside an atomic transaction can ever fail with NOTMUCH_STATUS_UPGRADE_REQUIRED.
This commit is contained in:
parent
a79936cd6f
commit
c946356cdc
1 changed files with 3 additions and 0 deletions
|
@ -1635,6 +1635,9 @@ notmuch_database_begin_atomic (notmuch_database_t *notmuch)
|
|||
notmuch->atomic_nesting > 0)
|
||||
goto DONE;
|
||||
|
||||
if (notmuch_database_needs_upgrade(notmuch))
|
||||
return NOTMUCH_STATUS_UPGRADE_REQUIRED;
|
||||
|
||||
try {
|
||||
(static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db))->begin_transaction (false);
|
||||
} catch (const Xapian::Error &error) {
|
||||
|
|
Loading…
Reference in a new issue