about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-05-24 03:06:37 +0000
committerEric Wong <e@yhbt.net>2020-05-25 09:12:19 +0000
commitd6763f26cd82cae90ced264cfa59d0163ee5180f (patch)
tree194159655047df6cd972a3233e3d5dbe167a1f98
parentb77d02aabb32a5a45e69701d2dcdc06ec53ef386 (diff)
downloadpublic-inbox-d6763f26cd82cae90ced264cfa59d0163ee5180f.tar.gz
We don't need to load Xapian until we have a directory
which looks like a shard, otherwise we're wasting cycles
on memory when running short-lived processes.
-rw-r--r--lib/PublicInbox/V2Writable.pm9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm
index 513e9f23..b393b31f 100644
--- a/lib/PublicInbox/V2Writable.pm
+++ b/lib/PublicInbox/V2Writable.pm
@@ -75,11 +75,14 @@ sub count_shards ($) {
         # Also, shard count may change while -watch is running
         # due to "xcpdb --reshard"
         if (-d $xpfx) {
-                require PublicInbox::Search;
-                PublicInbox::Search::load_xapian();
-                my $XapianDatabase = $PublicInbox::Search::X{Database};
+                my $XapianDatabase;
                 foreach my $shard (<$xpfx/*>) {
                         -d $shard && $shard =~ m!/[0-9]+\z! or next;
+                        $XapianDatabase //= do {
+                                require PublicInbox::Search;
+                                PublicInbox::Search::load_xapian();
+                                $PublicInbox::Search::X{Database};
+                        };
                         eval {
                                 $XapianDatabase->new($shard)->close;
                                 $n++;