# 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;