about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-01-08 11:13:29 +0000
committerEric Wong <e@80x24.org>2019-01-08 19:27:49 +0000
commit588111b86a69c28384f4c907fe7b1b87aa484f32 (patch)
treefaab13985ea9ef392c47fe9627b06a634e9ece6f
parentbbb8c7788ebaa7f3679d387725ee1998f0b2f615 (diff)
downloadpublic-inbox-588111b86a69c28384f4c907fe7b1b87aa484f32.tar.gz
We don't need to be carrying this around with the many SearchMsg
objects we have.  This saves about 20K from a large SearchView
"&x=t" response.
-rw-r--r--lib/PublicInbox/SearchIdx.pm6
-rw-r--r--lib/PublicInbox/SearchMsg.pm19
2 files changed, 10 insertions, 15 deletions
diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm
index fd48169d..7a8ebf35 100644
--- a/lib/PublicInbox/SearchIdx.pm
+++ b/lib/PublicInbox/SearchIdx.pm
@@ -282,7 +282,7 @@ sub index_body ($$$) {
 sub add_xapian ($$$$$) {
         my ($self, $mime, $num, $oid, $mids, $mid0) = @_;
         my $smsg = PublicInbox::SearchMsg->new($mime);
-        my $doc = $smsg->{doc};
+        my $doc = Search::Xapian::Document->new;
         my $subj = $smsg->subject;
         add_val($doc, PublicInbox::Search::TS(), $smsg->ts);
         my @ds = gmtime($smsg->ds);
@@ -439,8 +439,8 @@ sub remove_by_oid {
         for (; $head != $tail; $head->inc) {
                 my $docid = $head->get_docid;
                 my $doc = $db->get_document($docid);
-                my $smsg = PublicInbox::SearchMsg->wrap($doc, $mid);
-                $smsg->load_expand;
+                my $smsg = PublicInbox::SearchMsg->wrap($mid);
+                $smsg->load_expand($doc);
                 if ($smsg->{blob} eq $oid) {
                         push(@delete, $docid);
                 }
diff --git a/lib/PublicInbox/SearchMsg.pm b/lib/PublicInbox/SearchMsg.pm
index 5a2ca83b..65e085f4 100644
--- a/lib/PublicInbox/SearchMsg.pm
+++ b/lib/PublicInbox/SearchMsg.pm
@@ -13,20 +13,18 @@ use Time::Local qw(timegm);
 
 sub new {
         my ($class, $mime) = @_;
-        my $doc = Search::Xapian::Document->new;
-        bless { doc => $doc, mime => $mime }, $class;
+        bless { mime => $mime }, $class;
 }
 
 sub wrap {
-        my ($class, $doc, $mid) = @_;
-        bless { doc => $doc, mime => undef, mid => $mid }, $class;
+        my ($class, $mid) = @_;
+        bless { mid => $mid }, $class;
 }
 
 sub get {
         my ($class, $head, $db, $mid) = @_;
         my $doc_id = $head->get_docid;
-        my $doc = $db->get_document($doc_id);
-        load_expand(wrap($class, $doc, $mid))
+        load_expand(wrap($class, $mid), $db->get_document($doc_id));
 }
 
 sub get_val ($$) {
@@ -70,8 +68,7 @@ sub load_from_data ($$) {
 }
 
 sub load_expand {
-        my ($self) = @_;
-        my $doc = $self->{doc};
+        my ($self, $doc) = @_;
         my $data = $doc->get_data or return;
         $self->{ts} = get_val($doc, PublicInbox::Search::TS());
         my $dt = get_val($doc, PublicInbox::Search::DT());
@@ -84,8 +81,8 @@ sub load_expand {
 
 sub load_doc {
         my ($class, $doc) = @_;
-        my $self = bless { doc => $doc }, $class;
-        $self->load_expand;
+        my $self = bless {}, $class;
+        load_expand($self, $doc);
 }
 
 # :bytes and :lines metadata in RFC 3977
@@ -164,8 +161,6 @@ sub mid ($;$) {
                 $self->{mid} = $mid;
         } elsif (defined(my $rv = $self->{mid})) {
                 $rv;
-        } elsif ($self->{doc}) {
-                die "SHOULD NOT HAPPEN\n";
         } else {
                 die "NO {mime} for mid\n" unless $self->{mime};
                 $self->_extract_mid; # v1 w/o Xapian