* [PATCH] xap_helper: unconditionally reopen DBs on reuse
@ 2024-05-07 19:08 Eric Wong
0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2024-05-07 19:08 UTC (permalink / raw)
To: spew
Reopening Xapian DBs is a fairly cheap operation, so just do it
to ensure we always get the latest changes.
---
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 099bc4fe..c9957f64 100644
--- a/lib/PublicInbox/XapHelper.pm
+++ b/lib/PublicInbox/XapHelper.pm
@@ -191,8 +191,9 @@ sub dispatch {
or return;
my $dirs = delete $req->{d} or die 'no -d args';
my $key = join("\0", @$dirs);
+ my $new;
$req->{srch} = $SRCH{$key} //= do {
- my $new = { qp_flags => $PublicInbox::Search::QP_FLAGS };
+ $new = { qp_flags => $PublicInbox::Search::QP_FLAGS };
my $first = shift @$dirs;
my $slow_phrase = -f "$first/iamchert";
$new->{xdb} = $X->{Database}->new($first);
@@ -207,6 +208,7 @@ sub dispatch {
$new->{qp} = $new->qparse_new;
$new;
};
+ $req->{srch}->{xdb}->reopen unless $new;
$req->{Q} && !$req->{srch}->{qp_extra_done} and
srch_init_extra $req;
my $timeo = $req->{K};
diff --git a/lib/PublicInbox/xap_helper.h b/lib/PublicInbox/xap_helper.h
index bdc1c5b1..a30a8768 100644
--- a/lib/PublicInbox/xap_helper.h
+++ b/lib/PublicInbox/xap_helper.h
@@ -712,6 +712,7 @@ static void dispatch(struct req *req)
req->srch = *s;
if (req->srch != kbuf.srch) { // reuse existing
free_srch(kbuf.srch);
+ req->srch->db->reopen();
} else if (!srch_init(req)) {
assert(kbuf.srch == *((struct srch **)tfind(
kbuf.srch, &srch_tree, srch_cmp)));
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2024-05-07 19:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-07 19:08 [PATCH] xap_helper: unconditionally reopen DBs on reuse Eric Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).