From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 2360C1F9FC for ; Wed, 13 Oct 2021 07:00:39 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/5] lei: use standard warn() in more places Date: Wed, 13 Oct 2021 07:00:35 +0000 Message-Id: <20211013070038.6414-3-e@80x24.org> In-Reply-To: <20211013070038.6414-1-e@80x24.org> References: <20211013070038.6414-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: warn() is easier to augment with context information, and frankly unavoidable in the presence of 3rd-party libraries we don't control. --- lib/PublicInbox/Fetch.pm | 2 +- lib/PublicInbox/LEI.pm | 18 +++++++++++++----- lib/PublicInbox/LeiBlob.pm | 2 +- lib/PublicInbox/LeiConvert.pm | 2 +- lib/PublicInbox/LeiForgetExternal.pm | 5 ++--- lib/PublicInbox/LeiImport.pm | 7 +++---- lib/PublicInbox/LeiImportKw.pm | 2 +- lib/PublicInbox/LeiInput.pm | 4 ++-- lib/PublicInbox/LeiMailSync.pm | 4 ++-- lib/PublicInbox/LeiMirror.pm | 8 ++++---- lib/PublicInbox/LeiP2q.pm | 2 +- lib/PublicInbox/LeiRediff.pm | 2 +- lib/PublicInbox/LeiRemote.pm | 2 +- lib/PublicInbox/LeiViewText.pm | 2 +- lib/PublicInbox/LeiXSearch.pm | 25 +++++++++++++++---------- 15 files changed, 49 insertions(+), 38 deletions(-) diff --git a/lib/PublicInbox/Fetch.pm b/lib/PublicInbox/Fetch.pm index 5ada1f49e4dc..e5756fb664e4 100644 --- a/lib/PublicInbox/Fetch.pm +++ b/lib/PublicInbox/Fetch.pm @@ -52,7 +52,7 @@ sub do_manifest ($$$) { $m0 = eval { PublicInbox::LeiMirror::decode_manifest($fh, $mf, $mf) }; - $lei->err($@) if $@; + warn($@) if $@; } my ($bn) = ($fn =~ m!/([^/]+)\z!); my $curl_cmd = $lei->{curl}->for_uri($lei, $muri, qw(-R -o), $bn); diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm index 183cb545fe55..bd8a6bef632b 100644 --- a/lib/PublicInbox/LEI.pm +++ b/lib/PublicInbox/LEI.pm @@ -471,6 +471,7 @@ sub _drop_wq { # pronounced "exit": x_it(1 << 8) => exit(1); x_it(13) => SIGPIPE sub x_it ($$) { my ($self, $code) = @_; + local $current_lei = $self; # make sure client sees stdout before exit $self->{1}->autoflush(1) if $self->{1}; stop_pager($self); @@ -504,6 +505,7 @@ sub qfin { # show message on finalization (LeiFinmsg) sub fail_handler ($;$$) { my ($lei, $code, $io) = @_; + local $current_lei = $lei; close($io) if $io; # needed to avoid warnings on SIGPIPE _drop_wq($lei); x_it($lei, $code // (1 << 8)); @@ -521,6 +523,7 @@ sub sigint_reap { sub fail ($$;$) { my ($self, $buf, $exit_code) = @_; + local $current_lei = $self; $self->{failed}++; warn($buf, "\n") if defined $buf; $self->{pkt_op_p}->pkt_do('fail_handler') if $self->{pkt_op_p}; @@ -541,6 +544,7 @@ sub puts ($;@) { out(shift, map { "$_\n" } @_) } sub child_error { # passes non-fatal curl exit codes to user my ($self, $child_error, $msg) = @_; # child_error is $? + local $current_lei = $self; $child_error ||= 1 << 8; warn($msg, "\n") if defined $msg; if ($self->{pkt_op_p}) { # to top lei-daemon @@ -1019,7 +1023,7 @@ sub poke_mua { # forces terminal MUAs to wake up and hopefully notice new mail $cmd = [ Text::ParseWords::shellwords($cmd) ]; send($sock, exec_buf($cmd, {}), MSG_EOR) if $sock; } else { - err($self, "W: unsupported --alert=$op"); # non-fatal + warn("W: unsupported --alert=$op\n"); # non-fatal } } } @@ -1068,7 +1072,7 @@ sub start_pager { # display a message for user before spawning full-screen $VISUAL sub pgr_err { my ($self, @msg) = @_; - return $self->err(@msg) unless $self->{sock} && -t $self->{2}; + return warn(@msg) unless $self->{sock} && -t $self->{2}; start_pager($self, { LESS => 'RX' }); # no 'F' so we prompt print { $self->{2} } @msg; $self->{2}->autoflush(1); @@ -1118,6 +1122,7 @@ sub accept_dispatch { # Listener {post_accept} callback sub dclose { my ($self) = @_; + local $current_lei = $self; delete $self->{-progress}; _drop_wq($self) if $self->{failed}; $self->close if $self->{-event_init_done}; # PublicInbox::DS::close @@ -1369,6 +1374,7 @@ sub DESTROY { sub wq_done_wait { # dwaitpid callback my ($arg, $pid) = @_; my ($wq, $lei) = @$arg; + local $current_lei = $lei; my $err_type = $lei->{-err_type}; $? and $lei->child_error($?, $err_type ? "$err_type errors during $lei->{cmd}" : ()); @@ -1383,6 +1389,7 @@ sub fchdir { sub wq_eof { # EOF callback for main daemon my ($lei) = @_; + local $current_lei = $lei; my $wq1 = delete $lei->{wq1} // return $lei->fail; # already failed $wq1->wq_wait_old($wq1->can('_wq_done_wait') // \&wq_done_wait, $lei); } @@ -1423,7 +1430,7 @@ sub refresh_watches { $seen{$url} = undef; my $state = $cfg->get_1("watch.$url.state"); if (!watch_state_ok($state)) { - $lei->err("watch.$url.state=$state not supported"); + warn("watch.$url.state=$state not supported\n"); next; } if ($url =~ /\Amaildir:(.+)/i) { @@ -1492,6 +1499,7 @@ sub lms { sub sto_done_request { my ($lei, $sock) = @_; + local $current_lei = $lei; eval { if ($sock //= $lei->{sock}) { # issue, async wait $lei->{sto}->wq_io_do('done', [ $sock ]); @@ -1499,14 +1507,14 @@ sub sto_done_request { my $wait = $lei->{sto}->wq_do('done'); } }; - $lei->err($@) if $@; + warn($@) if $@; } sub cfg_dump ($$) { my ($lei, $f) = @_; my $ret = eval { PublicInbox::Config->git_config_dump($f, $lei->{2}) }; return $ret if !$@; - $lei->err($@); + warn($@); undef; } diff --git a/lib/PublicInbox/LeiBlob.pm b/lib/PublicInbox/LeiBlob.pm index b94f67a029ff..a3ddbbcec211 100644 --- a/lib/PublicInbox/LeiBlob.pm +++ b/lib/PublicInbox/LeiBlob.pm @@ -40,7 +40,7 @@ sub solver_user_cb { # called by solver when done # don't try to support all the git-show(1) options for non-blob, # this is just a convenience: $type ne 'blob' and - $lei->err("# $oid is a $type of $size bytes in:\n#\t$gd"); + warn "# $oid is a $type of $size bytes in:\n#\t$gd\n"; my $cmd = [ 'git', "--git-dir=$gd", 'show', $oid ]; my $rdr = { 1 => $lei->{1}, 2 => $lei->{2} }; diff --git a/lib/PublicInbox/LeiConvert.pm b/lib/PublicInbox/LeiConvert.pm index 6550c242b1a2..9e98edc391a0 100644 --- a/lib/PublicInbox/LeiConvert.pm +++ b/lib/PublicInbox/LeiConvert.pm @@ -41,7 +41,7 @@ sub process_inputs { # via wq_do delete $lei->{1}; delete $self->{wcb}; # commit my $nr = delete($lei->{-nr_write}) // 0; - $lei->err("# converted $nr messages") if $lei->{opt}->{verbose}; + $lei->qerr("# converted $nr messages"); } sub lei_convert { # the main "lei convert" method diff --git a/lib/PublicInbox/LeiForgetExternal.pm b/lib/PublicInbox/LeiForgetExternal.pm index 7a4bbcf80a3a..07f0ac803c88 100644 --- a/lib/PublicInbox/LeiForgetExternal.pm +++ b/lib/PublicInbox/LeiForgetExternal.pm @@ -20,10 +20,9 @@ sub lei_forget_external { if ($? == 0) { $lei->qerr("# $l forgotten "); } elsif (($? >> 8) == 5) { - $lei->err("# $l not found"); + warn("# $l not found\n"); } else { - $lei->err("# --unset $key error"); - return $lei->x_it($?); + $lei->child_error($?, "# --unset $key error"); } } } diff --git a/lib/PublicInbox/LeiImport.pm b/lib/PublicInbox/LeiImport.pm index 69d63ab6b397..2f8fd6c64f69 100644 --- a/lib/PublicInbox/LeiImport.pm +++ b/lib/PublicInbox/LeiImport.pm @@ -38,7 +38,7 @@ sub pmdir_cb { # called via wq_io_do from LeiPmdir->each_mdir_fn my $lse = $self->{lse} //= $self->{lei}->{sto}->search; my $lms = $self->{-lms_ro} //= $self->{lei}->lms; # may be 0 or undef my @oidbin = $lms ? $lms->name_oidbin($folder, $bn) : (); - @oidbin > 1 and $self->{lei}->err("W: $folder/*/$$bn not unique:\n", + @oidbin > 1 and warn("W: $folder/*/$$bn not unique:\n", map { "\t".unpack('H*', $_)."\n" } @oidbin); my %seen; my @docids = sort { $a <=> $b } grep { !$seen{$_}++ } @@ -100,9 +100,8 @@ sub do_import_index ($$@) { my $nproc = $self->detect_nproc; $j = $nproc if $j > $nproc; } - if ($lei->{opt}->{'new-only'} && (!$net || !$net->{imap_order})) { - $lei->err('# --new-only is only for IMAP'); - } + ($lei->{opt}->{'new-only'} && (!$net || !$net->{imap_order})) and + warn "# --new-only is only for IMAP\n"; my $ops = {}; $lei->{auth}->op_merge($ops, $self) if $lei->{auth}; $lei->{-eml_noisy} = 1; diff --git a/lib/PublicInbox/LeiImportKw.pm b/lib/PublicInbox/LeiImportKw.pm index c35c5c266c4b..8359f3386668 100644 --- a/lib/PublicInbox/LeiImportKw.pm +++ b/lib/PublicInbox/LeiImportKw.pm @@ -36,7 +36,7 @@ sub ck_update_kw { # via wq_io_do my ($self, $url, $uid, $kw) = @_; my @oidbin = $self->{-lms_ro}->num_oidbin($url, $uid); my $uid_url = "$url/;UID=$uid"; - @oidbin > 1 and $self->{lei}->err("W: $uid_url not unique:\n", + @oidbin > 1 and warn("W: $uid_url not unique:\n", map { "\t".unpack('H*', $_)."\n" } @oidbin); my %seen; my @docids = sort { $a <=> $b } grep { !$seen{$_}++ } diff --git a/lib/PublicInbox/LeiInput.pm b/lib/PublicInbox/LeiInput.pm index 83479221000b..6a90e7e1e756 100644 --- a/lib/PublicInbox/LeiInput.pm +++ b/lib/PublicInbox/LeiInput.pm @@ -343,8 +343,8 @@ $input is `eml', not --in-format=$in_fmt --mail-sync specified but no inputs support it # non-fatal if some inputs support support sync - $lei->err("# --mail-sync will only be used for @{$sync->{ok}}"); - $lei->err("# --mail-sync is not supported for: @{$sync->{no}}"); + warn("# --mail-sync will only be used for @{$sync->{ok}}\n"); + warn("# --mail-sync is not supported for: @{$sync->{no}}\n"); } if ($net) { $net->{-can_die} = 1; diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index f7e37ad9ca80..f2f1e3ed2658 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -466,7 +466,7 @@ sub arg2folder { # using `$res' instead of `$orig' EOM } else { - $lei->err($res) if defined $res; + warn($res, "\n") if defined $res; push @no, $orig; } } elsif (m!\A(?:nntps?|s?news)://!i) { @@ -478,7 +478,7 @@ EOM # using `$res' instead of `$orig' EOM } else { - $lei->err($res) if defined $res; + warn($res, "\n") if defined $res; push @no, $orig; } } else { diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index 4be8f70ae401..ec41bec6f16b 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -20,7 +20,7 @@ sub _wq_done_wait { # dwaitpid callback (via wq_eof) if ($?) { $lei->child_error($?); } elsif (!unlink($f)) { - $lei->err("unlink($f): $!") unless $!{ENOENT}; + warn("unlink($f): $!\n") unless $!{ENOENT}; } else { if ($lei->{cmd} ne 'public-inbox-clone') { $lei->lazy_cb('add-external', '_finish_' @@ -120,7 +120,7 @@ sub _try_config { -d $dst or die "mkpath($dst): $!\n"; } my $err = _get_txt($self, qw(_/text/config/raw inbox.config.example)); - return $self->{lei}->err($err) if $err; + return warn($err, "\n") if $err; my $f = "$self->{dst}/inbox.config.example"; chmod((stat($f))[2] & 0444, $f) or die "chmod(a-w, $f): $!"; my $cfg = PublicInbox::Config->git_config_dump($f, $self->{lei}->{2}); @@ -151,7 +151,7 @@ sub index_cloned_inbox { my ($self, $iv) = @_; my $lei = $self->{lei}; my $err = _get_txt($self, qw(description description)); - $lei->err($err) if $err; # non fatal + warn($err, "\n") if $err; # non fatal eval { set_description($self) }; warn $@ if $@; @@ -380,7 +380,7 @@ sub try_manifest { my ($path_pfx, $v1_path, @v2_epochs) = deduce_epochs($m, $path); if (@v2_epochs) { # It may be possible to have v1 + v2 in parallel someday: - $lei->err(<{opt}->{debug}) { my $json = ref(PublicInbox::Config->json)->new; $json->utf8->canonical->pretty; - $lei->err($json->encode($lei->{qterms})); + print { $lei->{2} } $json->encode($lei->{qterms}); } my (@q, %seen); for my $pfx (@want) { diff --git a/lib/PublicInbox/LeiRediff.pm b/lib/PublicInbox/LeiRediff.pm index decb721b7a4c..740cbcee334f 100644 --- a/lib/PublicInbox/LeiRediff.pm +++ b/lib/PublicInbox/LeiRediff.pm @@ -30,7 +30,7 @@ sub rediff_user_cb { # called by solver when done # don't try to support all the git-show(1) options for non-blob, # this is just a convenience: - $type ne 'blob' and return $lei->err(<{git_dir} (wanted: $oid_want) EOF diff --git a/lib/PublicInbox/LeiRemote.pm b/lib/PublicInbox/LeiRemote.pm index 346aa6a40132..7782aa9dbfa1 100644 --- a/lib/PublicInbox/LeiRemote.pm +++ b/lib/PublicInbox/LeiRemote.pm @@ -75,7 +75,7 @@ sub smsg_eml { if (my $bref = $self->{lei}->ale->git->cat_file($smsg->{blob})) { return PublicInbox::Eml->new($bref); } - $self->{lei}->err("E: $self->{uri} $smsg->{blob} gone <$smsg->{mid}>"); + warn("E: $self->{uri} $smsg->{blob} gone <$smsg->{mid}>\n"); undef; } diff --git a/lib/PublicInbox/LeiViewText.pm b/lib/PublicInbox/LeiViewText.pm index c469d1ea5b1c..2dad3b780fa1 100644 --- a/lib/PublicInbox/LeiViewText.pm +++ b/lib/PublicInbox/LeiViewText.pm @@ -77,7 +77,7 @@ sub new { my $cfg = PublicInbox::Config::config_fh_parse($r, "\0", "\n"); waitpid($pid, 0); if ($?) { - $lei->err("# git-config failed, no color (non-fatal)"); + warn "# git-config failed, no color (non-fatal)\n"; return $self; } $self->{-colored} = \&my_colored; diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm index ae9f5881676d..fee1b859f9c6 100644 --- a/lib/PublicInbox/LeiXSearch.pm +++ b/lib/PublicInbox/LeiXSearch.pm @@ -16,6 +16,7 @@ use PublicInbox::Spawn qw(popen_rd spawn which); use PublicInbox::MID qw(mids); use PublicInbox::Smsg; use PublicInbox::Eml; +use PublicInbox::LEI; use Fcntl qw(SEEK_SET F_SETFL O_APPEND O_RDWR); use PublicInbox::ContentHash qw(git_sha); use POSIX qw(strftime); @@ -392,11 +393,11 @@ sub query_remote_mboxrd { $err = ''; if (-s $cerr) { seek($cerr, 0, SEEK_SET) or - $lei->err("seek($cmd stderr): $!"); + warn "seek($cmd stderr): $!"; $err = do { local $/; <$cerr> } // - "read($cmd stderr): $!"; + warn "read($cmd stderr): $!"; truncate($cerr, 0) or - $lei->err("truncate($cmd stderr): $!"); + warn "truncate($cmd stderr): $!"; } next if (($? >> 8) == 22 && $err =~ /\b404\b/); $uri->query_form(q => $qstr); @@ -416,6 +417,7 @@ sub xsearch_done_wait { # dwaitpid callback sub query_done { # EOF callback for main daemon my ($lei) = @_; + local $PublicInbox::LEI::current_lei = $lei; my $l2m = delete $lei->{l2m}; $l2m->wq_wait_old(\&xsearch_done_wait, $lei) if $l2m; if (my $lxs = delete $lei->{lxs}) { @@ -462,6 +464,7 @@ Error closing $lei->{ovv}->{dst}: $! sub do_post_augment { my ($lei) = @_; + local $PublicInbox::LEI::current_lei = $lei; my $l2m = $lei->{l2m} or return; # client disconnected $lei->fchdir or return; my $err; @@ -497,9 +500,10 @@ sub concurrency { $nl + $nr; } -sub start_query ($;$) { # always runs in main (lei-daemon) process - my ($self, $l2m) = @_; - if ($self->{opt_threads} || ($l2m && !$self->{opt_sort})) { +sub start_query ($$) { # always runs in main (lei-daemon) process + my ($self, $lei) = @_; + local $PublicInbox::LEI::current_lei = $lei; + if ($self->{opt_threads} || ($lei->{l2m} && !$self->{opt_sort})) { for my $ibxish (locals($self)) { $self->wq_io_do('query_one_mset', [], $ibxish); } @@ -521,9 +525,10 @@ sub start_query ($;$) { # always runs in main (lei-daemon) process } sub incr_start_query { # called whenever an l2m shard starts do_post_auth - my ($self, $l2m) = @_; + my ($self, $lei) = @_; + my $l2m = $lei->{l2m}; return if ++$self->{nr_start_query} != $l2m->{-wq_nr_workers}; - start_query($self, $l2m); + start_query($self, $lei); } sub ipc_atfork_child { @@ -545,7 +550,7 @@ sub do_query { 'l2m_progress' => [ \&l2m_progress, $lei ], 'x_it' => [ $lei ], 'child_error' => [ $lei ], - 'incr_start_query' => [ $self, $l2m ], + 'incr_start_query' => [ $self, $lei ], }; $lei->{auth}->op_merge($ops, $l2m) if $l2m && $lei->{auth}; my $end = $lei->pkt_op_pair; @@ -586,7 +591,7 @@ sub do_query { if ($l2m) { $l2m->net_merge_all_done($lei) unless $lei->{auth}; } else { - start_query($self); + start_query($self, $lei); } $lei->event_step_init; # wait for shutdowns $lei->wait_wq_events($op_c, $ops);