From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <eg@gaute.vetsj.com>
Received: from localhost (localhost [127.0.0.1])
	by olra.theworths.org (Postfix) with ESMTP id AB025431FAF
	for <notmuch@notmuchmail.org>; Mon, 11 Aug 2014 05:18:08 -0700 (PDT)
X-Virus-Scanned: Debian amavisd-new at olra.theworths.org
X-Spam-Flag: NO
X-Spam-Score: -0.7
X-Spam-Level: 
X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5
	tests=[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 74MwyFmpTj8R for <notmuch@notmuchmail.org>;
	Mon, 11 Aug 2014 05:17:58 -0700 (PDT)
Received: from mail-qg0-f48.google.com (mail-qg0-f48.google.com
	[209.85.192.48]) (using TLSv1 with cipher RC4-SHA (128/128 bits))
	(No client certificate requested)
	by olra.theworths.org (Postfix) with ESMTPS id 120CA431FAE
	for <notmuch@notmuchmail.org>; Mon, 11 Aug 2014 05:17:58 -0700 (PDT)
Received: by mail-qg0-f48.google.com with SMTP id i50so8336100qgf.35
	for <notmuch@notmuchmail.org>; Mon, 11 Aug 2014 05:17:56 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
	d=1e100.net; s=20130820;
	h=x-gm-message-state:mime-version:date:message-id:subject:from:to
	:content-type;
	bh=zNSOgcDHBtBfm3lylf7EplrsfpI2eV7SX6iIlF1Edyw=;
	b=iJGTIxnT6TTZvB4t035d2YqzXuipL/xpGjKKS2j5qkRRLr8y3VtD1mKdlR4Fnh808x
	+zO4X0DZVdJDxt/yc/rg++Dv3YsNeGjhswW0u1FB7LkZJ5g1UfLw39955YNysjhCDu9J
	dys2bONIS/02aJKdO75wX3W8dnq/cQ7BjhB6FbVff5OCGS02+3M7uKfv14UwxyXr1XCu
	4FZelACrz+r65HIDNPHD4XroZX3lqnK3IW2/Wvjd3iIIarv7B0XKd0PvAlWCmwRwqXEq
	nafGEiN2rLvxKRCxzYzigNTL8eY8Ss3+3Pot4iaj0JyamjNBKr1TRfGW8+KV/gpXE+IV
	Ugdg==
X-Gm-Message-State: ALoCoQnNRkazZ2Ia8zvIDNVivGrJr7+FDOg+ha5SzL2v7T8U88SuHDsLk1uxoWIiWinreLZosh9V
MIME-Version: 1.0
X-Received: by 10.224.137.65 with SMTP id v1mr62602608qat.53.1407759475308;
	Mon, 11 Aug 2014 05:17:55 -0700 (PDT)
Received: by 10.140.86.148 with HTTP; Mon, 11 Aug 2014 05:17:54 -0700 (PDT)
Date: Mon, 11 Aug 2014 14:17:54 +0200
Message-ID: <CABKe4MvEdcsq8BZ-vq6R0Vnw87zEgBvqW_2F-Wysf5GNchqweg@mail.gmail.com>
Subject: DatabaseModifiedErrors causing troubles
From: Gaute Hope <eg@gaute.vetsj.com>
To: notmuch <notmuch@notmuchmail.org>
Content-Type: multipart/mixed; boundary=001a11c2cc3074c37c0500598b50
X-BeenThere: notmuch@notmuchmail.org
X-Mailman-Version: 2.1.13
Precedence: list
List-Id: "Use and development of the notmuch mail system."
	<notmuch.notmuchmail.org>
List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,
	<mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>
List-Archive: <http://notmuchmail.org/pipermail/notmuch>
List-Post: <mailto:notmuch@notmuchmail.org>
List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>
List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,
	<mailto:notmuch-request@notmuchmail.org?subject=subscribe>
X-List-Received-Date: Mon, 11 Aug 2014 12:18:08 -0000

--001a11c2cc3074c37c0500598b50
Content-Type: text/plain; charset=UTF-8

Hi,

I've been working on an application that keeps a read-only handle on
the notmuch database open for a long time. In some cases when a new
message is added along with some renames of other messages using
'notmuch new' while the application is running I get an Xapian
exception: DatabaseModifiedError:

  A Xapian exception occurred performing query: The revision being
read has been discarded - you
  should call Xapian::Database::reopen() and retry the operation.

Which seems to be printed from: notmuch_query_search_threads ->
notmuch_query_search_messages:294.

I have not been able to make a smaller test case at the moment (this
happens with offlineimap updating an maildir and notmuch new run
afterwards + some tagging).

I can work around this by checking for a NULL pointer returned from
notmuch_query_search_threads () and re-open the database
(notmuch_database_close () -> notmuch_database_open ()). But I have no
way of knowing programatically if this really is the error that has
happened. There should be some way of propagating the error
information or (even better for my case; for notmuch to reopen the
database), one option is the Gmime way of passing an pointer to an
error structure that is filled up by the notmuch interface function.

I made some attempts at exposing the ::reopen() function as suggested
by Xapian (http://xapian.org/docs/apidoc/html/classXapian_1_1Database.html#af140b1f8d948d13cf7be4a11a7c699a4),
but I end up with other errors afterwards. Possibly from leftover
structures created with the original database handle:

after notmuch_database_reopen (see attached patch for your reference):
  A Xapian exception occurred when reading header: Expected block
24615 to be level 1, not 0
  A Xapian exception occurred when reading header: Error reading block
419480589: got end of file
  A Xapian exception occurred when reading date: Error reading block
419480589: got end of file
  A Xapian exception occurred when reading header: Error reading block
419480589: got end of file


as mentioned, doing a manual _close and _open works. Again, the best
would be a consistent way to really know that this (or something else)
is the error that really happened.

Cheers, Gaute

--001a11c2cc3074c37c0500598b50
Content-Type: text/x-patch; charset=US-ASCII; 
	name="0001-lib-expose-XapianDatabae-reopen-through-notmuch_data.patch"
Content-Disposition: attachment; 
	filename="0001-lib-expose-XapianDatabae-reopen-through-notmuch_data.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hyprlohc0

RnJvbSA5MDM0MGZlNTlkNjc3Yzk4OTM1MmYwOGU4MmY5MDgwMTZjMjVmYWZhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYXV0ZSBIb3BlIDxlZ0BnYXV0ZS52ZXRzai5jb20+CkRhdGU6
IE1vbiwgMTEgQXVnIDIwMTQgMTQ6MTY6MTIgKzAyMDAKU3ViamVjdDogW1BBVENIXSBsaWI6IGV4
cG9zZSBYYXBpYW5EYXRhYmFlOjpyZW9wZW4oKSB0aHJvdWdoCiBub3RtdWNoX2RhdGFiYXNlX3Jl
b3BlbigpCgotLS0KIGxpYi9kYXRhYmFzZS5jYyB8IDE4ICsrKysrKysrKysrKysrKysrKwogbGli
L25vdG11Y2guaCAgIHwgMjIgKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2Vk
LCA0MCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbGliL2RhdGFiYXNlLmNjIGIvbGliL2Rh
dGFiYXNlLmNjCmluZGV4IGM3NjAyOTAuLjgwYWY0MTAgMTAwNjQ0Ci0tLSBhL2xpYi9kYXRhYmFz
ZS5jYworKysgYi9saWIvZGF0YWJhc2UuY2MKQEAgLTc3OCw2ICs3NzgsMjQgQEAgbm90bXVjaF9k
YXRhYmFzZV9vcGVuIChjb25zdCBjaGFyICpwYXRoLAogfQogCiBub3RtdWNoX3N0YXR1c190Citu
b3RtdWNoX2RhdGFiYXNlX3Jlb3BlbiAobm90bXVjaF9kYXRhYmFzZV90ICpub3RtdWNoKQorewor
ICB0cnkgeworICAgIG5vdG11Y2gtPnhhcGlhbl9kYi0+cmVvcGVuICgpOworCisgICAgcmV0dXJu
IE5PVE1VQ0hfU1RBVFVTX1NVQ0NFU1M7CisKKyAgfSBjYXRjaCAoY29uc3QgWGFwaWFuOjpFcnJv
ciAmZXJyb3IpIHsKKwkgIGlmICghIG5vdG11Y2gtPmV4Y2VwdGlvbl9yZXBvcnRlZCkgeworCSAg
ICBmcHJpbnRmIChzdGRlcnIsICJFcnJvcjogQSBYYXBpYW4gZXhjZXB0aW9uIG9jY3VycmVkIHdo
aWxlIHJlb3BlbmluZyBkYXRhYmFzZTogJXNcbiIsCisJCSAgICAgZXJyb3IuZ2V0X21zZygpLmNf
c3RyKCkpOworCSAgfQorCisgICAgcmV0dXJuIE5PVE1VQ0hfU1RBVFVTX1hBUElBTl9FWENFUFRJ
T047CisgIH0KK30KKworbm90bXVjaF9zdGF0dXNfdAogbm90bXVjaF9kYXRhYmFzZV9jbG9zZSAo
bm90bXVjaF9kYXRhYmFzZV90ICpub3RtdWNoKQogewogICAgIG5vdG11Y2hfc3RhdHVzX3Qgc3Rh
dHVzID0gTk9UTVVDSF9TVEFUVVNfU1VDQ0VTUzsKZGlmZiAtLWdpdCBhL2xpYi9ub3RtdWNoLmgg
Yi9saWIvbm90bXVjaC5oCmluZGV4IDNjNWVjOTguLjAwOTUwYWYgMTAwNjQ0Ci0tLSBhL2xpYi9u
b3RtdWNoLmgKKysrIGIvbGliL25vdG11Y2guaApAQCAtMjc3LDYgKzI3NywyOCBAQCBub3RtdWNo
X2RhdGFiYXNlX29wZW4gKGNvbnN0IGNoYXIgKnBhdGgsCiAJCSAgICAgICBub3RtdWNoX2RhdGFi
YXNlX3QgKipkYXRhYmFzZSk7CiAKIC8qKgorICogUmVvcGVuIHRoZSBnaXZlbiBub3RtdWNoIGRh
dGFiYXNlLgorICoKKyAqIFRoZSB1bmRlcmx5aW5nIFhhcGlhbiBkYXRhYmFzZSB3aWxsIGJlIHJl
LW9wZW5lZCB0byB0aGUgbGF0ZXN0CisgKiBhdmFpbGFibGUgdmVyc2lvbi4gSXQgY2FuIGJlIHVz
ZWQgdG8gbWFrZSBzdXJlIHRoZSBsYXRlc3QgcmVzdWx0cworICogYXJlIHJldHVybmVkIG9yIHRv
IHJlY292ZXIgZnJvbSBhbiBYYXBhaWFuOjpEYXRhYmFzZU1vZGlmaWVkRXJyb3IKKyAqIHdoaWNo
IGNhbiBvY2N1ciBhZnRlciBleHRlcm5hbCBkYXRhYmFzZSBtb2RpZmljYXRpb24uCisgKgorICog
Q2FsbGluZyBub3RtdWNoX2RhdGFiYXNlX3Jlb3BlbiBvbiBhIGRhdGFiYXNlIHRoYXQgaGFzIGJl
ZW4gY2xvc2VkCisgKiB3aWxsIHJlc3VsdCBpbiBhIE5PVE1VQ0hfU1RBVFVTX1hBUEFJQU5fRVhD
RVBUSU9OLgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCisgKiBOT1RNVUNIX1NUQVRVU19TVUND
RVNTOiBTdWNjZXNzZnVsbHkgcmVvcGVuZWQgZGF0YWJhc2UuCisgKgorICogTk9UTVVDSF9TVEFU
VVNfWEFQSUFOX0VYQ0VQVElPTjogQSBYYXBpYW4gZXhjZXB0aW9uIG9jY3VycmVkLgorICoKKyAq
Lworbm90bXVjaF9zdGF0dXNfdAorbm90bXVjaF9kYXRhYmFzZV9yZW9wZW4gKG5vdG11Y2hfZGF0
YWJhc2VfdCAqZGF0YWJhc2UpOworCisKKy8qKgogICogQ2xvc2UgdGhlIGdpdmVuIG5vdG11Y2gg
ZGF0YWJhc2UuCiAgKgogICogQWZ0ZXIgbm90bXVjaF9kYXRhYmFzZV9jbG9zZSBoYXMgYmVlbiBj
YWxsZWQsIGNhbGxzIHRvIG90aGVyCi0tIAoyLjAuMwoK
--001a11c2cc3074c37c0500598b50--