From bf7fdfe4b939c3a97b20fd3e9b65c9cd493a692d Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 26 Sep 2021 00:02:32 +0000 Subject: lei note-event: ignore kw_changed exceptions The note-event worker may see changes before a Xapian shard commit happens, meaning keyword lookups fail as a result. Just emit the request to the lei/store worker since it's a fairly cheap operation at this point. We'll try harder to look for kw changes, too, since deduplication changes may lead to multiple docids being resolved for a single message. --- lib/PublicInbox/LeiSearch.pm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox/LeiSearch.pm') diff --git a/lib/PublicInbox/LeiSearch.pm b/lib/PublicInbox/LeiSearch.pm index a10e6e17..568277a6 100644 --- a/lib/PublicInbox/LeiSearch.pm +++ b/lib/PublicInbox/LeiSearch.pm @@ -9,6 +9,7 @@ use parent qw(PublicInbox::ExtSearch); # PublicInbox::Search->reopen use PublicInbox::Search qw(xap_terms); use PublicInbox::ContentHash qw(content_digest content_hash); use PublicInbox::MID qw(mids mids_for_index); +use Carp qw(croak); # get combined docid from over.num: # (not generic Xapian, only works with our sharding scheme) @@ -131,14 +132,19 @@ sub xoids_for { # returns true if $eml is indexed by lei/store and keywords don't match sub kw_changed { my ($self, $eml, $new_kw_sorted, $docids) = @_; + my $cur_kw; if ($eml) { my $xoids = xoids_for($self, $eml) // return; $docids //= []; @$docids = sort { $a <=> $b } values %$xoids; } - my $cur_kw = eval { msg_keywords($self, $docids->[0]) }; - die "E: #$docids->[0] keyword lookup failure: $@\n" if $@; - + for my $id (@$docids) { + $cur_kw = eval { msg_keywords($self, $id) } and last; + } + if (!defined($cur_kw) && $@) { + $docids = join(', num:', @$docids); + croak "E: num:$docids keyword lookup failure: $@"; + } # RFC 5550 sec 5.9 on the $Forwarded keyword states: # "Once set, the flag SHOULD NOT be cleared" if (exists($cur_kw->{forwarded}) && -- cgit v1.2.3-24-ge0c7