Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id CF508431FD0 for ; Fri, 9 Sep 2011 17:44:00 -0700 (PDT) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Spam-Flag: NO X-Spam-Score: -0.799 X-Spam-Level: X-Spam-Status: No, score=-0.799 tagged_above=-999 required=5 tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 369nw+Wg805b for ; Fri, 9 Sep 2011 17:44:00 -0700 (PDT) Received: from mail-vw0-f44.google.com (mail-vw0-f44.google.com [209.85.212.44]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id E2F07431FB6 for ; Fri, 9 Sep 2011 17:43:59 -0700 (PDT) Received: by vws12 with SMTP id 12so1742450vws.3 for ; Fri, 09 Sep 2011 17:43:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=subject:from:to:cc:in-reply-to:references:content-type:date :message-id:mime-version:x-mailer; bh=A5p27cKREVTskxZ8vgobbgBHiNWHdVzUQh5yW+s/LS0=; b=nf/KH0RB1y7nNt595LDdiuxry3DRUxCWfnDIAtkI8z29gT1D6q4E9gcNzOg7S236GI Zn7/YW3O+9P5LY3uHUudSWYEgPI45N34zGxdPx7NgXEywoZlYXBVUnR7nkvMMUZi1GUv jNulej3JY6mMxwtafBIcB36z71RgTUk5ab0GU= Received: by 10.52.69.14 with SMTP id a14mr1232561vdu.410.1315615437814; Fri, 09 Sep 2011 17:43:57 -0700 (PDT) Received: from [192.168.1.190] (pool-68-163-190-45.bos.east.verizon.net [68.163.190.45]) by mx.google.com with ESMTPS id b18sm2736898vdt.1.2011.09.09.17.43.55 (version=SSLv3 cipher=OTHER); Fri, 09 Sep 2011 17:43:56 -0700 (PDT) Subject: Re: Patch: Flush and Reopen From: Martin Owens To: Austin Clements In-Reply-To: References: <1315445674.32058.183.camel@delen> <1315536861.2435.34.camel@delen> <87obyuj7q1.fsf@zancas.localnet> <1315590950.2435.59.camel@delen> Content-Type: multipart/mixed; boundary="=-jr1OYwXDmY6hjg7ZPprb" Date: Fri, 09 Sep 2011 20:43:53 -0400 Message-ID: <1315615433.2435.62.camel@delen> Mime-Version: 1.0 X-Mailer: Evolution 2.30.3 Cc: Notmuch developer list X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 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, 10 Sep 2011 00:44:00 -0000 --=-jr1OYwXDmY6hjg7ZPprb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On Fri, 2011-09-09 at 19:40 -0400, Austin Clements wrote: > > (indented correctly, of course). Reopen is a method of > Xapian::Database, which is what notmuch->xapian_db is anyway (unlike, > flush, which is a member of the subclass WritableDatabase and hence > requires the cast). And reopening is a sensible thing to do on both > read-only and read/write databases. See attached for the removal of the cast and conditional for reopen. > Also, in keeping with notmuch code style, you should use tabs for > indentation and put a space before the open paren argument lists. I couldn't detect a consistant style for the tab/spacing and it confused me greatly. Especially coming from python where spacing is critical. I've put in tabs, not sure if I've put in enough in the form required. Best Regards, Martin Owens --=-jr1OYwXDmY6hjg7ZPprb Content-Disposition: attachment; filename*0=0001-Add-flush-and-reopen-methods-to-the-libnotmuch-and-t.pat; filename*1=ch Content-Type: text/x-patch; name="0001-Add-flush-and-reopen-methods-to-the-libnotmuch-and-t.patch"; charset="UTF-8" Content-Transfer-Encoding: 7bit >From 0d7180fbf271d696e2105420db87aa2d1f0e72aa Mon Sep 17 00:00:00 2001 From: Martin Owens Date: Fri, 9 Sep 2011 20:40:21 -0400 Subject: [PATCH] Add flush and reopen methods to the libnotmuch and to the python bindings. Flush allows read_write databases to commit their changes, forcing a flush to disk and reopen allows a read_only database to reread from the disk. Also added a handler for Xapian DatabaseChangedError which occurs when the flush happens to read only databases. --- bindings/python/notmuch/database.py | 10 ++++++++++ debian/changelog | 6 +++++- debian/control | 2 +- debian/libnotmuch1.symbols | 2 ++ lib/database.cc | 30 ++++++++++++++++++++++++------ lib/notmuch.h | 8 ++++++++ 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/bindings/python/notmuch/database.py b/bindings/python/notmuch/database.py index f18ca14..b6c1c31 100644 --- a/bindings/python/notmuch/database.py +++ b/bindings/python/notmuch/database.py @@ -432,6 +432,16 @@ class Database(object): return Query(self, querystring) + def reopen(self): + """Reopens a read only database, when the data has changed, this is required.""" + if self._db is not None: + nmlib.notmuch_database_reopen(self._db) + + def flush(self): + """Flushes the search database, only available when in read-write.""" + if self._db is not None: + nmlib.notmuch_database_flush(self._db) + def __repr__(self): return "'Notmuch DB " + self.get_path() + "'" diff --git a/debian/changelog b/debian/changelog index c2b7552..565edfb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,12 @@ notmuch (0.8~rc1-1) experimental; urgency=low + [ David Bremner ] * Upstream release candidate. - -- David Bremner Tue, 06 Sep 2011 22:24:24 -0300 + [ Martin Owens (DoctorMO) ] + * Re-new-world-order + + -- Martin Owens (DoctorMO) Wed, 07 Sep 2011 18:19:50 -0400 notmuch (0.7-1) unstable; urgency=low diff --git a/debian/control b/debian/control index 03afdf4..a72fe1b 100644 --- a/debian/control +++ b/debian/control @@ -5,7 +5,7 @@ Maintainer: Carl Worth Uploaders: Jameson Graef Rollins , martin f. krafft , David Bremner Build-Depends: debhelper (>= 7.0.50~), pkg-config, libxapian-dev, - libgmime-2.4-dev, libtalloc-dev, libz-dev, python-all (>= 2.6.6-3~), + libgmime-2.4-dev, libtalloc-dev, libz-dev, python-all (>= 2.6.6), emacs23-nox | emacs23 (>=23~) | emacs23-lucid (>=23~) Standards-Version: 3.9.2 Homepage: http://notmuchmail.org/ diff --git a/debian/libnotmuch1.symbols b/debian/libnotmuch1.symbols index 05d86e6..7e42b0e 100644 --- a/debian/libnotmuch1.symbols +++ b/debian/libnotmuch1.symbols @@ -3,6 +3,7 @@ libnotmuch.so.1 libnotmuch1 #MINVER# notmuch_database_close@Base 0.3 notmuch_database_create@Base 0.3 notmuch_database_find_message@Base 0.3 + notmuch_database_flush@Base 0.3 notmuch_database_get_all_tags@Base 0.3 notmuch_database_get_directory@Base 0.3 notmuch_database_get_path@Base 0.3 @@ -10,6 +11,7 @@ libnotmuch.so.1 libnotmuch1 #MINVER# notmuch_database_needs_upgrade@Base 0.3 notmuch_database_open@Base 0.3 notmuch_database_remove_message@Base 0.3 + notmuch_database_reopen@Base 0.3 notmuch_database_upgrade@Base 0.3 notmuch_directory_destroy@Base 0.3 notmuch_directory_get_child_directories@Base 0.3 diff --git a/lib/database.cc b/lib/database.cc index 9c2f4ec..557c683 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -700,18 +700,36 @@ notmuch_database_open (const char *path, } void -notmuch_database_close (notmuch_database_t *notmuch) +notmuch_database_reopen (notmuch_database_t *notmuch) +{ + try { + notmuch->xapian_db->reopen (); + } catch (const Xapian::Error &error) { + if (! notmuch->exception_reported) { + fprintf (stderr, "Error: A Xapian exception occurred reopening database: %s\n", + error.get_msg().c_str()); + } + } +} + +void +notmuch_database_flush (notmuch_database_t *notmuch) { try { if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE) - (static_cast (notmuch->xapian_db))->flush (); + (static_cast (notmuch->xapian_db))->flush (); } catch (const Xapian::Error &error) { - if (! notmuch->exception_reported) { - fprintf (stderr, "Error: A Xapian exception occurred flushing database: %s\n", - error.get_msg().c_str()); + if (! notmuch->exception_reported) { + fprintf (stderr, "Error: A Xapian exception occurred flushing database: %s\n", + error.get_msg().c_str()); + } } - } +} +void +notmuch_database_close (notmuch_database_t *notmuch) +{ + notmuch_database_flush (notmuch); delete notmuch->term_gen; delete notmuch->query_parser; delete notmuch->xapian_db; diff --git a/lib/notmuch.h b/lib/notmuch.h index 974be8d..ca87b89 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -171,6 +171,14 @@ notmuch_database_t * notmuch_database_open (const char *path, notmuch_database_mode_t mode); +/* Reopen a read_only database when the data source has changed */ +void +notmuch_database_reopen (notmuch_database_t *database); + +/* Force a flush of the xapian database, also done on close */ +void +notmuch_database_flush (notmuch_database_t *database); + /* Close the given notmuch database, freeing all associated * resources. See notmuch_database_open. */ void -- 1.7.1 --=-jr1OYwXDmY6hjg7ZPprb--