mirror of https://github.com/digint/btrbk
btrbk: tidy parent selection
Preparatory for incremental_prefs feature, no functional changes.pull/427/head
parent
10a6f51730
commit
6ca00feeb6
51
btrbk
51
btrbk
|
@ -3793,40 +3793,25 @@ sub get_best_parent($$$;@)
|
||||||
WARN "Best common parent for \"$svol->{PRINT}\" is not accessible within target $target_incremental_resolve \"$resolve_droot->{PRINT}\", ignoring: " . join(", ", map('"' . _fs_path($_) . '"',@inaccessible_nodes));
|
WARN "Best common parent for \"$svol->{PRINT}\" is not accessible within target $target_incremental_resolve \"$resolve_droot->{PRINT}\", ignoring: " . join(", ", map('"' . _fs_path($_) . '"',@inaccessible_nodes));
|
||||||
}
|
}
|
||||||
|
|
||||||
# preferences for parent (and required clone sources):
|
# resolve parent (and _required_ clone sources)
|
||||||
# 1. closest older in snapdir (by btrbk timestamp), related
|
|
||||||
# 2. closest older related (by cgen)
|
|
||||||
# 3. closest newer related (by cgen)
|
|
||||||
# 4. closest older in snapdir (by btrbk timestamp)
|
|
||||||
# 5. closest newer in snapdir (by btrbk timestamp)
|
|
||||||
#
|
|
||||||
my @parent;
|
my @parent;
|
||||||
if(my $cc = shift @c_related_older) {
|
my $push_parent = sub {
|
||||||
push @parent, $cc; # 2. closest older related (by cgen)
|
my ($cc, $txt) = @_;
|
||||||
DEBUG "Resolved best common parent (closest older parent_uuid relationship): $cc->[0]{PRINT}";
|
return unless(defined($cc));
|
||||||
}
|
return if(grep { $_->[0]{node}{id} == $cc->[0]{node}{id} } @parent);
|
||||||
if(my $cc = shift @c_related_newer) {
|
DEBUG "Resolved " . (@parent ? "clone source" : "parent") . " ($txt): $cc->[0]{PRINT}";
|
||||||
DEBUG ((scalar @parent ? "Adding clone source" : "Resolved best common parent") . " (closest newer parent_uuid relationship): $cc->[0]{PRINT}");
|
push @parent, $cc;
|
||||||
push @parent, $cc; # 3. closest newer related (by cgen)
|
};
|
||||||
}
|
|
||||||
if(my $cc = shift @c_snapdir_older) {
|
my @c_snapdir_related_older = grep(exists($c_rel_id{$_->[0]{node}{id}}), @c_snapdir_older);
|
||||||
unless(grep { $_->[0]{node}{id} == $cc->[0]{node}{id} } @parent) {
|
my @c_snapdir_related_newer = grep(exists($c_rel_id{$_->[0]{node}{id}}), @c_snapdir_newer);
|
||||||
if($c_rel_id{$cc->[0]{node}{id}}) {
|
|
||||||
DEBUG "Resolved best common parent (closest older btrbk timestamp, with parent_uuid relationship): $cc->[0]{PRINT}";
|
$push_parent->($c_snapdir_related_older[0], "closest older by btrbk timestamp in snapdir, with parent_uuid relationship");
|
||||||
unshift @parent, $cc; # 1. closest older in snapdir (by btrbk timestamp), related
|
#$push_parent->($c_snapdir_related_newer[0], "closest newer by btrbk timestamp in snapdir, with parent_uuid relationship");
|
||||||
}
|
$push_parent->($c_related_older[0], "closest older by cgen, with parent_uuid relationship");
|
||||||
else {
|
$push_parent->($c_related_newer[0], "closest newer by cgen, with parent_uuid relationship");
|
||||||
DEBUG ((scalar @parent ? "Adding clone source" : "Resolved best common parent") . " (closest older btrbk timestamp): $cc->[0]{PRINT}");
|
$push_parent->($c_snapdir_older[0], "closest older by btrbk timestamp in snapdir, regardless of parent_uuid relationship");
|
||||||
push @parent, $cc; # 4. closest older in snapdir (by btrbk timestamp)
|
$push_parent->($c_snapdir_newer[0], "closest newer by btrbk timestamp in snapdir, regardless of parent_uuid relationship");
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(my $cc = shift @c_snapdir_newer) {
|
|
||||||
unless(grep { $_->[0]{node}{id} == $cc->[0]{node}{id} } @parent) {
|
|
||||||
DEBUG ((scalar @parent ? "Adding clone source" : "Resolved best common parent") . " (closest newer btrbk timestamp): $cc->[0]{PRINT}");
|
|
||||||
push @parent, $cc; # 5. closest newer in snapdir (by btrbk timestamp)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# assemble results
|
# assemble results
|
||||||
unless(scalar @parent) {
|
unless(scalar @parent) {
|
||||||
|
|
Loading…
Reference in New Issue