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. --- lib/PublicInbox/SearchIdxShard.pm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox/SearchIdxShard.pm') diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm index 2b48b1b4..1ea01095 100644 --- a/lib/PublicInbox/SearchIdxShard.pm +++ b/lib/PublicInbox/SearchIdxShard.pm @@ -11,9 +11,11 @@ use IO::Handle (); # autoflush sub new { my ($class, $v2writable, $shard) = @_; - my $self = $class->SUPER::new($v2writable->{-inbox}, 1, $shard); + my $ibx = $v2writable->{-inbox}; + my $self = $class->SUPER::new($ibx, 1, $shard); # create the DB before forking: $self->_xdb_acquire; + $self->set_indexlevel; $self->_xdb_release; $self->spawn_worker($v2writable, $shard) if $v2writable->{parallel}; $self; -- cgit v1.2.3-24-ge0c7