diff options
Diffstat (limited to 'lib/PublicInbox/SearchIdxSkeleton.pm')
-rw-r--r-- | lib/PublicInbox/SearchIdxSkeleton.pm | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/PublicInbox/SearchIdxSkeleton.pm b/lib/PublicInbox/SearchIdxSkeleton.pm index 4cb10f59..beb17b9f 100644 --- a/lib/PublicInbox/SearchIdxSkeleton.pm +++ b/lib/PublicInbox/SearchIdxSkeleton.pm @@ -73,6 +73,14 @@ sub skeleton_worker_loop { print $barrier_note "barrier_done\n" or die "print failed to barrier note: $!"; } + } elsif ($line =~ /\AD ([a-f0-9]{40,}) (.*)\n\z/s) { + my ($oid, $mid) = ($1, $2); + $xdb ||= $self->_xdb_acquire; + if (!$txn) { + $xdb->begin_transaction; + $txn = 1; + } + $self->remove_by_oid($oid, $mid); } else { my $len = int($line); my $n = read($r, my $msg, $len) or die "read: $!\n"; @@ -110,6 +118,16 @@ sub index_skeleton { die "print failed: $err\n" if $err; } +sub remote_remove { + my ($self, $oid, $mid) = @_; + my $err; + $self->_lock_acquire; + eval { $self->SUPER::remote_remove($oid, $mid) }; + $err = $@; + $self->_lock_release; + die $err if $err; +} + # values: [ TS, NUM, BYTES, LINES, MID, XPATH, doc_data ] sub index_skeleton_real ($$) { my ($self, $values) = @_; |