mirror of https://github.com/digint/btrbk
btrbk: fix scheduler when overriding "target_preserve_min" in combination with global "target" section
When configuring "target" in a global (or "volume") context, and overriding target_preserve_min in "subvolume" section, the scheduler has undefined behavior (mixing up the "min" values). Fixed by returning a copy of the preserve hash in config_preserve_hash().pull/274/head
parent
17957a163a
commit
6f68b713ee
18
btrbk
18
btrbk
|
@ -3216,22 +3216,24 @@ sub config_preserve_hash($$;@)
|
|||
if($opts{wipe}) {
|
||||
return { hod => 0, dow => 'sunday', min => 'latest', min_q => 'latest' };
|
||||
}
|
||||
my $ret = config_key($config, $prefix . "_preserve") // {};
|
||||
my $preserve = config_key($config, $prefix . "_preserve") // {};
|
||||
my %ret = ( %$preserve, # make a copy (don't pollute config)
|
||||
hod => config_key($config, "preserve_hour_of_day"),
|
||||
dow => config_key($config, "preserve_day_of_week")
|
||||
);
|
||||
my $preserve_min = config_key($config, $prefix . "_preserve_min");
|
||||
if(defined($preserve_min)) {
|
||||
$ret->{min} = $preserve_min; # used for raw schedule output
|
||||
$ret{min} = $preserve_min; # used for raw schedule output
|
||||
if(($preserve_min eq 'all') || ($preserve_min eq 'latest')) {
|
||||
$ret->{min_q} = $preserve_min;
|
||||
$ret{min_q} = $preserve_min;
|
||||
}
|
||||
elsif($preserve_min =~ /^([0-9]+)([hdwmy])$/) {
|
||||
$ret->{min_n} = $1;
|
||||
$ret->{min_q} = $2;
|
||||
$ret{min_n} = $1;
|
||||
$ret{min_q} = $2;
|
||||
}
|
||||
else { die; }
|
||||
}
|
||||
$ret->{hod} = config_key($config, "preserve_hour_of_day");
|
||||
$ret->{dow} = config_key($config, "preserve_day_of_week");
|
||||
return $ret;
|
||||
return \%ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue