mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 13:44:12 +01:00
new: Wrap adding and removing messages in atomic sections.
This addresses atomicity of tag synchronization, the last atomicity problems in notmuch new. Each message add or remove is wrapped in its own atomic section, so interrupting notmuch new doesn't lose progress.
This commit is contained in:
parent
8305f0aac7
commit
bff30540d8
2 changed files with 16 additions and 1 deletions
|
@ -450,6 +450,12 @@ add_files_recursive (notmuch_database_t *notmuch,
|
|||
fflush (stdout);
|
||||
}
|
||||
|
||||
status = notmuch_database_begin_atomic (notmuch);
|
||||
if (status) {
|
||||
ret = status;
|
||||
goto DONE;
|
||||
}
|
||||
|
||||
status = notmuch_database_add_message (notmuch, next, &message);
|
||||
switch (status) {
|
||||
/* success */
|
||||
|
@ -490,6 +496,12 @@ add_files_recursive (notmuch_database_t *notmuch,
|
|||
goto DONE;
|
||||
}
|
||||
|
||||
status = notmuch_database_end_atomic (notmuch);
|
||||
if (status) {
|
||||
ret = status;
|
||||
goto DONE;
|
||||
}
|
||||
|
||||
if (message) {
|
||||
notmuch_message_destroy (message);
|
||||
message = NULL;
|
||||
|
@ -728,6 +740,9 @@ remove_filename (notmuch_database_t *notmuch,
|
|||
{
|
||||
notmuch_status_t status;
|
||||
notmuch_message_t *message;
|
||||
status = notmuch_database_begin_atomic (notmuch);
|
||||
if (status)
|
||||
return status;
|
||||
message = notmuch_database_find_message_by_filename (notmuch, path);
|
||||
status = notmuch_database_remove_message (notmuch, path);
|
||||
if (status == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) {
|
||||
|
@ -737,6 +752,7 @@ remove_filename (notmuch_database_t *notmuch,
|
|||
} else
|
||||
add_files_state->removed_messages++;
|
||||
notmuch_message_destroy (message);
|
||||
notmuch_database_end_atomic (notmuch);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
@ -94,7 +94,6 @@ for ((i = 0; i < $outcount; i++)); do
|
|||
done
|
||||
|
||||
test_begin_subtest '"notmuch new" is idempotent under arbitrary aborts'
|
||||
test_subtest_known_broken
|
||||
test_expect_equal_file GDB searchall expectall
|
||||
|
||||
test_expect_success GDB "detected $outcount>10 abort points" "test $outcount -gt 10"
|
||||
|
|
Loading…
Reference in a new issue