diff options
author | Eric Wong <e@80x24.org> | 2021-09-23 00:46:25 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-09-23 04:52:09 +0000 |
commit | 63d7b8ceee55a34cde983e8548d5ce61050d2891 (patch) | |
tree | b893451f9164ce2c7c8f48664ca00865427e24c7 /t | |
parent | 356439a571c536eaa487031802b436d087113f4f (diff) | |
download | public-inbox-63d7b8ceee55a34cde983e8548d5ce61050d2891.tar.gz |
Neither Inboxes nor ExtSearch objects were retrying correctly when there are live git processes, but the inboxes were getting rescanned for search or other reasons. Ensure the scan retries eventually if there's live processes. We also need to update the cleanup task to detect Xapian shard count changes, since Xapian ->reopen is enough to detect any other Xapian changes. Otherwise, we just issue an inexpensive ->reopen call and let Xapian check whether there's anything worth reopening. This also lets us eliminate the Devel::Peek dependency.
Diffstat (limited to 't')
-rw-r--r-- | t/extsearch.t | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/t/extsearch.t b/t/extsearch.t index ad4f2c6d..6c074022 100644 --- a/t/extsearch.t +++ b/t/extsearch.t @@ -436,12 +436,27 @@ for my $j (1, 3, 6) { SKIP: { my $d = "$home/extindex-j1"; + my $es = PublicInbox::ExtSearch->new($d); + ok(my $nresult0 = $es->mset('z:0..')->size, 'got results'); + ok(ref($es->{xdb}), '{xdb} created'); + my $nshards1 = $es->{nshard}; + is($nshards1, 1, 'correct shard count'); + my $xdb_str = "$es->{xdb}"; + ok($es->cleanup_shards, 'cleanup_shards noop'); + is("$es->{xdb}", $xdb_str, '{xdb} unchanged'); + my $o = { 2 => \(my $err = '') }; ok(run_script([qw(-xcpdb -R4), $d]), 'xcpdb R4'); my @dirs = glob("$d/ei*/?"); for my $i (0..3) { is(grep(m!/ei[0-9]+/$i\z!, @dirs), 1, "shard [$i] created"); } + is($es->cleanup_shards, undef, 'cleanup_shards cleaned'); + ok(!defined($es->{xdb}), 'old {xdb} gone'); + is($es->cleanup_shards, undef, 'cleanup_shards clean idempotent'); + is($es->mset('z:0..')->size, $nresult0, 'new shards, same results'); + ok($es->cleanup_shards, 'cleanup_shards true after open'); + for my $i (4..5) { is(grep(m!/ei[0-9]+/$i\z!, @dirs), 0, "no shard [$i]"); } |