From 7ee0fb32fbc59b63a26e2926f3f376bb06f4a41b Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 21 Jun 2016 03:16:53 +0000 Subject: searchidx: merge old thread id from ghosts We failed to discard old thread IDs when vivifying ghosts due to out-of-order message arrival. This rectifies the failure and will trigger a re-index. --- lib/PublicInbox/Search.pm | 3 ++- lib/PublicInbox/SearchIdx.pm | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'lib/PublicInbox') diff --git a/lib/PublicInbox/Search.pm b/lib/PublicInbox/Search.pm index 8c0bab18..bf50365a 100644 --- a/lib/PublicInbox/Search.pm +++ b/lib/PublicInbox/Search.pm @@ -36,7 +36,8 @@ use constant { # 8 - remove redundant/unneeded document data # 9 - disable Message-ID compression (SHA-1) # 10 - optimize doc for NNTP overviews - SCHEMA_VERSION => 10, + # 11 - merge threads when vivifying ghosts + SCHEMA_VERSION => 11, # n.b. FLAG_PURE_NOT is expensive not suitable for a public website # as it could become a denial-of-service vector diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index 31346876..58eccc1a 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -150,7 +150,7 @@ sub add_message { if ($was_ghost) { $doc_id = $smsg->doc_id; - $self->link_message($smsg); + $self->link_message($smsg, $smsg->thread_id); $doc->set_data($smsg->to_doc_data); $db->replace_document($doc_id, $doc); } else { @@ -211,7 +211,7 @@ sub next_thread_id { } sub link_message { - my ($self, $smsg) = @_; + my ($self, $smsg, $old_tid) = @_; my $doc = $smsg->{doc}; my $mid = $smsg->mid; my $mime = $smsg->mime; @@ -247,6 +247,7 @@ sub link_message { # but we can never trust clients to do the right thing my $ref = shift @refs; $tid = $self->_resolve_mid_to_tid($ref); + $self->merge_threads($tid, $old_tid) if defined $old_tid; # the rest of the refs should point to this tid: foreach $ref (@refs) { -- cgit v1.2.3-24-ge0c7