about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/SearchIdx.pm1
-rw-r--r--lib/PublicInbox/SearchIdxShard.pm2
-rw-r--r--lib/PublicInbox/V2Writable.pm8
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);
         }