From 215909aca4b05da4b3d86d90196b92e87b628c63 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Sun, 5 Jun 2016 09:29:13 +2100 Subject: [PATCH] [PATCH 1/4] Use the Xapian::DB_RETRY_LOCK flag when available --- f4/eb6819fa325cc87f8cc6c479c6222c8862e508 | 134 ++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 f4/eb6819fa325cc87f8cc6c479c6222c8862e508 diff --git a/f4/eb6819fa325cc87f8cc6c479c6222c8862e508 b/f4/eb6819fa325cc87f8cc6c479c6222c8862e508 new file mode 100644 index 000000000..6440a778e --- /dev/null +++ b/f4/eb6819fa325cc87f8cc6c479c6222c8862e508 @@ -0,0 +1,134 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by arlo.cworth.org (Postfix) with ESMTP id B2A8D6DE02B5 + for ; Sat, 4 Jun 2016 05:29:42 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at cworth.org +X-Spam-Flag: NO +X-Spam-Score: -0.012 +X-Spam-Level: +X-Spam-Status: No, score=-0.012 tagged_above=-999 required=5 + tests=[AWL=-0.001, 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 zZofv5GO9FlM for ; + Sat, 4 Jun 2016 05:29:34 -0700 (PDT) +Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) + by arlo.cworth.org (Postfix) with ESMTPS id 8CE396DE02A9 + for ; Sat, 4 Jun 2016 05:29:34 -0700 (PDT) +Received: from remotemail by fethera.tethera.net with local (Exim 4.84) + (envelope-from ) + id 1b9Ahd-0004zM-T5; Sat, 04 Jun 2016 08:29:21 -0400 +Received: (nullmailer pid 23491 invoked by uid 1000); + Sat, 04 Jun 2016 12:29:27 -0000 +From: David Bremner +To: Istvan Marko , Jani Nikula , + notmuch@notmuchmail.org +Subject: [PATCH 1/4] Use the Xapian::DB_RETRY_LOCK flag when available +Date: Sat, 4 Jun 2016 09:29:13 -0300 +Message-Id: <1465043356-23420-2-git-send-email-david@tethera.net> +X-Mailer: git-send-email 2.8.1 +In-Reply-To: <1465043356-23420-1-git-send-email-david@tethera.net> +References: + <1465043356-23420-1-git-send-email-david@tethera.net> +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.20 +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, 04 Jun 2016 12:29:42 -0000 + +From: Istvan Marko + +Xapian 1.3 has introduced the DB_RETRY_LOCK flag (Xapian bug +275). Detect it in configure and use it if available. With this flag +commands that need the write lock will wait for their turn instead of +aborting when it's not immediately available. +--- + configure | 20 ++++++++++++++++++++ + lib/database.cc | 8 +++++++- + 2 files changed, 27 insertions(+), 1 deletion(-) + +diff --git a/configure b/configure +index ce1d698..e9de9c6 100755 +--- a/configure ++++ b/configure +@@ -392,6 +392,22 @@ EOF + rm -f _field_processor.o _field_processor.cc + + default_xapian_backend="" ++ # DB_RETRY_LOCK is only supported on Xapian > 1.3.2 ++ have_xapian_db_retry_lock=0 ++ printf "Checking for Xapian lock retry support... " ++ cat>_retry.cc< ++int flag = Xapian::DB_RETRY_LOCK; ++EOF ++ if ${CXX} ${CXXFLAGS_for_sh} ${xapian_cxxflags} -c _retry.cc -o _retry.o > /dev/null 2>&1 ++ then ++ have_xapian_db_retry_lock=1 ++ printf "Yes.\n" ++ else ++ printf "No. (optional)\n" ++ fi ++ rm -f _retry.o _retry.cc ++ + printf "Testing default Xapian backend... " + cat >_default_backend.cc < +@@ -1022,6 +1038,9 @@ HAVE_XAPIAN_COMPACT = ${have_xapian_compact} + # Whether the Xapian version in use supports field processors + HAVE_XAPIAN_FIELD_PROCESSOR = ${have_xapian_field_processor} + ++# Whether the Xapian version in use supports DB_RETRY_LOCK ++HAVE_XAPIAN_DB_RETRY_LOCK = ${have_xapian_db_retry_lock} ++ + # Whether the getpwuid_r function is standards-compliant + # (if not, then notmuch will #define _POSIX_PTHREAD_SEMANTICS + # to enable the standards-compliant version -- needed for Solaris) +@@ -1097,6 +1116,7 @@ COMMON_CONFIGURE_CFLAGS = \\ + -DSTD_ASCTIME=\$(STD_ASCTIME) \\ + -DHAVE_XAPIAN_COMPACT=\$(HAVE_XAPIAN_COMPACT) \\ + -DHAVE_XAPIAN_FIELD_PROCESSOR=\$(HAVE_XAPIAN_FIELD_PROCESSOR) \\ ++ -DHAVE_XAPIAN_DB_RETRY_LOCK=\$(HAVE_XAPIAN_DB_RETRY_LOCK) \\ + -DUTIL_BYTE_ORDER=\$(UTIL_BYTE_ORDER) + + CONFIGURE_CFLAGS = \$(COMMON_CONFIGURE_CFLAGS) +diff --git a/lib/database.cc b/lib/database.cc +index 9630000..e4f3ab5 100644 +--- a/lib/database.cc ++++ b/lib/database.cc +@@ -49,6 +49,12 @@ typedef struct { + #define STRINGIFY(s) _SUB_STRINGIFY(s) + #define _SUB_STRINGIFY(s) #s + ++#if HAVE_XAPIAN_DB_RETRY_LOCK ++#define DB_ACTION (Xapian::DB_CREATE_OR_OPEN | Xapian::DB_RETRY_LOCK) ++#else ++#define DB_ACTION Xapian::DB_CREATE_OR_OPEN ++#endif ++ + /* Here's the current schema for our database (for NOTMUCH_DATABASE_VERSION): + * + * We currently have three different types of documents (mail, ghost, +@@ -931,7 +937,7 @@ notmuch_database_open_verbose (const char *path, + + if (mode == NOTMUCH_DATABASE_MODE_READ_WRITE) { + notmuch->xapian_db = new Xapian::WritableDatabase (xapian_path, +- Xapian::DB_CREATE_OR_OPEN); ++ DB_ACTION); + } else { + notmuch->xapian_db = new Xapian::Database (xapian_path); + } +-- +2.8.1 + -- 2.26.2