From: Eric Wong Date: Sun, 23 Feb 2025 13:13:33 +0000 (+0000) Subject: xap_helper: enable FLAG_PURE_NOT in external process X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fa6a791915c45195f4c75b89855bc0b540aa7d59;p=thirdparty%2Fpublic-inbox.git xap_helper: enable FLAG_PURE_NOT in external process Since public-facing WWW uses an external process with a non-blocking socket, clients will only see 503 errors if the search is overloaded. While allowing pure NOT queries is expensive, there are already many possible ways of triggering expensive queries so it's probably not a problem to allow one more. --- diff --git a/lib/PublicInbox/XapHelper.pm b/lib/PublicInbox/XapHelper.pm index 7e61631c0..15abed796 100644 --- a/lib/PublicInbox/XapHelper.pm +++ b/lib/PublicInbox/XapHelper.pm @@ -20,6 +20,7 @@ use Carp qw(croak); my $X = \%PublicInbox::Search::X; our (%SRCH, %WORKERS, $nworker, $workerset, $in, $SHARD_NFD, $MY_FD_MAX); our $stderr = \*STDERR; +my $QP_FLAGS = $PublicInbox::Search::QP_FLAGS; sub cmd_test_inspect { my ($req) = @_; @@ -194,7 +195,7 @@ sub dispatch { $key .= "\0".join("\0", map { ('-Q', $_) } @{$req->{Q}}) if $req->{Q}; my $new; $req->{srch} = $SRCH{$key} // do { - $new = { qp_flags => $PublicInbox::Search::QP_FLAGS }; + $new = { qp_flags => $QP_FLAGS }; my $nfd = scalar(@$dirs) * PublicInbox::Search::SHARD_COST; $SHARD_NFD += $nfd; if ($SHARD_NFD > $MY_FD_MAX) { @@ -337,6 +338,7 @@ sub start (@) { die "E: unable to get RLIMIT_NOFILE: $!"; warn "W: RLIMIT_NOFILE=$MY_FD_MAX too low\n" if $MY_FD_MAX < 72; $MY_FD_MAX -= 64; + $QP_FLAGS |= PublicInbox::Search::FLAG_PURE_NOT(); local $nworker = $opt->{j}; return recv_loop() if $nworker == 0; diff --git a/lib/PublicInbox/xap_helper.h b/lib/PublicInbox/xap_helper.h index 7e48de8ae..9c8436dc7 100644 --- a/lib/PublicInbox/xap_helper.h +++ b/lib/PublicInbox/xap_helper.h @@ -590,6 +590,7 @@ static void srch_init(struct req *req) const unsigned FLAG_PHRASE = Xapian::QueryParser::FLAG_PHRASE; srch->qp_flags = Xapian::QueryParser::FLAG_BOOLEAN | Xapian::QueryParser::FLAG_LOVEHATE | + Xapian::QueryParser::FLAG_PURE_NOT | Xapian::QueryParser::FLAG_WILDCARD; long nfd = req->dirc * SHARD_COST;