diff options
author | Eric Wong <e@80x24.org> | 2019-05-27 18:45:45 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2019-05-27 18:48:06 +0000 |
commit | 1bc79688ecf6bc79951c2c6ad6b1dbff1586af3f (patch) | |
tree | 6dcf9283c2c8cb4ddd9d65bf3a1acab7fff10e02 /t | |
parent | f7636f7f2343d6ac134b35b447e57fa2a38feba1 (diff) | |
download | public-inbox-1bc79688ecf6bc79951c2c6ad6b1dbff1586af3f.tar.gz |
`public-inbox-index --reindex' could cause NNTP article number gaps to form when it also has to deal with new, never-before-seen commits in mirrors running off `git fetch'. Fix this by running two distinct invocations of ->index_sync; once to only reindex old commits, and a second time to index new commits. This does not appear to be a problem on v1 at the moment, but I'll need more time to analyze this.
Diffstat (limited to 't')
-rw-r--r-- | t/indexlevels-mirror.t | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/t/indexlevels-mirror.t b/t/indexlevels-mirror.t index ce138fee..12511368 100644 --- a/t/indexlevels-mirror.t +++ b/t/indexlevels-mirror.t @@ -105,9 +105,17 @@ sub import_index_incremental { is_deeply([sort { $a cmp $b } map { $_->{mid} } @$msgs], ['m@1','m@2'], 'got both messages in master'); + my @rw_nums = map { $_->{num} } @{$ibx->over->query_ts(0, 0)}; + is_deeply(\@rw_nums, [1, 2], 'master has expected NNTP articles'); + + my @ro_nums = map { $_->{num} } @{$ro_mirror->over->query_ts(0, 0)}; + is_deeply(\@ro_nums, [1, 2], 'mirror has expected NNTP articles'); + # remove message from master ok($im->remove($mime), '2nd message removed'); $im->done; + @rw_nums = map { $_->{num} } @{$ibx->over->query_ts(0, 0)}; + is_deeply(\@rw_nums, [1], 'unindex NNTP article'.$v.$level); if ($level ne 'basic') { is(system(@xcpdb, $mirror), 0, "v$v xcpdb OK"); @@ -132,6 +140,23 @@ sub import_index_incremental { ($nr, $msgs) = $ro_mirror->search->reopen->query('m:m@2'); is($nr, 0, "v$v m\@2 gone from Xapian in mirror on $level"); } + + # add another message to master and have the mirror + # sync and reindex it + my @expect = map { $_->{num} } @{$ibx->over->query_ts(0, 0)}; + foreach my $i (3..5) { + $mime->header_set('Message-ID', "<m\@$i>"); + ok($im->add($mime), "#$i message added"); + push @expect, $i; + } + $im->done; + is(system('git', "--git-dir=$fetch_dir", qw(fetch -q)), 0, 'fetch OK'); + is(system($index, '--reindex', $mirror), 0, + "v$v index --reindex mirror OK"); + @ro_nums = map { $_->{num} } @{$ro_mirror->over->query_ts(0, 0)}; + @rw_nums = map { $_->{num} } @{$ibx->over->query_ts(0, 0)}; + is_deeply(\@rw_nums, \@expect, "v$v master has expected NNTP articles"); + is_deeply(\@ro_nums, \@expect, "v$v mirror matches master articles"); } # we can probably cull some other tests and put full/medium tests, here |