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}) {
|
if($opts{wipe}) {
|
||||||
return { hod => 0, dow => 'sunday', min => 'latest', min_q => 'latest' };
|
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");
|
my $preserve_min = config_key($config, $prefix . "_preserve_min");
|
||||||
if(defined($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')) {
|
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])$/) {
|
elsif($preserve_min =~ /^([0-9]+)([hdwmy])$/) {
|
||||||
$ret->{min_n} = $1;
|
$ret{min_n} = $1;
|
||||||
$ret->{min_q} = $2;
|
$ret{min_q} = $2;
|
||||||
}
|
}
|
||||||
else { die; }
|
else { die; }
|
||||||
}
|
}
|
||||||
$ret->{hod} = config_key($config, "preserve_hour_of_day");
|
return \%ret;
|
||||||
$ret->{dow} = config_key($config, "preserve_day_of_week");
|
|
||||||
return $ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue