about summary refs log tree commit homepage
path: root/lib/PublicInbox/SearchIdx.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-08-14 10:21:08 +0000
committerEric Wong <e@80x24.org>2016-08-14 10:22:39 +0000
commit04ba9f9f26e15989944baa0204072f54c00d781f (patch)
tree573dc92e9be10b91bf966503d1eff4b22312f1de /lib/PublicInbox/SearchIdx.pm
parent843214095571db4ae68f5e92b8ef6057e1e6eba0 (diff)
downloadpublic-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/PublicInbox/SearchIdx.pm')
-rw-r--r--lib/PublicInbox/SearchIdx.pm20
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 {