From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by arlo.cworth.org (Postfix) with ESMTP id 98E806DE1BD5 for ; Fri, 24 Feb 2017 19:45:36 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at cworth.org X-Spam-Flag: NO X-Spam-Score: -0.005 X-Spam-Level: X-Spam-Status: No, score=-0.005 tagged_above=-999 required=5 tests=[AWL=0.006, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=disabled Received: from arlo.cworth.org ([127.0.0.1]) by localhost (arlo.cworth.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id oswQj2-88W2p for ; Fri, 24 Feb 2017 19:45:35 -0800 (PST) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by arlo.cworth.org (Postfix) with ESMTPS id 5C78A6DE1B89 for ; Fri, 24 Feb 2017 19:45:34 -0800 (PST) Received: from remotemail by fethera.tethera.net with local (Exim 4.84_2) (envelope-from ) id 1chTHz-0005n0-OJ; Fri, 24 Feb 2017 22:44:55 -0500 Received: (nullmailer pid 19506 invoked by uid 1000); Sat, 25 Feb 2017 03:45:27 -0000 From: David Bremner To: notmuch@notmuchmail.org, eg@gaute.vetsj.com Subject: [PATCH 2/4] lib: add notmuch_database_reopen Date: Fri, 24 Feb 2017 23:45:11 -0400 Message-Id: <20170225034513.19427-3-david@tethera.net> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170225034513.19427-1-david@tethera.net> References: <20170225034513.19427-1-david@tethera.net> X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 25 Feb 2017 03:45:36 -0000 The main expected use is to recover from a Xapian::DatabaseChanged exception. --- lib/database-private.h | 4 ++++ lib/database.cc | 23 +++++++++++++++++++++++ lib/notmuch.h | 12 ++++++++++++ 3 files changed, 39 insertions(+) diff --git a/lib/database-private.h b/lib/database-private.h index 2fb60f5e..06882439 100644 --- a/lib/database-private.h +++ b/lib/database-private.h @@ -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; diff --git a/lib/database.cc b/lib/database.cc index 386dcd17..1e958b65 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -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), diff --git a/lib/notmuch.h b/lib/notmuch.h index 16da8be9..e9ed01dd 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -363,6 +363,18 @@ notmuch_status_t notmuch_database_close (notmuch_database_t *database); /** + * Reopen a (read-only) database, synching the database view with that + * on disk. + * + * @returns + * - NOTMUCH_STATUS_UNSUPPORTED_OPERATION: database is not read only + * - NOTMUCH_STATUS_XAPIAN_EXCEPTION: a Xapian exception occured trying to + * re-open the database. + */ +notmuch_status_t +notmuch_database_reopen (notmuch_database_t *database); + +/** * A callback invoked by notmuch_database_compact to notify the user * of the progress of the compaction process. */ -- 2.11.0