lib/PublicInbox/SearchIdx.pm | 1 + lib/PublicInbox/SearchIdxShard.pm | 2 +- lib/PublicInbox/V2Writable.pm | 8 ++++++-- diff --git a/lib/PublicInbox/SearchIdx.pm b/lib/PublicInbox/SearchIdx.pm index a7005051d9deef241fab065dd05072348e80d8ce..adced0762b41487d5bdaa69517db157901bf3076 100644 --- a/lib/PublicInbox/SearchIdx.pm +++ b/lib/PublicInbox/SearchIdx.pm @@ -397,6 +397,7 @@ } 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 0051df9305286f39ea5329bfb4f64bb4bbde83d8..1598faebdc9b53b621ef369b9a249198723ca705 100644 --- a/lib/PublicInbox/SearchIdxShard.pm +++ b/lib/PublicInbox/SearchIdxShard.pm @@ -54,7 +54,7 @@ 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 6be95979389b815a6486fc70456b5bfda0480cf7..459c7e86eed189782c5b2c4517af5587fb7d8ee4 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -141,8 +141,10 @@ # indexes a message, returns true if checkpointing is needed 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 @@ # idx_shards must be visible to all forked processes 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 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); }