+sub event_step {
+ my ($self) = @_;
+ for my $reqid (keys %{$self->{ridx}}) {
+ my $rireq = $self->{ridx}->{$reqid};
+ if ($rireq->{cur} < $rireq->{max}) {
+ reindex_art($self, $rireq->{cur}++);
+ } else {
+ delete $self->{ridx}->{$reqid};
+ reindex_done($self, $rireq);
+ }
+ }
+ # run ->event_step again if more to do
+ keys(%{$self->{ridx}}) ? PublicInbox::DS::requeue($self)
+ : delete($self->{ridx});
+}
+
+sub reindex_range {
+ my ($self, $min, $max, $reqid) = @_;
+ $self->{ridx}->{$reqid} = {
+ errfh => $self->{0},
+ lei_sock => $self->{1},
+ eof_wr => $self->{2}, # calls lei->dclose via EOFpipe
+ cur => $min, max => $max,
+ };
+ PublicInbox::DS::requeue($self); # runs ->event_step
+}
+
+sub abort_long_req {
+ my ($self, $reqid) = @_;
+ my $reqs = $self->{ridx} // return;
+ my $rireq = $reqs->{$reqid} // return;
+ $rireq->{cur} = $rireq->{max}; # ->event_step finishes up
+}
+