about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-06-21 03:16:53 +0000
committerEric Wong <e@80x24.org>2016-06-21 03:21:11 +0000
commit7ee0fb32fbc59b63a26e2926f3f376bb06f4a41b (patch)
tree723a9ba9fed98b9f62f3fb05a1744f67c915bbcf /lib/PublicInbox
parent1ac3134bb4cc47db05d9e4260e593f7867b46dcb (diff)
downloadpublic-inbox-7ee0fb32fbc59b63a26e2926f3f376bb06f4a41b.tar.gz
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.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/Search.pm3
-rw-r--r--lib/PublicInbox/SearchIdx.pm5
2 files changed, 5 insertions, 3 deletions
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) {