X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FSearchIdxSkeleton.pm;h=beb17b9f8316b1ad230d041d84fd56f8fe2ea226;hb=eb48e7d6675babdda9a36be1a490c29a2ccddbdc;hp=4cb10f59136cf0fe3f1365f642060a6f2a339f30;hpb=b20b8747256433b0b7b4d1ed5c415d2101044dda;p=public-inbox.git 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) = @_;