mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
lib: add _notmuch_database_reopen
The main expected use is to recover from a Xapian::DatabaseChanged exception.
This commit is contained in:
parent
ae731c183a
commit
e17a914b77
3 changed files with 30 additions and 0 deletions
|
@ -207,6 +207,10 @@ struct _notmuch_database {
|
|||
unsigned long revision;
|
||||
const char *uuid;
|
||||
|
||||
/* Keep track of the number of times the database has been re-opened
|
||||
* (or other global invalidations of notmuch's caching)
|
||||
*/
|
||||
unsigned long view;
|
||||
Xapian::QueryParser *query_parser;
|
||||
Xapian::TermGenerator *term_gen;
|
||||
Xapian::ValueRangeProcessor *value_range_processor;
|
||||
|
|
|
@ -951,6 +951,7 @@ notmuch_database_open_verbose (const char *path,
|
|||
|
||||
notmuch->mode = mode;
|
||||
notmuch->atomic_nesting = 0;
|
||||
notmuch->view = 1;
|
||||
try {
|
||||
string last_thread_id;
|
||||
string last_mod;
|
||||
|
@ -1133,6 +1134,28 @@ notmuch_database_close (notmuch_database_t *notmuch)
|
|||
return status;
|
||||
}
|
||||
|
||||
notmuch_status_t
|
||||
_notmuch_database_reopen (notmuch_database_t *notmuch)
|
||||
{
|
||||
if (notmuch->mode != NOTMUCH_DATABASE_MODE_READ_ONLY)
|
||||
return NOTMUCH_STATUS_UNSUPPORTED_OPERATION;
|
||||
|
||||
try {
|
||||
notmuch->xapian_db->reopen ();
|
||||
} catch (const Xapian::Error &error) {
|
||||
if (! notmuch->exception_reported) {
|
||||
_notmuch_database_log (notmuch, "Error: A Xapian exception reopening database: %s\n",
|
||||
error.get_msg ().c_str ());
|
||||
notmuch->exception_reported = TRUE;
|
||||
}
|
||||
return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
|
||||
}
|
||||
|
||||
notmuch->view++;
|
||||
|
||||
return NOTMUCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static int
|
||||
unlink_cb (const char *path,
|
||||
unused (const struct stat *sb),
|
||||
|
|
|
@ -192,6 +192,9 @@ _notmuch_message_id_compressed (void *ctx, const char *message_id);
|
|||
notmuch_status_t
|
||||
_notmuch_database_ensure_writable (notmuch_database_t *notmuch);
|
||||
|
||||
notmuch_status_t
|
||||
_notmuch_database_reopen (notmuch_database_t *notmuch);
|
||||
|
||||
void
|
||||
_notmuch_database_log (notmuch_database_t *notmuch,
|
||||
const char *format, ...);
|
||||
|
|
Loading…
Reference in a new issue