]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei q: delay worker spawn
authorEric Wong <e@80x24.org>
Thu, 4 Feb 2021 09:59:21 +0000 (00:59 -0900)
committerEric Wong <e@80x24.org>
Fri, 5 Feb 2021 00:16:26 +0000 (00:16 +0000)
Now that --stdin support is sorted, we can delay spawning
workers until we know the query is ready-to-run.

lib/PublicInbox/LeiQuery.pm
lib/PublicInbox/LeiXSearch.pm

index 4fe40400622730c850fda9ffb9d6eac45cdc356f..6b1aa40c4b2f0038d4269b193eb8cc735bb25bf7 100644 (file)
@@ -75,21 +75,12 @@ sub lei_q {
        $xj ||= $lxs->concurrency($opt); # allow: "--jobs ,$WRITER_ONLY"
        my $nproc = $lxs->detect_nproc; # don't memoize, schedtool(1) exists
        $xj = $nproc if $xj > $nproc;
-       PublicInbox::LeiOverview->new($self) or return;
-       $self->atfork_prepare_wq($lxs);
-       $lxs->wq_workers_start('lei_xsearch', $xj, $self->oldset);
-       delete $lxs->{-ipc_atfork_child_close};
-       if (my $l2m = $self->{l2m}) {
-               if (defined($mj) && $mj !~ /\A[1-9][0-9]*\z/) {
-                       return $self->fail("`$mj' writer jobs must be >= 1");
-               }
-               $mj //= $nproc;
-               $self->atfork_prepare_wq($l2m);
-               $l2m->wq_workers_start('lei2mail', $mj, $self->oldset);
-               delete $l2m->{-ipc_atfork_child_close};
+       $lxs->{jobs} = $xj;
+       if (defined($mj) && $mj !~ /\A[1-9][0-9]*\z/) {
+               return $self->fail("`$mj' writer jobs must be >= 1");
        }
-
-       # no forking workers after this
+       $self->{l2m}->{jobs} = ($mj // $nproc) if $self->{l2m};
+       PublicInbox::LeiOverview->new($self) or return;
 
        my %mset_opt = map { $_ => $opt->{$_} } qw(thread limit offset);
        $mset_opt{asc} = $opt->{'reverse'} ? 1 : 0;
index 965617b512984afedf3be4b6b31801f35302050c..ab66717c04e7b8142b70b386235011468aeb7780 100644 (file)
@@ -406,7 +406,13 @@ sub do_query {
        $lei->{ovv}->ovv_begin($lei);
        my ($au_done, $zpipe);
        my $l2m = $lei->{l2m};
+       $lei->atfork_prepare_wq($self);
+       $self->wq_workers_start('lei_xsearch', $self->{jobs}, $lei->oldset);
+       delete $self->{-ipc_atfork_child_close};
        if ($l2m) {
+               $lei->atfork_prepare_wq($l2m);
+               $l2m->wq_workers_start('lei2mail', $l2m->{jobs}, $lei->oldset);
+               delete $l2m->{-ipc_atfork_child_close};
                pipe($lei->{startq}, $au_done) or die "pipe: $!";
                # 1031: F_SETPIPE_SZ
                fcntl($lei->{startq}, 1031, 4096) if $^O eq 'linux';