From 8e1ec8836dabc58dfc0115b36ed440b4371b70d7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 28 Mar 2020 00:56:03 +0000 Subject: searchidxshard: ensure we set indexlevel on shard[0] For sharded v2 repositories with few-enough messages, it is possible for shard[0] to go unused and never trigger the ->commit_txn_lazy to set the indexlevel field in Xapian metadata. So set it immediately at initialization and avoid this case. While we're at it, avoid triggering needless pwrite syscalls from ->set_metadata by checking with ->get_metadata, first. --- t/init.t | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 't') diff --git a/t/init.t b/t/init.t index e20ff006..a78c2fc8 100644 --- a/t/init.t +++ b/t/init.t @@ -5,6 +5,7 @@ use warnings; use Test::More; use PublicInbox::Config; use PublicInbox::TestCommon; +use PublicInbox::Admin; use File::Basename; my ($tmpdir, $for_destroy) = tmpdir(); sub quiet_fail { @@ -72,11 +73,15 @@ SKIP: { quiet_fail($cmd, 'initializing V2 as V1 fails'); foreach my $lvl (qw(medium basic)) { + my $dir = "$tmpdir/v2$lvl"; $cmd = [ '-init', "v2$lvl", '-V2', '-L', $lvl, - "$tmpdir/v2$lvl", "http://example.com/v2$lvl", + $dir, "http://example.com/v2$lvl", "v2$lvl\@example.com" ]; ok(run_script($cmd), "-init -L $lvl"); is(read_indexlevel("v2$lvl"), $lvl, "indexlevel set to '$lvl'"); + my $ibx = PublicInbox::Inbox->new({ inboxdir => $dir }); + is(PublicInbox::Admin::detect_indexlevel($ibx), $lvl, + 'detected expected level w/o config'); } # loop for idempotency -- cgit v1.2.3-24-ge0c7