]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei <q|up>: wait on remote mboxrd imports synchronously
authorEric Wong <e@80x24.org>
Sat, 14 Aug 2021 00:29:43 +0000 (00:29 +0000)
committerEric Wong <e@80x24.org>
Sat, 14 Aug 2021 05:57:47 +0000 (05:57 +0000)
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.

lib/PublicInbox/LeiRemote.pm
lib/PublicInbox/LeiStore.pm
lib/PublicInbox/LeiXSearch.pm

index 945d9990a535e7bb4a6c2b6d41ce40f99055b583..e7deecb8b7c3847f717349b3935f4f788b6b621a 100644 (file)
@@ -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)';
index e26b622d51279cb08488ddebd96f286a18ee57eb..ce66014fcb31fa2209e13230449e66b4b9b76144 100644 (file)
@@ -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}, '.');
index 393f25bf8f3fa182f0c9a27bcf3375c20fb49be5..971f3a06a7fd49442582e509b6709c957bf18e7d 100644 (file)
@@ -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);