]> Sergey Matveev's repositories - public-inbox.git/commitdiff
extindex: flush pending reindex before unref
authorEric Wong <e@80x24.org>
Tue, 12 Oct 2021 22:44:56 +0000 (22:44 +0000)
committerEric Wong <e@80x24.org>
Wed, 13 Oct 2021 00:41:22 +0000 (00:41 +0000)
This prevents unnecessary message renumbering and I/O.

Without this change, there is a small window for long-running
WWW streaming requests to miss a message that was unref-ed
before reindexing.  If we expose an "All Mail" mailbox via
IMAP/JMAP, this will save client traffic.

lib/PublicInbox/ExtSearchIdx.pm

index c2ab0447e17624544a319d7fb8b4ddb28f0f4ace..40489eab4c6668e8b1ca3fc39e6999d741b292a0 100644 (file)
@@ -193,6 +193,7 @@ sub do_xpost ($$) {
                $idx->ipc_do('add_eidx_info', $docid, $eidx_key, $eml);
                apply_boost($req, $smsg) if $req->{boost_in_use};
        } else { # 'd' no {xnum}
+               $self->git->async_wait_all;
                $oid = pack('H*', $oid);
                _unref_doc($req, $docid, $xibx, undef, $oid, $eml);
        }
@@ -261,6 +262,7 @@ sub _blob_missing ($$) { # called when a known $smsg->{blob} is gone
        # xnum and ibx are unknown, we only call this when an entry from
        # /ei*/over.sqlite3 is bad, not on entries from xap*/over.sqlite3
        my $oidbin = pack('H*', $smsg->{blob});
+       $req->{self}->git->async_wait_all;
        _unref_doc($req, $smsg, undef, undef, $oidbin);
 }
 
@@ -552,6 +554,7 @@ sub _reindex_finalize ($$$) {
        }
        return if $nr == 1; # likely, all good
 
+       $self->git->async_wait_all;
        warn "W: #$docid split into $nr due to deduplication change\n";
        my @todo;
        for my $ary (values %$by_chash) {
@@ -896,6 +899,7 @@ ibx_id = ? AND xnum >= ? AND xnum <= ?
                }
                return if $sync->{quit};
                next unless scalar keys %x3m;
+               $self->git->async_wait_all; # wait for reindex_unseen
 
                # eliminate stale/mismatched entries
                my %mismatch = map { $_->{num} => $_->{blob} } @$msgs;