From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 0897C1F8C8 for ; Sat, 14 Aug 2021 00:29:45 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/3] lei : wait on remote mboxrd imports synchronously Date: Sat, 14 Aug 2021 00:29:43 +0000 Message-Id: <20210814002944.5126-3-e@80x24.org> In-Reply-To: <20210814002944.5126-1-e@80x24.org> References: <20210814002944.5126-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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 | 7 ++++--- lib/PublicInbox/LeiStore.pm | 1 + lib/PublicInbox/LeiXSearch.pm | 10 +++++++--- 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);