From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id CD8A51F6C1 for ; Sun, 14 Aug 2016 10:22:47 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] searchidx: do not release Xapian lock while (only) Msgmap is indexing Date: Sun, 14 Aug 2016 10:22:47 +0000 Message-Id: <20160814102247.12927-1-e@80x24.org> List-Id: SQLite might index quickly, so we hold the lock used by Xapian for the duration. This probably needs to be reworked entirely, actually. --- lib/PublicInbox/SearchIdx.pm | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 0eb07a1..f8155ec 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -436,19 +436,24 @@ sub _index_sync { my $mm = _msgmap_init($self); my $dbh = $mm->{dbh} if $mm; + my $mm_only; my $cb = sub { my ($commit, $more) = @_; if ($dbh) { $mm->last_commit($commit) if $commit; $dbh->commit; } - $xdb->set_metadata($mkey, $commit) if $mkey && $commit; - $xdb->commit_transaction; - $xdb = _xdb_release($self); + if (!$mm_only) { + $xdb->set_metadata($mkey, $commit) if $mkey && $commit; + $xdb->commit_transaction; + $xdb = _xdb_release($self); + } # let another process do some work... < if ($more) { - $xdb = _xdb_acquire($self); - $xdb->begin_transaction; + if (!$mm_only) { + $xdb = _xdb_acquire($self); + $xdb->begin_transaction; + } $dbh->begin_work if $dbh; } }; @@ -472,14 +477,13 @@ sub _index_sync { my $mkey_prev = $mkey; $mkey = undef; # ignore xapian, for now my $mlog = _git_log($self, $r); + $mm_only = 1; rlog($self, $mlog, *index_mm, *unindex_mm, $cb); - $mlog = undef; + $mm_only = $mlog = undef; # now deal with Xapian $mkey = $mkey_prev; $dbh = undef; - $xdb = _xdb_acquire($self); - $xdb->begin_transaction; rlog($self, $xlog, *index_mm2, *unindex_mm2, $cb); } } else { -- EW