From a796afa762b6e204f611a69833064bf3656d1a62 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 May 2019 01:18:05 +0000 Subject: inbox: add ->over method to ease access One small step towards making installing Xapian optional for v2 and providing more WWW and NNTP functionality without it. --- lib/PublicInbox/Inbox.pm | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'lib/PublicInbox/Inbox.pm') diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index 286555f6..e3bc1048 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -168,12 +168,20 @@ sub mm { }; } -sub search { - my ($self) = @_; - $self->{search} ||= eval { +sub search ($;$) { + my ($self, $over_only) = @_; + my $srch = $self->{search} ||= eval { _cleanup_later($self); PublicInbox::Search->new($self, $self->{altid}); }; + # TODO: lazily load Xapian + # return $srch if $over_only || eval { $srch->xdb }; + # undef; +} + +sub over ($) { + my $srch = search($_[0], 1) or return; + $srch->{over_ro}; } sub try_cat { @@ -280,7 +288,7 @@ sub nntp_url { sub nntp_usable { my ($self) = @_; - my $ret = $self->mm && $self->search; + my $ret = mm($self) && over($self); $self->{mm} = $self->{search} = undef; $ret; } @@ -322,30 +330,32 @@ sub mid2num($$) { sub smsg_by_mid ($$) { my ($self, $mid) = @_; - my $srch = search($self) or return; + my $over = over($self) or return; # favor the Message-ID we used for the NNTP article number: defined(my $num = mid2num($self, $mid)) or return; - my $smsg = $srch->lookup_article($num) or return; + my $smsg = $over->get_art($num) or return; PublicInbox::SearchMsg::psgi_cull($smsg); } sub msg_by_mid ($$;$) { my ($self, $mid, $ref) = @_; - my $srch = search($self) or + + over($self) or return msg_by_path($self, mid2path($mid), $ref); + my $smsg = smsg_by_mid($self, $mid); $smsg ? msg_by_smsg($self, $smsg, $ref) : undef; } sub recent { my ($self, $opts, $after, $before) = @_; - search($self)->{over_ro}->recent($opts, $after, $before); + over($self)->recent($opts, $after, $before); } sub modified { my ($self) = @_; - if (my $srch = search($self)) { - my $msgs = $srch->{over_ro}->recent({limit => 1}); + if (my $over = over($self)) { + my $msgs = $over->recent({limit => 1}); if (my $smsg = $msgs->[0]) { return $smsg->{ts}; } -- cgit v1.2.3-24-ge0c7 From 70caf43a131fc5bdf7104f82f2acee9d5353d6a8 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 May 2019 01:18:07 +0000 Subject: www: use Inbox->over where appropriate We don't need to rely on Xapian search functionality for the majority of the WWW code, even. subject_normalized is moved to SearchMsg, where it (probably) makes more sense, anyways. --- lib/PublicInbox/Inbox.pm | 1 + 1 file changed, 1 insertion(+) (limited to 'lib/PublicInbox/Inbox.pm') diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index e3bc1048..dc186b73 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -172,6 +172,7 @@ sub search ($;$) { my ($self, $over_only) = @_; my $srch = $self->{search} ||= eval { _cleanup_later($self); + require PublicInbox::Search; PublicInbox::Search->new($self, $self->{altid}); }; # TODO: lazily load Xapian -- cgit v1.2.3-24-ge0c7 From 0b1de991a099b5e8b9a9e3e85b5eaaacc9362dbb Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 15 May 2019 01:18:08 +0000 Subject: lazy load Xapian and make it optional for v2 More tests work without Search::Xapian, now. Usability issues still need to be fixed --- lib/PublicInbox/Inbox.pm | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'lib/PublicInbox/Inbox.pm') diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index dc186b73..813ed997 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -25,7 +25,7 @@ sub cleanup_task () { my $next = {}; for my $ibx (values %$CLEANUP) { my $again; - foreach my $f (qw(mm search)) { + foreach my $f (qw(mm search over)) { delete $ibx->{$f} if SvREFCNT($ibx->{$f}) == 1; } my $expire = time - 60; @@ -37,7 +37,7 @@ sub cleanup_task () { $again = 1 if $git->cleanup($expire); } } - $again ||= !!($ibx->{mm} || $ibx->{search}); + $again ||= !!($ibx->{over} || $ibx->{mm} || $ibx->{search}); $next->{"$ibx"} = $ibx if $again; } $CLEANUP = $next; @@ -175,14 +175,17 @@ sub search ($;$) { require PublicInbox::Search; PublicInbox::Search->new($self, $self->{altid}); }; - # TODO: lazily load Xapian - # return $srch if $over_only || eval { $srch->xdb }; - # undef; + ($over_only || eval { $srch->xdb }) ? $srch : undef; } sub over ($) { - my $srch = search($_[0], 1) or return; - $srch->{over_ro}; + my ($self) = @_; + my $srch = search($self, 1) or return; + $self->{over} ||= eval { + my $over = $srch->{over_ro}; + $over->dbh_new; # may fail + $over; + } } sub try_cat { @@ -290,7 +293,7 @@ sub nntp_url { sub nntp_usable { my ($self) = @_; my $ret = mm($self) && over($self); - $self->{mm} = $self->{search} = undef; + $self->{mm} = $self->{over} = $self->{search} = undef; $ret; } -- cgit v1.2.3-24-ge0c7