From 04ba9f9f26e15989944baa0204072f54c00d781f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 14 Aug 2016 10:21:08 +0000 Subject: searchidx: do not release Xapian lock while (only) Msgmap is indexing 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(-) (limited to 'lib/PublicInbox/SearchIdx.pm') diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 0eb07a1c..f8155ecc 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 { -- cgit v1.2.3-24-ge0c7