btrbk: use depends callback for raw depends

pull/542/head
Axel Burri 2022-11-19 15:01:59 +01:00
parent 6373e32875
commit c4bf7b0c5a
1 changed files with 18 additions and 0 deletions

18
btrbk
View File

@ -4498,6 +4498,22 @@ sub macro_delete($$$$;@)
my $schedule_options = shift || die; my $schedule_options = shift || die;
my %delete_options = @_; my %delete_options = @_;
my $depends_fn = (($root_subvol->{CONFIG}{target_type} // "") eq "raw") && sub {
my $vol = shift->{value} // die;
my @ret;
if(my $related = _related_nodes($vol->{node}, omit_self => 1, fatal => 1)) {
foreach my $dep (@$related) {
TRACE "Checking parent of dependent raw target: $vol->{PRINT} <- $dep->{BTRBK_RAW}{NAME}" if($do_trace);
push @ret, grep($dep->{uuid} eq $_->{value}{node}{uuid}, @_);
}
return ("parent of preserved raw target", \@ret);
} else {
ABORTED($result_vinfo, "Failed to resolve related raw targets");
WARN "Skipping delete of \"$root_subvol->{PRINT}/$subvol_basename.*\": " . ABORTED_TEXT($result_vinfo);
return ("", []);
}
};
my @schedule; my @schedule;
foreach my $vol (@{vinfo_subvol_list($root_subvol, btrbk_direct_leaf => $subvol_basename)}) { foreach my $vol (@{vinfo_subvol_list($root_subvol, btrbk_direct_leaf => $subvol_basename)}) {
push(@schedule, { value => $vol, push(@schedule, { value => $vol,
@ -4510,7 +4526,9 @@ sub macro_delete($$$$;@)
%$schedule_options, %$schedule_options,
schedule => \@schedule, schedule => \@schedule,
preserve_date_in_future => 1, preserve_date_in_future => 1,
depends => $depends_fn,
); );
return undef if(IS_ABORTED($result_vinfo)); # if depends_fn fails
my @delete_success; my @delete_success;
foreach my $vol (@$delete) { foreach my $vol (@$delete) {