]> Sergey Matveev's repositories - public-inbox.git/commitdiff
extmsg: remove expensive git path checks
authorEric Wong (Contractor, The Linux Foundation) <e@80x24.org>
Wed, 18 Apr 2018 09:13:14 +0000 (09:13 +0000)
committerEric Wong (Contractor, The Linux Foundation) <e@80x24.org>
Wed, 18 Apr 2018 09:14:18 +0000 (09:14 +0000)
Searching across different inboxes is expensive without
SQLite (or Xapian) installed, so avoid doing expensive tree
lookups in git.  Since SQLite is required for Xapian
support anyways, we won't need to check Xapian, either.

Sites without SQLite installed will simply 404 if somebody
requests a message which isn't in the current inbox.

lib/PublicInbox/ExtMsg.pm
lib/PublicInbox/Inbox.pm

index c71510f548191b966cfb4835256764f4ceeae7f3..a6f516df7bd4d3cfb9532fbf504f6d0c2b55f3cd 100644 (file)
@@ -31,30 +31,19 @@ sub ext_msg {
        my $cur = $ctx->{-inbox};
        my $mid = $ctx->{mid};
 
        my $cur = $ctx->{-inbox};
        my $mid = $ctx->{mid};
 
-       eval { require PublicInbox::Search };
-       my $have_xap = $@ ? 0 : 1;
-       my (@nox, @ibx, @found);
+       eval { require PublicInbox::Msgmap };
+       my $have_mm = $@ ? 0 : 1;
+       my (@ibx, @found);
 
        $ctx->{www}->{pi_config}->each_inbox(sub {
                my ($other) = @_;
                return if $other->{name} eq $cur->{name} || !$other->base_url;
 
 
        $ctx->{www}->{pi_config}->each_inbox(sub {
                my ($other) = @_;
                return if $other->{name} eq $cur->{name} || !$other->base_url;
 
-               my $s = $other->search;
-               if (!$s) {
-                       push @nox, $other;
-                       return;
-               }
-
-               # try to find the URL with Xapian to avoid forking
-               my $doc_id = eval { $s->find_first_doc_id('Q' . $mid) };
-               if ($@) {
-                       # xapian not configured properly for this repo
-                       push @nox, $other;
-                       return;
-               }
+               my $mm = $other->mm or return;
 
 
-               # maybe we found it!
-               if (defined $doc_id) {
+               # try to find the URL with Msgmap to avoid forking
+               my $num = $mm->num_for($mid);
+               if (defined $num) {
                        push @found, $other;
                } else {
                        # no point in trying the fork fallback if we
                        push @found, $other;
                } else {
                        # no point in trying the fork fallback if we
@@ -66,20 +55,6 @@ sub ext_msg {
 
        return exact($ctx, \@found, $mid) if @found;
 
 
        return exact($ctx, \@found, $mid) if @found;
 
-       # Xapian not installed or configured for some repos,
-       # do a full MID check (this is expensive...):
-       if (@nox) {
-               my $path = mid2path($mid);
-               foreach my $other (@nox) {
-                       my (undef, $type, undef) = $other->path_check($path);
-
-                       if ($type && $type eq 'blob') {
-                               push @found, $other;
-                       }
-               }
-       }
-       return exact($ctx, \@found, $mid) if @found;
-
        # fall back to partial MID matching
        my $n_partial = 0;
        my @partial;
        # fall back to partial MID matching
        my $n_partial = 0;
        my @partial;
index f71493a0e8eb487a2e5021e7de1b17548b896319..706089caac1b5788edb386c7dbf3a17d7f9b9f80 100644 (file)
@@ -290,11 +290,6 @@ sub smsg_mime {
        }
 }
 
        }
 }
 
-sub path_check {
-       my ($self, $path) = @_;
-       git($self)->check('HEAD:'.$path);
-}
-
 sub mid2num($$) {
        my ($self, $mid) = @_;
        my $mm = mm($self) or return;
 sub mid2num($$) {
        my ($self, $mid) = @_;
        my $mm = mm($self) or return;