mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 10:58:10 +01:00
9ade8160a6
This tests notmuch new's ability to recover from arbitrary stopping failures. It interrupts notmuch new after every database commit and, on every resulting database snapshot, re-runs notmuch new to completion and checks that the final database state is invariant.
50 lines
1.8 KiB
Text
50 lines
1.8 KiB
Text
# This gdb script runs notmuch new and simulates killing and
|
|
# restarting notmuch new after every Xapian commit. To simulate this
|
|
# more efficiently, this script runs notmuch new and, immediately
|
|
# after every Xapian commit, it *pauses* the running notmuch new,
|
|
# copies the entire database and maildir to a snapshot directory, and
|
|
# executes a full notmuch new on that snapshot, comparing the final
|
|
# results with the expected output. It can then resume the paused
|
|
# notmuch new, which is still running on the original maildir, and
|
|
# repeat this process.
|
|
|
|
set args new
|
|
|
|
# Make Xapian commit after every operation instead of batching
|
|
set environment XAPIAN_FLUSH_THRESHOLD = 1
|
|
|
|
# gdb can't keep track of a simple integer. This is me weeping.
|
|
shell echo 0 > outcount
|
|
|
|
shell touch inodes
|
|
|
|
break rename
|
|
commands
|
|
# As an optimization, only consider snapshots after a Xapian commit.
|
|
# Xapian overwrites record.base? as the last step in the commit.
|
|
shell echo > gdbcmd
|
|
shell stat -c %i $MAIL_DIR/.notmuch/xapian/record.base* > inodes.new
|
|
shell if cmp inodes inodes.new; then echo cont > gdbcmd; fi
|
|
shell mv inodes.new inodes
|
|
source gdbcmd
|
|
|
|
# Save a backtrace in case the test does fail
|
|
set logging file backtrace
|
|
set logging on
|
|
backtrace
|
|
set logging off
|
|
shell mv backtrace backtrace.`cat outcount`
|
|
|
|
# Snapshot the database
|
|
shell rm -r $MAIL_DIR.snap/.notmuch
|
|
shell cp -r $MAIL_DIR/.notmuch $MAIL_DIR.snap/.notmuch
|
|
# Restore the mtime of $MAIL_DIR.snap, which we just changed
|
|
shell touch -r $MAIL_DIR $MAIL_DIR.snap
|
|
# Run notmuch new to completion on the snapshot
|
|
shell NOTMUCH_CONFIG=${NOTMUCH_CONFIG}.snap XAPIAN_FLUSH_THRESHOLD=1000 notmuch new > /dev/null
|
|
shell NOTMUCH_CONFIG=${NOTMUCH_CONFIG}.snap notmuch search '*' > search.`cat outcount` 2>&1
|
|
shell echo $(expr $(cat outcount) + 1) > outcount
|
|
cont
|
|
end
|
|
|
|
run
|