about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-08-14 00:29:43 +0000
committerEric Wong <e@80x24.org>2021-08-14 05:57:47 +0000
commit7d576adffbbd61f04278937d882d7ffde570cecd (patch)
tree5bc3ed5d6ae1b1b59cda64153dfd2b20c7f868ca
parentc7bcfe6cd6648ff015dcf29155c0c9c40e4f2b00 (diff)
downloadpublic-inbox-7d576adffbbd61f04278937d882d7ffde570cecd.tar.gz
lei <q|up>: wait on remote mboxrd imports synchronously
This ought to avoid /Document \d+ not found/ errors from Xapian
when seeing a message for the first time by not attempting to
read keywords for totally unseen messages.
-rw-r--r--lib/PublicInbox/LeiRemote.pm7
-rw-r--r--lib/PublicInbox/LeiStore.pm1
-rw-r--r--lib/PublicInbox/LeiXSearch.pm10
3 files changed, 12 insertions, 6 deletions
diff --git a/lib/PublicInbox/LeiRemote.pm b/lib/PublicInbox/LeiRemote.pm
index 945d9990..e7deecb8 100644
--- a/lib/PublicInbox/LeiRemote.pm
+++ b/lib/PublicInbox/LeiRemote.pm
@@ -26,11 +26,12 @@ sub _each_mboxrd_eml { # callback for MboxReader->mboxrd
         my ($eml, $self) = @_;
         my $lei = $self->{lei};
         my $xoids = $lei->{ale}->xoids_for($eml, 1);
+        my $smsg = bless {}, 'PublicInbox::Smsg';
         if ($lei->{sto} && !$xoids) { # memoize locally
-                $lei->{sto}->ipc_do('add_eml', $eml);
+                my $res = $lei->{sto}->ipc_do('add_eml', $eml);
+                $smsg = $res if ref($res) eq ref($smsg);
         }
-        my $smsg = bless {}, 'PublicInbox::Smsg';
-        $smsg->{blob} = $xoids ? (keys(%$xoids))[0]
+        $smsg->{blob} //= $xoids ? (keys(%$xoids))[0]
                                 : git_sha(1, $eml)->hexdigest;
         $smsg->populate($eml);
         $smsg->{mid} //= '(none)';
diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm
index e26b622d..ce66014f 100644
--- a/lib/PublicInbox/LeiStore.pm
+++ b/lib/PublicInbox/LeiStore.pm
@@ -329,6 +329,7 @@ sub add_eml {
                 }
                 \@docids;
         } else { # totally new message
+                delete $smsg->{-oidx}; # for IPC-friendliness
                 $smsg->{num} = $oidx->adj_counter('eidx_docid', '+');
                 $oidx->add_overview($eml, $smsg);
                 $oidx->add_xref3($smsg->{num}, -1, $smsg->{blob}, '.');
diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm
index 393f25bf..971f3a06 100644
--- a/lib/PublicInbox/LeiXSearch.pm
+++ b/lib/PublicInbox/LeiXSearch.pm
@@ -266,11 +266,15 @@ sub _smsg_fill ($$) {
 sub each_remote_eml { # callback for MboxReader->mboxrd
         my ($eml, $self, $lei, $each_smsg) = @_;
         my $xoids = $lei->{ale}->xoids_for($eml, 1);
+        my $smsg = bless {}, 'PublicInbox::Smsg';
         if ($self->{import_sto} && !$xoids) {
-                $self->{import_sto}->ipc_do('add_eml', $eml);
+                my $res = $self->{import_sto}->ipc_do('add_eml', $eml);
+                if (ref($res) eq ref($smsg)) { # totally new message
+                        $smsg = $res;
+                        $smsg->{kw} = []; # short-circuit xsmsg_vmd
+                }
         }
-        my $smsg = bless {}, 'PublicInbox::Smsg';
-        $smsg->{blob} = $xoids ? (keys(%$xoids))[0]
+        $smsg->{blob} //= $xoids ? (keys(%$xoids))[0]
                                 : git_sha(1, $eml)->hexdigest;
         _smsg_fill($smsg, $eml);
         wait_startq($lei);