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 E18951FC11 for ; Tue, 21 Sep 2021 07:41:59 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 09/12] lei q: show progress on >1s preparation phase Date: Tue, 21 Sep 2021 07:41:56 +0000 Message-Id: <20210921074159.20052-10-e@80x24.org> In-Reply-To: <20210921074159.20052-1-e@80x24.org> References: <20210921074159.20052-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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'); }; });