]> Sergey Matveev's repositories - public-inbox.git/commitdiff
SearchIdx,V2Writeable: Update num_highwater on optimized deletes
authorEric W. Biederman <ebiederm@xmission.com>
Wed, 1 Aug 2018 16:43:42 +0000 (11:43 -0500)
committerEric Wong <e@80x24.org>
Fri, 3 Aug 2018 20:04:29 +0000 (20:04 +0000)
When performing an incremental index update with index_sync if a message is seen
to be both added and deleted update the num_highwater mark even though the
message is not otherwise indexed.

This ensures index_sync generates the same msgmap no matter which commit
it stops at during incremental syncs.

Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
lib/PublicInbox/SearchIdx.pm
lib/PublicInbox/V2Writable.pm

index 2532c8dfd10d5e73cc12801ad96f212279cefafd..54f82aa8ee4ec0df2b5a6684dc3a83153d66128c 100644 (file)
@@ -583,7 +583,8 @@ sub read_log {
                        my $blob = $1;
                        if (delete $D{$blob}) {
                                if (defined $self->{regen_down}) {
-                                       $self->{regen_down}--;
+                                       my $num = $self->{regen_down}--;
+                                       $self->{mm}->num_highwater($num);
                                }
                                next;
                        }
index c450980c8f51dbb86357602010fa5b1eab455d27..92d2672c78c478f886a3bd7d5f9cb8c238f3456b 100644 (file)
@@ -658,7 +658,7 @@ sub mark_deleted {
 }
 
 sub reindex_oid {
-       my ($self, $mm_tmp, $D, $git, $oid, $regen) = @_;
+       my ($self, $mm_tmp, $D, $git, $oid, $regen, $reindex) = @_;
        my $len;
        my $msgref = $git->cat_file($oid, \$len);
        my $mime = PublicInbox::MIME->new($$msgref);
@@ -700,7 +700,8 @@ sub reindex_oid {
 
        if (!defined($mid0) || $del) {
                if (!defined($mid0) && $del) { # expected for deletes
-                       $$regen--;
+                       $num = $$regen--;
+                       $self->{mm}->num_highwater($num) unless $reindex;
                        return
                }
 
@@ -877,7 +878,8 @@ sub index_sync {
        return unless defined $latest;
        $self->idx_init; # acquire lock
        my $mm_tmp = $self->{mm}->tmp_clone;
-       my $ranges = $opts->{reindex} ? [] : $self->last_commits($epoch_max);
+       my $reindex = $opts->{reindex};
+       my $ranges = $reindex ? [] : $self->last_commits($epoch_max);
 
        my $high = $self->{mm}->num_highwater();
        my $regen = $self->index_prepare($opts, $epoch_max, $ranges);
@@ -903,7 +905,7 @@ sub index_sync {
                                chomp($cmt = $_);
                        } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\tm$/o) {
                                $self->reindex_oid($mm_tmp, $D, $git, $1,
-                                               $regen);
+                                               $regen, $reindex);
                        } elsif (/\A:\d{6} 100644 $x40 ($x40) [AM]\td$/o) {
                                $self->mark_deleted($D, $git, $1);
                        }