]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Inbox.pm
rename {pi_config} fields to {pi_cfg}
[public-inbox.git] / lib / PublicInbox / Inbox.pm
index 64b12345b22dc6a5cdfb9c41380957a293921159..586bd56110e5e548f3ea9c01bdf52e45915b5397 100644 (file)
@@ -85,7 +85,7 @@ sub _set_uint ($$$) {
 }
 
 sub _set_limiter ($$$) {
-       my ($self, $pi_config, $pfx) = @_;
+       my ($self, $pi_cfg, $pfx) = @_;
        my $lkey = "-${pfx}_limiter";
        $self->{$lkey} ||= do {
                # full key is: publicinbox.$NAME.httpbackendmax
@@ -96,7 +96,7 @@ sub _set_limiter ($$$) {
                        require PublicInbox::Qspawn;
                        $lim = PublicInbox::Qspawn::Limiter->new($val);
                } elsif ($val =~ /\A[a-z][a-z0-9]*\z/) {
-                       $lim = $pi_config->limiter($val);
+                       $lim = $pi_cfg->limiter($val);
                        warn "$mkey limiter=$val not found\n" if !$lim;
                } else {
                        warn "$mkey limiter=$val not understood\n";
@@ -110,10 +110,10 @@ sub new {
        my $v = $opts->{address} ||= [ 'public-inbox@example.com' ];
        my $p = $opts->{-primary_address} = ref($v) eq 'ARRAY' ? $v->[0] : $v;
        $opts->{domain} = ($p =~ /\@(\S+)\z/) ? $1 : 'localhost';
-       my $pi_config = delete $opts->{-pi_config};
-       _set_limiter($opts, $pi_config, 'httpbackend');
+       my $pi_cfg = delete $opts->{-pi_cfg};
+       _set_limiter($opts, $pi_cfg, 'httpbackend');
        _set_uint($opts, 'feedmax', 25);
-       $opts->{nntpserver} ||= $pi_config->{'publicinbox.nntpserver'};
+       $opts->{nntpserver} ||= $pi_cfg->{'publicinbox.nntpserver'};
        my $dir = $opts->{inboxdir};
        if (defined $dir && -f "$dir/inbox.lock") {
                $opts->{version} = 2;
@@ -133,8 +133,7 @@ sub new {
 sub version { $_[0]->{version} // 1 }
 
 sub git_epoch {
-       my ($self, $epoch) = @_;
-       $self->version == 2 or return;
+       my ($self, $epoch) = @_; # v2-only, callers always supply $epoch
        $self->{"$epoch.git"} ||= do {
                my $git_dir = "$self->{inboxdir}/git/$epoch.git";
                return unless -d $git_dir;
@@ -192,30 +191,34 @@ sub mm {
        };
 }
 
-sub search ($;$$) {
-       my ($self, $over_only, $ctx) = @_;
-       my $srch = $self->{search} ||= eval {
+sub search {
+       my ($self) = @_;
+       my $srch = $self->{search} //= eval {
                _cleanup_later($self);
                require PublicInbox::Search;
                PublicInbox::Search->new($self);
        };
-       ($over_only || eval { $srch->xdb }) ? $srch : do {
-               $ctx and $ctx->{env}->{'psgi.errors'}->print(<<EOF);
-`$self->{name}' search went away unexpectedly
-EOF
-               undef;
-       };
+       (eval { $srch->xdb }) ? $srch : undef;
 }
 
+# isrch is preferred for read-only interfaces if available since it
+# reduces kernel cache and FD overhead
+sub isrch { $_[0]->{isrch} // search($_[0]) }
+
 sub over {
        $_[0]->{over} //= eval {
-               my $srch = search($_[0], 1) or return;
+               my $srch = $_[0]->{search} //= eval {
+                       _cleanup_later($_[0]);
+                       require PublicInbox::Search;
+                       PublicInbox::Search->new($_[0]);
+               };
                my $over = PublicInbox::Over->new("$srch->{xpfx}/over.sqlite3");
                $over->dbh; # may fail
                $over;
        };
 }
 
+
 sub try_cat {
        my ($path) = @_;
        my $rv = '';
@@ -430,4 +433,6 @@ sub on_unlock {
 
 sub uidvalidity  { $_[0]->{uidvalidity} //= $_[0]->mm->created_at }
 
+sub eidx_key { $_[0]->{newsgroup} // $_[0]->{inboxdir} }
+
 1;