From 702864ea3393f4c7a91336b277083bf9fd4b0860 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 21 Sep 2021 07:41:56 +0000 Subject: [PATCH 1/1] lei q: show progress on >1s preparation phase Overwriting existing destinations safe (but slow) by default, so show a progress message noting what we're doing while a user waits. --- lib/PublicInbox/LeiToMail.pm | 23 ++++++++++++++++++++++- lib/PublicInbox/LeiXSearch.pm | 2 +- t/lei-watch.t | 2 +- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index a419b83f..ed609081 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -689,6 +689,8 @@ sub do_augment { # slow, runs in wq worker # fast (spawn compressor or mkdir), runs in same process as pre_augment sub post_augment { my ($self, $lei, @args) = @_; + $self->{-au_noted}++ and $lei->qerr("# writing to $self->{dst} ..."); + my $wait = $lei->{opt}->{'import-before'} ? $lei->{sto}->wq_do('checkpoint', 1) : 0; # _post_augment_mbox @@ -784,9 +786,28 @@ sub wq_atexit_child { $lei->{pkt_op_p}->pkt_do('l2m_progress', $nr); } +# runs on a 1s timer in lei-daemon +sub augment_inprogress { + my ($err, $opt, $dst, $au_noted) = @_; + $$au_noted++ and return; + print $err '# '.($opt->{'import-before'} ? + "importing non-external contents of $dst" : ( + ($opt->{dedupe} // 'content') ne 'none') ? + "scanning old contents of $dst for dedupe" : + "removing old contents of $dst")." ...\n"; +} + # called in top-level lei-daemon when LeiAuth is done sub net_merge_all_done { - my ($self) = @_; + my ($self, $lei) = @_; + if ($PublicInbox::DS::in_loop && + $self->can("_do_augment_$self->{base_type}") && + !$lei->{opt}->{quiet}) { + $self->{-au_noted} = 0; + PublicInbox::DS::add_timer(1, \&augment_inprogress, + $lei->{2}, $lei->{opt}, + $self->{dst}, \$self->{-au_noted}); + } $self->wq_broadcast('do_post_auth'); $self->wq_close(1); } diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm index 3ce8f32d..2227c2ac 100644 --- a/lib/PublicInbox/LeiXSearch.pm +++ b/lib/PublicInbox/LeiXSearch.pm @@ -572,7 +572,7 @@ sub do_query { $self->{opt_sort} = $lei->{opt}->{'sort'}; $self->{-do_lcat} = !!(delete $lei->{lcat_todo}); if ($l2m) { - $l2m->net_merge_all_done unless $lei->{auth}; + $l2m->net_merge_all_done($lei) unless $lei->{auth}; } else { start_query($self); } diff --git a/t/lei-watch.t b/t/lei-watch.t index a881fbb9..df887a03 100644 --- a/t/lei-watch.t +++ b/t/lei-watch.t @@ -91,7 +91,7 @@ test_lei(sub { $ino_fdinfo or skip 'Linux/inotify-only removal removal', 1; open my $fh, '<', $ino_fdinfo or xbail "open $ino_fdinfo: $!"; my $cmp = [ <$fh> ]; - is_deeply($cmp, $ino_contents, 'inotify Maildir watches gone'); + is_xdeeply($cmp, $ino_contents, 'inotify Maildir watches gone'); }; }); -- 2.44.0