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 7C98D2141D for ; Thu, 10 Jan 2019 21:35:50 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 5/7] searchmsg: remove unused fields for PSGI in Xapian results Date: Thu, 10 Jan 2019 21:35:47 +0000 Message-Id: <20190110213549.19778-6-e@80x24.org> In-Reply-To: <20190110213549.19778-1-e@80x24.org> References: <20190110213549.19778-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: These fields are only necessary in NNTP and not even stored in Xapian; so keeping them around for the PSGI web UI search results wastes nearly 80K when loading large result sets. --- lib/PublicInbox/SearchMsg.pm | 13 ++++++++++++- t/search.t | 10 ++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm index 65e085f..292efce 100644 --- a/lib/PublicInbox/SearchMsg.pm +++ b/lib/PublicInbox/SearchMsg.pm @@ -57,11 +57,14 @@ sub load_from_data ($$) { # To: and Cc: are stored to optimize HDR/XHDR in NNTP since # some NNTP clients will use that for message displays. + # NNTP only, and only stored in Over(view), not Xapian $self->{to}, $self->{cc}, $self->{blob}, $self->{mid}, + + # NNTP only $self->{bytes}, $self->{lines} ) = split(/\n/, $_[1]); @@ -79,10 +82,18 @@ sub load_expand { $self; } +# Only called by PSGI interface, not NNTP sub load_doc { my ($class, $doc) = @_; my $self = bless {}, $class; - load_expand($self, $doc); + my $smsg = load_expand($self, $doc); + + from_name($smsg); # fill in {from_name} so we can delete {from} + + # drop NNTP-only fields which aren't relevant to PSGI results: + # saves ~80K on a 200 item search result: + delete @$smsg{qw(from ts to cc bytes lines)}; + $smsg; } # :bytes and :lines metadata in RFC 3977 diff --git a/t/search.t b/t/search.t index 3c758e6..6415a64 100644 --- a/t/search.t +++ b/t/search.t @@ -341,7 +341,7 @@ $ibx->with_umask(sub { is(scalar(@$res), 1, "searched $pfx successfully for From:"); foreach my $smsg (@$res) { - like($smsg->from, qr/Laggy Sender/, + like($smsg->from_name, qr/Laggy Sender/, "From appears with $pfx"); } } @@ -358,16 +358,18 @@ $ibx->with_umask(sub { $res = $ro->query('q:theatre'); is(scalar(@$res), 1, 'only one quoted body'); - like($res->[0]->from, qr/\AQuoter/, 'got quoted body') if scalar(@$res); + like($res->[0]->from_name, qr/\AQuoter/, + 'got quoted body') if (scalar(@$res)); $res = $ro->query('nq:theatre'); is(scalar @$res, 1, 'only one non-quoted body'); - like($res->[0]->from, qr/\ANon-Quoter/, 'got non-quoted body') if scalar(@$res); + like($res->[0]->from_name, qr/\ANon-Quoter/, + 'got non-quoted body') if (scalar(@$res)); foreach my $pfx (qw(b: bs:)) { $res = $ro->query($pfx . 'theatre'); is(scalar @$res, 2, "searched both bodies for $pfx"); - like($res->[0]->from, qr/\ANon-Quoter/, + like($res->[0]->from_name, qr/\ANon-Quoter/, "non-quoter first for $pfx") if scalar(@$res); } } -- EW