From 17d2778c404c25c459f320a7f92913d17569fc59 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 3 Nov 2019 06:48:58 +0000 Subject: searchidxshard: reuse $SIG{__WARN__} callback from Admin We don't want to define $SIG{__WARN__} in the worker to call an existing non-default callback. Instead update ->{current_info} the same way the V2Writable master process does. I noticed this while reindexing with a large XAPIAN_FLUSH_THRESHOLD and seeing the wrong epoch on my terminal from a shard because the shard worker was spawned while reindexing a higher-numbered epoch. --- lib/PublicInbox/SearchIdxShard.pm | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'lib/PublicInbox/SearchIdxShard.pm') diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm index e27d0e64..b22e51dc 100644 --- a/lib/PublicInbox/SearchIdxShard.pm +++ b/lib/PublicInbox/SearchIdxShard.pm @@ -19,7 +19,7 @@ sub new { } sub spawn_worker { - my ($self, $v2writable, $shard) = @_; + my ($self, $v2w, $shard) = @_; my ($r, $w); pipe($r, $w) or die "pipe failed: $!\n"; binmode $r, ':raw'; @@ -27,15 +27,14 @@ sub spawn_worker { my $pid = fork; defined $pid or die "fork failed: $!\n"; if ($pid == 0) { - my $bnote = $v2writable->atfork_child; - $v2writable = undef; + my $bnote = $v2w->atfork_child; close $w or die "failed to close: $!"; # F_SETPIPE_SZ = 1031 on Linux; increasing the pipe size here # speeds V2Writable batch imports across 8 cores by nearly 20% fcntl($r, 1031, 1048576) if $^O eq 'linux'; - eval { shard_worker_loop($self, $r, $shard, $bnote) }; + eval { shard_worker_loop($self, $v2w, $r, $shard, $bnote) }; die "worker $shard died: $@\n" if $@; die "unexpected MM $self->{mm}" if $self->{mm}; exit; @@ -45,18 +44,12 @@ sub spawn_worker { close $r or die "failed to close: $!"; } -sub shard_worker_loop ($$$$) { - my ($self, $r, $shard, $bnote) = @_; +sub shard_worker_loop ($$$$$) { + my ($self, $v2w, $r, $shard, $bnote) = @_; $0 = "pi-v2-shard[$shard]"; - my $current_info = ''; - my $warn_cb = $SIG{__WARN__} || sub { print STDERR @_ }; - local $SIG{__WARN__} = sub { - chomp $current_info; - $warn_cb->("[$shard] $current_info: ", @_); - }; $self->begin_txn_lazy; while (my $line = $r->getline) { - $current_info = $line; + $v2w->{current_info} = "[$shard] $line"; if ($line eq "commit\n") { $self->commit_txn_lazy; } elsif ($line eq "close\n") { -- cgit v1.2.3-24-ge0c7