mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-25 04:18: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;
|
unsigned long revision;
|
||||||
const char *uuid;
|
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::QueryParser *query_parser;
|
||||||
Xapian::TermGenerator *term_gen;
|
Xapian::TermGenerator *term_gen;
|
||||||
Xapian::ValueRangeProcessor *value_range_processor;
|
Xapian::ValueRangeProcessor *value_range_processor;
|
||||||
|
|
|
@ -951,6 +951,7 @@ notmuch_database_open_verbose (const char *path,
|
||||||
|
|
||||||
notmuch->mode = mode;
|
notmuch->mode = mode;
|
||||||
notmuch->atomic_nesting = 0;
|
notmuch->atomic_nesting = 0;
|
||||||
|
notmuch->view = 1;
|
||||||
try {
|
try {
|
||||||
string last_thread_id;
|
string last_thread_id;
|
||||||
string last_mod;
|
string last_mod;
|
||||||
|
@ -1133,6 +1134,28 @@ notmuch_database_close (notmuch_database_t *notmuch)
|
||||||
return status;
|
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
|
static int
|
||||||
unlink_cb (const char *path,
|
unlink_cb (const char *path,
|
||||||
unused (const struct stat *sb),
|
unused (const struct stat *sb),
|
||||||
|
|
|
@ -192,6 +192,9 @@ _notmuch_message_id_compressed (void *ctx, const char *message_id);
|
||||||
notmuch_status_t
|
notmuch_status_t
|
||||||
_notmuch_database_ensure_writable (notmuch_database_t *notmuch);
|
_notmuch_database_ensure_writable (notmuch_database_t *notmuch);
|
||||||
|
|
||||||
|
notmuch_status_t
|
||||||
|
_notmuch_database_reopen (notmuch_database_t *notmuch);
|
||||||
|
|
||||||
void
|
void
|
||||||
_notmuch_database_log (notmuch_database_t *notmuch,
|
_notmuch_database_log (notmuch_database_t *notmuch,
|
||||||
const char *format, ...);
|
const char *format, ...);
|
||||||
|
|
Loading…
Reference in a new issue