notmuch/test/T385-transactions.sh
David Bremner e2a3e5fa51 lib: autocommit after some number of completed transactions
This change addresses two known issues with large sets of changes to
the database.  The first is that as reported by Steven Allen [1],
notmuch commits are not "flushed" when they complete, which means that
if there is an open transaction when the database closes (or e.g. the
program crashes) then all changes since the last commit will be
discarded (nothing is irrecoverably lost for "notmuch new", as the
indexing process just restarts next time it is run).  This does not
really "fix" the issue reported in [1]; that seems rather difficult
given how transactions work in Xapian. On the other hand, with the
default settings, this should mean one only loses less than a minutes
worth of work.  The second issue is the occasionally reported "storm"
of disk writes when notmuch finishes. I don't yet have a test for
this, but I think committing as we go should reduce the amount of work
when finalizing the database.

[1]: id:20151025210215.GA3754@stebalien.com
2021-06-27 14:03:00 -03:00

35 lines
805 B
Bash
Executable file

#!/usr/bin/env bash
test_description='transactions'
. $(dirname "$0")/test-lib.sh || exit 1
make_shim no-close <<EOF
#include <notmuch.h>
#include <stdio.h>
notmuch_status_t
notmuch_database_close (notmuch_database_t *notmuch)
{
return notmuch_database_begin_atomic (notmuch);
}
EOF
for i in `seq 1 1024`
do
generate_message '[subject]="'"subject $i"'"' \
'[body]="'"body $i"'"'
done
test_begin_subtest "initial new"
NOTMUCH_NEW > OUTPUT
cat <<EOF > EXPECTED
Added 1024 new messages to the database.
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "Some changes saved with open transaction"
notmuch config set database.autocommit 1000
rm -r ${MAIL_DIR}/.notmuch
notmuch_with_shim no-close new
output=$(notmuch count '*')
test_expect_equal "$output" "1000"
test_done