]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_mirror: remove janky mirror.done stamp file
authorEric Wong <e@80x24.org>
Mon, 28 Nov 2022 05:32:17 +0000 (05:32 +0000)
committerEric Wong <e@80x24.org>
Mon, 28 Nov 2022 23:38:58 +0000 (23:38 +0000)
This makes a fundamental (and overdue) change to the core of
lei in how it handles child errors.  Every process which
generates or receives a child error will remember it before
passing it on.  This ensures _wq_done_wait callbacks will
know of prior errors aside from $? when it runs.

lib/PublicInbox/LEI.pm
lib/PublicInbox/LeiMirror.pm

index 8a14ace486bc9c0deee84cecc9684dfab488b060..b78d70de95f4e1ef7d616fd33d55f58d62e43d0c 100644 (file)
@@ -544,12 +544,11 @@ sub child_error { # passes non-fatal curl exit codes to user
        local $current_lei = $self;
        $child_error ||= 1 << 8;
        warn(substr($msg, -1, 1) eq "\n" ? $msg : "$msg\n") if defined $msg;
+       $self->{child_error} ||= $child_error;
        if ($self->{pkt_op_p}) { # to top lei-daemon
                $self->{pkt_op_p}->pkt_do('child_error', $child_error);
        } elsif ($self->{sock}) { # to lei(1) client
                send($self->{sock}, "child_error $child_error", MSG_EOR);
-       } else { # non-lei admin command
-               $self->{child_error} ||= $child_error;
        } # else noop if client disconnected
 }
 
index b982f9198b88f6fc310a5bb54905770172ecb007..b8b6b504704a3fbe63c09ff279a4548019dedbe1 100644 (file)
@@ -30,12 +30,9 @@ sub keep_going ($) {
 sub _wq_done_wait { # dwaitpid callback (via wq_eof)
        my ($arg, $pid) = @_;
        my ($mrr, $lei) = @$arg;
-       my $f = "$mrr->{dst}/mirror.done";
        if ($?) {
                $lei->child_error($?);
-       } elsif (!$mrr->{dry_run} && !unlink($f)) {
-               warn("unlink($f): $!\n") unless $!{ENOENT};
-       } else {
+       } elsif (!$lei->{child_error}) {
                if (!$mrr->{dry_run} && $lei->{cmd} ne 'public-inbox-clone') {
                        require PublicInbox::LeiAddExternal;
                        PublicInbox::LeiAddExternal::_finish_add_external(
@@ -249,7 +246,6 @@ sub index_cloned_inbox {
                PublicInbox::Admin::index_inbox($ibx, undef, $opt);
        }
        return if defined $self->{cur_dst}; # one of many repos to clone
-       open my $x, '>', "$self->{dst}/mirror.done"; # for _wq_done_wait
 }
 
 sub run_reap {
@@ -1082,7 +1078,6 @@ EOM
        }
        dump_manifest($m => $ft) if delete($self->{chg}->{manifest}) || $mis;
        ft_rename($ft, $manifest, 0666);
-       open my $x, '>', "$self->{dst}/mirror.done"; # for _wq_done_wait
 }
 
 sub start_clone_url {