From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id BE2291FA1A for ; Sun, 3 Jan 2021 02:06:18 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 7/7] searchidxshard: use add_xapian directly for v2 Date: Sun, 3 Jan 2021 02:06:17 +0000 Message-Id: <20210103020617.15719-8-e@80x24.org> In-Reply-To: <20210103020617.15719-1-e@80x24.org> References: <20210103020617.15719-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: We can more clearly distinguish between v1 and v2-only code paths this way, and may be able to save a few cycles this way. --- lib/PublicInbox/SearchIdx.pm | 1 + lib/PublicInbox/SearchIdxShard.pm | 2 +- lib/PublicInbox/V2Writable.pm | 8 ++++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index a7005051..adced076 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -397,6 +397,7 @@ sub eml2doc ($$$;$) { sub add_xapian ($$$$) { my ($self, $eml, $smsg, $mids) = @_; + begin_txn_lazy($self); my $doc = eml2doc($self, $eml, $smsg, $mids); $self->{xdb}->replace_document($smsg->{num}, $doc); } diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm index 0051df93..1598faeb 100644 --- a/lib/PublicInbox/SearchIdxShard.pm +++ b/lib/PublicInbox/SearchIdxShard.pm @@ -54,7 +54,7 @@ sub ipc_atfork_child { # called automatically before ipc_worker_loop sub index_eml { my ($self, $eml, $smsg, $eidx_key) = @_; $smsg->{eidx_key} = $eidx_key if defined $eidx_key; - $self->ipc_do('add_message', $eml, $smsg); + $self->ipc_do('add_xapian', $eml, $smsg); } # wait for return to determine when ipc_do('commit_txn_lazy') is done diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index 6be95979..459c7e86 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -141,8 +141,10 @@ sub idx_shard ($$) { sub do_idx ($$$) { my ($self, $eml, $smsg) = @_; $self->{oidx}->add_overview($eml, $smsg); - my $idx = idx_shard($self, $smsg->{num}); - $idx->index_eml($eml, $smsg); + if ($self->{-need_xapian}) { + my $idx = idx_shard($self, $smsg->{num}); + $idx->index_eml($eml, $smsg); + } my $n = $self->{transact_bytes} += $smsg->{bytes}; $n >= $self->{batch_bytes}; } @@ -267,6 +269,7 @@ sub _idx_init { # with_umask callback my $max = $self->{shards} - 1; my $idx = $self->{idx_shards} = []; push @$idx, PublicInbox::SearchIdxShard->new($self, $_) for (0..$max); + $self->{-need_xapian} = $idx->[0]->need_xapian; # SearchIdxShard may do their own flushing, so don't scale # until after forking @@ -1129,6 +1132,7 @@ sub sync_prepare ($$) { sub unindex_oid_aux ($$$) { my ($self, $oid, $mid) = @_; my @removed = $self->{oidx}->remove_oid($oid, $mid); + return unless $self->{-need_xapian}; for my $num (@removed) { idx_shard($self, $num)->ipc_do('xdb_remove', $num); }