From 237f00be034ddcbf0b8da3e5f1be0a3b4ce333e5 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Fri, 22 Apr 2022 14:15:48 +0200 Subject: [PATCH] api: replication: don't send mails about failed replication only once but rather multiple times becoming exponentially less frequent. Suggested-by: Thomas Lamprecht Signed-off-by: Fabian Ebner --- PVE/API2/Replication.pm | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/PVE/API2/Replication.pm b/PVE/API2/Replication.pm index a1bcd89bb..a7e544974 100644 --- a/PVE/API2/Replication.pm +++ b/PVE/API2/Replication.pm @@ -74,6 +74,19 @@ sub run_single_job { sub run_jobs { my ($now, $logfunc, $verbose, $mail) = @_; + my $mail_at_fail_count = sub { + my ($fail_count) = @_; + + return 1 if $fail_count == 1; + + # failing job is re-tried every half hour, try to send one mail after 1, 2, 4, 8, etc. days + my $i = 1; + while ($i * 48 < $fail_count) { + $i = $i * 2; + } + return $i * 48 == $fail_count; + }; + my $iteration = $now // time(); my $code = sub { @@ -93,7 +106,7 @@ sub run_jobs { my $jobstate = PVE::ReplicationState::extract_job_state($state, $jobcfg); eval { PVE::Tools::sendmail('root', "Replication Job: $jobcfg->{id} failed", $err) - if $jobstate->{fail_count} == 1 && $mail; + if $mail && $mail_at_fail_count->($jobstate->{fail_count}); }; warn ": $@" if $@; }