From fa6a791915c45195f4c75b89855bc0b540aa7d59 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 23 Feb 2025 13:13:33 +0000 Subject: [PATCH] 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. --- lib/PublicInbox/XapHelper.pm | 4 +++- lib/PublicInbox/xap_helper.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) 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; -- 2.47.3