btrbk: change preserve table text: print latest match instead of earliest match

pull/88/head
Axel Burri 2016-04-12 21:06:46 +02:00
parent e200975f32
commit 032642751b
1 changed files with 21 additions and 19 deletions

40
btrbk
View File

@ -2714,38 +2714,38 @@ sub schedule(@)
foreach my $href (@sorted_schedule) {
if($preserve_min_q) {
if($preserve_min_q eq 'all') {
$href->{preserve} ||= "preserve min: all";
$href->{preserve} = "preserve min: all";
} elsif($preserve_min_q eq 'h') {
$href->{preserve} ||= "preserve min: $href->{delta_hours} hours ago" if($href->{delta_hours} <= $preserve_min_n);
$href->{preserve} = "preserve min: $href->{delta_hours} hours ago" if($href->{delta_hours} <= $preserve_min_n);
} elsif($preserve_min_q eq 'd') {
$href->{preserve} ||= "preserve min: $href->{delta_days} days ago" if($href->{delta_days} <= $preserve_min_n);
$href->{preserve} = "preserve min: $href->{delta_days} days ago" if($href->{delta_days} <= $preserve_min_n);
} elsif($preserve_min_q eq 'w') {
$href->{preserve} ||= "preserve min: $href->{delta_weeks} weeks ago" if($href->{delta_weeks} <= $preserve_min_n);
$href->{preserve} = "preserve min: $href->{delta_weeks} weeks ago" if($href->{delta_weeks} <= $preserve_min_n);
} elsif($preserve_min_q eq 'm') {
$href->{preserve} ||= "preserve min: $href->{delta_months} months ago" if($href->{delta_months} <= $preserve_min_n);
$href->{preserve} = "preserve min: $href->{delta_months} months ago" if($href->{delta_months} <= $preserve_min_n);
} elsif($preserve_min_q eq 'y') {
$href->{preserve} ||= "preserve min: $href->{delta_years} years ago" if($href->{delta_years} <= $preserve_min_n);
$href->{preserve} = "preserve min: $href->{delta_years} years ago" if($href->{delta_years} <= $preserve_min_n);
}
}
$first_in_delta_hours{$href->{delta_hours}} //= $href;
}
if($preserve_min_q && ($preserve_min_q eq 'latest') && (scalar @sorted_schedule)) {
my $href = $sorted_schedule[-1];
$href->{preserve} ||= 'preserve min: latest';
$href->{preserve} = 'preserve min: latest';
}
# filter hourly, daily, weekly, monthly, yearly
foreach (sort {$b <=> $a} keys %first_in_delta_hours) {
my $href = $first_in_delta_hours{$_} || die;
if($preserve_hourly && (($preserve_hourly eq 'all') || $href->{delta_hours} <= $preserve_hourly)) {
$href->{preserve} ||= "preserved hourly: first present of hour, $href->{delta_hours} hours ago";
if($preserve_hourly && (($preserve_hourly eq 'all') || ($href->{delta_hours} <= $preserve_hourly))) {
$href->{preserve} = "preserve hourly: first of hour, $href->{delta_hours} hours ago";
}
$first_in_delta_days{$href->{delta_days}} //= $href;
}
foreach (sort {$b <=> $a} keys %first_in_delta_days) {
my $href = $first_in_delta_days{$_} || die;
if($preserve_daily && (($preserve_daily eq 'all') || ($href->{delta_days} <= $preserve_daily))) {
$href->{preserve} ||= "preserved daily: first present of day, $href->{delta_days} days ago";
$href->{preserve} = "preserve daily: first of day, $href->{delta_days} days ago";
}
$first_in_delta_weeks{$href->{delta_weeks}} //= $href;
}
@ -2753,21 +2753,21 @@ sub schedule(@)
foreach (sort {$b <=> $a} keys %first_in_delta_weeks) {
my $href = $first_in_delta_weeks{$_} || die;
if($preserve_weekly && (($preserve_weekly eq 'all') || ($href->{delta_weeks} <= $preserve_weekly))) {
$href->{preserve} ||= "preserved weekly: $href->{delta_weeks} weeks ago, $href->{err_days_text}";
$href->{preserve} = "preserve weekly: $href->{delta_weeks} weeks ago, $href->{err_days_text}";
}
$first_weekly_in_delta_months{$href->{delta_months}} //= $href;
}
foreach (sort {$b <=> $a} keys %first_weekly_in_delta_months) {
my $href = $first_weekly_in_delta_months{$_} || die;
if($preserve_monthly && (($preserve_monthly eq 'all') || ($href->{delta_months} <= $preserve_monthly))) {
$href->{preserve} ||= "preserved monthly: first present weekly of month $href->{month} ($href->{delta_months} months ago, $href->{err_days_text})";
$href->{preserve} = "preserve monthly: first weekly of month $href->{month} ($href->{delta_months} months ago, $href->{err_days_text})";
}
$first_monthly_in_delta_years{$href->{delta_years}} //= $href;
}
foreach (sort {$b <=> $a} keys %first_monthly_in_delta_years) {
my $href = $first_monthly_in_delta_years{$_} || die;
if($preserve_yearly && (($preserve_yearly eq 'all') || ($href->{delta_years} <= $preserve_yearly))) {
$href->{preserve} ||= "preserved yearly: first present weekly of year $href->{year} ($href->{delta_years} years ago, $href->{err_days_text})";
$href->{preserve} = "preserve yearly: first weekly of year $href->{year} ($href->{delta_years} years ago, $href->{err_days_text})";
}
}
@ -2799,7 +2799,7 @@ sub schedule(@)
push @$results_list, { %result_base,
action => "delete",
value => $href->{value},
} if($results_list);;
} if($results_list);
}
}
DEBUG "Preserving " . @preserve . "/" . $count_defined . " items";
@ -2817,11 +2817,12 @@ sub format_preserve_matrix($@)
my @out;
my %trans = ( h => 'hours', d => 'days', w => 'weeks', m => 'months', y => 'years' );
if($preserve->{min_q} && ($preserve->{min_q} eq 'all')) {
push @out, "preserving all forever";
push @out, "all forever";
}
else {
push @out, "preserving all within $preserve->{min_n} $trans{$preserve->{min_q}}" if($preserve->{min_n} && $preserve->{min_q});
push @out, "first present daily for $preserve->{d} days" if($preserve->{d});
push @out, "latest" if($preserve->{min_q} && ($preserve->{min_q} eq 'latest'));
push @out, "all within $preserve->{min_n} $trans{$preserve->{min_q}}" if($preserve->{min_n} && $preserve->{min_q});
push @out, "first of day for $preserve->{d} days" if($preserve->{d});
unless($preserve->{d} && ($preserve->{d} eq 'all')) {
push @out, "first daily in week (starting on $preserve->{dow}) for $preserve->{w} weeks" if($preserve->{w});
unless($preserve->{w} && ($preserve->{w} eq 'all')) {
@ -2832,7 +2833,7 @@ sub format_preserve_matrix($@)
}
}
}
return join('; ', @out);
return 'preserving ' . join('; ', @out);
}
my $s = "";
@ -2840,6 +2841,7 @@ sub format_preserve_matrix($@)
$s = '*d+';
}
else {
# $s .= '.+' if($preserve->{min_q} && ($preserve->{min_q} eq 'latest'));
$s .= $preserve->{min_n} . $preserve->{min_q} . '+' if($preserve->{min_n} && $preserve->{min_q});
foreach (qw(h d w m y)) {
my $val = $preserve->{$_} // 0;
@ -4324,7 +4326,7 @@ MAIN:
foreach my $svol (vinfo_subsection($sroot, 'subvolume')) {
my $snapdir_ts = config_key($svol, "snapshot_dir", postfix => '/') // "";
my $snapshot_basename = config_key($svol, "snapshot_name") // die;
my $preserve_latest_snapshot = $svol->{SNAPSHOT_CREATED} ? 0 : "preserve forced: latest in list";
my $preserve_latest_snapshot = $svol->{SNAPSHOT_CREATED} ? 0 : "preserve forced: latest in list (no snapshot created)";
my $preserve_latest_backup = $preserve_latest_snapshot;
my $target_aborted = 0;