]> Sergey Matveev's repositories - public-inbox.git/commitdiff
view: more culling for search threads
authorEric Wong <e@80x24.org>
Tue, 8 Jan 2019 11:19:57 +0000 (11:19 +0000)
committerEric Wong <e@80x24.org>
Tue, 8 Jan 2019 19:28:20 +0000 (19:28 +0000)
{mapping} overhead is now down to ~1.3M at the end of
a giant thread from hell.

lib/PublicInbox/Inbox.pm
lib/PublicInbox/SearchThread.pm
lib/PublicInbox/View.pm

index 73f5761a875b1d1e6b8f6bfa3512248f6db54b5f..d57e46d29b2785f5b358f125cdb8beda00e332ae 100644 (file)
@@ -302,8 +302,9 @@ sub smsg_by_mid ($$) {
        my ($self, $mid) = @_;
        my $srch = search($self) or return;
        # favor the Message-ID we used for the NNTP article number:
-       my $num = mid2num($self, $mid);
-       defined $num ? $srch->lookup_article($num) : undef;
+       defined(my $num = mid2num($self, $mid)) or return;
+       my $smsg = $srch->lookup_article($num) or return;
+       PublicInbox::SearchMsg::psgi_cull($smsg);
 }
 
 sub msg_by_mid ($$;$) {
index be29098073cab4bd1f67884750c5ee273e572336..931bd579c3f259d5158644b4216c0986bdd3f47b 100644 (file)
@@ -53,6 +53,11 @@ sub _add_message ($$) {
        my $this = _get_cont_for_id($id_table, $smsg->{mid});
        $this->{smsg} = $smsg;
 
+       # saves around 4K across 1K messages
+       # TODO: move this to a more appropriate place, breaks tests
+       # if we do it during psgi_cull
+       delete $smsg->{num};
+
        # B. For each element in the message's References field:
        defined(my $refs = $smsg->{references}) or return;
 
index 5ddb8425029c332380447691c2fde6caf24ec477..cd125e008c08ffe4c6178a60de79531241a4d179 100644 (file)
@@ -219,7 +219,10 @@ sub index_entry {
        $rv .= _th_index_lite($mid_raw, \$irt, $id, $ctx);
        my @tocc;
        my $ds = $smsg->ds; # for v1 non-Xapian/SQLite users
-       my $mime = delete $smsg->{mime}; # critical to memory use
+       # deleting {mime} is critical to memory use,
+       # the rest of the fields saves about 400K as we iterate across 1K msgs
+       my ($mime) = delete @$smsg{qw(mime ds ts blob subject)};
+
        my $hdr = $mime->header_obj;
        my $from = _hdr_names_html($hdr, 'From');
        obfuscate_addrs($obfs_ibx, $from) if $obfs_ibx;
@@ -311,7 +314,10 @@ sub _th_index_lite {
        my $nr_s = 0;
        my $siblings;
        if (my $smsg = $node->{smsg}) {
-               ($$irt) = (($smsg->{references} || '') =~ m/<([^>]+)>\z/);
+               # delete saves about 200KB on a 1K message thread
+               if (my $refs = delete $smsg->{references}) {
+                       ($$irt) = ($refs =~ m/<([^>]+)>\z/);
+               }
        }
        my $irt_map = $mapping->{$$irt} if defined $$irt;
        if (defined $irt_map) {