# Copyright all contributors
# License: AGPL-3.0+
# "lei reindex" command to reindex everything in lei/store
package PublicInbox::LeiReindex;
use v5.12;
use parent qw(PublicInbox::IPC);
sub reindex_full {
my ($lei) = @_;
my $sto = $lei->{sto};
my $max = $sto->search->over(1)->max;
$lei->qerr("# reindexing 1..$max");
$sto->wq_do('reindex_art', $_) for (1..$max);
}
sub reindex_store { # via wq_do
my ($self) = @_;
my ($lei, $argv) = delete @$self{qw(lei argv)};
if (!@$argv) {
reindex_full($lei);
}
}
sub lei_reindex {
my ($lei, @argv) = @_;
my $sto = $lei->_lei_store or return $lei->fail('nothing indexed');
$sto->write_prepare($lei);
my $self = bless { lei => $lei, argv => \@argv }, __PACKAGE__;
my ($op_c, $ops) = $lei->workers_start($self, 1);
$lei->{wq1} = $self;
$lei->wait_wq_events($op_c, $ops);
$self->wq_do('reindex_store');
$self->wq_close;
}
sub _lei_wq_eof { # EOF callback for main lei daemon
my ($lei) = @_;
$lei->{sto}->wq_do('reindex_done');
$lei->wq_eof;
}
sub ipc_atfork_child {
my ($self) = @_;
$self->{lei}->_lei_atfork_child;
$self->SUPER::ipc_atfork_child;
}
1;