]> Sergey Matveev's repositories - public-inbox.git/commitdiff
searchmsg: remove unused fields for PSGI in Xapian results
authorEric Wong <e@80x24.org>
Tue, 8 Jan 2019 11:13:31 +0000 (11:13 +0000)
committerEric Wong <e@80x24.org>
Tue, 8 Jan 2019 19:27:56 +0000 (19:27 +0000)
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
t/search.t

index 65e085f4fb0ae0e3cbb03ba9c885c8d9d3432eb8..292efceed7c012bc36cee85fd79a5eb5795c6399 100644 (file)
@@ -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
index 3c758e68b7388408635f6d3747d13e096675e9d7..6415a644b5808f1ba693c9ff67f4b03e1841229b 100644 (file)
@@ -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);
        }
 }