my (@xdb, $slow_phrase);
load_xapian();
$self->{qp_flags} //= $QP_FLAGS;
- if ($xpfx =~ m/xapian${\SCHEMA_VERSION}\z/) {
+ if ($xpfx =~ m!/xapian[0-9]+\z!) {
@xdb = ($X{Database}->new($xpfx));
$self->{qp_flags} |= FLAG_PHRASE() if !-f "$xpfx/iamchert";
} else {
};
}
+# returns true if a future rescan is desired
+sub cleanup_shards {
+ my ($self) = @_;
+ return unless exists($self->{xdb});
+ my $xpfx = $self->{xpfx};
+ return reopen($self) if $xpfx =~ m!/xapian[0-9]+\z!; # true
+ opendir(my $dh, $xpfx) or return warn("$xpfx gone: $!\n"); # true
+ my $nr = grep(/\A[0-9]+\z/, readdir($dh)) or
+ return warn("$xpfx has no shards\n"); # true
+ return reopen($self) if $nr == ($self->{nshard} // -1);
+ delete($self->{xdb});
+ undef;
+}
+
sub new {
my ($class, $ibx) = @_;
ref $ibx or die "BUG: expected PublicInbox::Inbox object: $ibx";