diff options
author | Eric Wong <e@80x24.org> | 2016-08-14 10:21:08 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-08-14 10:22:39 +0000 |
commit | 04ba9f9f26e15989944baa0204072f54c00d781f (patch) | |
tree | 573dc92e9be10b91bf966503d1eff4b22312f1de /lib | |
parent | 843214095571db4ae68f5e92b8ef6057e1e6eba0 (diff) | |
download | public-inbox-04ba9f9f26e15989944baa0204072f54c00d781f.tar.gz |
SQLite might index quickly, so we hold the lock used by Xapian for the duration. This probably needs to be reworked entirely, actually.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/SearchIdx.pm | 20 |
1 files changed, 12 insertions, 8 deletions
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 { |