mirror of https://github.com/digint/btrbk
btrbk: make check for duplicate snapshot/backup locations aware of shared btr_tree
Build check hash within btr_tree node instead per URL. This makes it aware of shared btr_tree (different hostname:port pointing to same btrfs filesystem).pull/274/head
parent
2f09a9a723
commit
ca3bd505ef
18
btrbk
18
btrbk
|
@ -5497,30 +5497,28 @@ MAIN:
|
|||
}
|
||||
|
||||
# check for duplicate snapshot locations
|
||||
my %snapshot_check;
|
||||
my %backup_check;
|
||||
foreach my $sroot (vinfo_subsection($config, 'volume')) {
|
||||
foreach my $svol (vinfo_subsection($sroot, 'subvolume')) {
|
||||
# check for duplicate snapshot locations
|
||||
my $snaproot = vinfo_snapshot_root($svol);
|
||||
my $snapshot_basename = config_key($svol, "snapshot_name") // die;
|
||||
my $snapshot_target = $sroot->{URL_PREFIX} . ($realpath_cache{$snaproot->{URL}} // $snaproot->{PATH}) . '/' . $snapshot_basename;
|
||||
if(my $prev = $snapshot_check{$snapshot_target}) {
|
||||
ERROR "Subvolume \"$prev\" and \"$svol->{PRINT}\" will create same snapshot: ${snapshot_target}.*";
|
||||
my $snaproot_subdir_path = (defined($snaproot->{NODE_SUBDIR}) ? $snaproot->{NODE_SUBDIR} . '/' : "") . $snapshot_basename;
|
||||
if(my $prev = $snaproot->{node}->{_SNAPSHOT_CHECK}->{$snaproot_subdir_path}) {
|
||||
ERROR "Subvolume \"$prev\" and \"$svol->{PRINT}\" will create same snapshot: $snaproot->{PRINT}/${snapshot_basename}.*";
|
||||
ERROR "Please fix \"snapshot_name\" configuration options!";
|
||||
exit 1;
|
||||
}
|
||||
$snapshot_check{$snapshot_target} = $svol->{PRINT};
|
||||
$snaproot->{node}->{_SNAPSHOT_CHECK}->{$snaproot_subdir_path} = $svol->{PRINT};
|
||||
|
||||
foreach my $droot (vinfo_subsection($svol, 'target')) {
|
||||
# check for duplicate snapshot locations
|
||||
my $snapshot_backup_target = $droot->{URL_PREFIX} . ($realpath_cache{$droot->{URL}} // $droot->{PATH}) . '/' . $snapshot_basename;
|
||||
if(my $prev = $backup_check{$snapshot_backup_target}) {
|
||||
ERROR "Subvolume \"$prev\" and \"$svol->{PRINT}\" will create same backup target: ${snapshot_backup_target}.*";
|
||||
my $droot_subdir_path = (defined($droot->{NODE_SUBDIR}) ? $droot->{NODE_SUBDIR} . '/' : "") . $snapshot_basename;
|
||||
if(my $prev = $droot->{node}->{_BACKUP_CHECK}->{$droot_subdir_path}) {
|
||||
ERROR "Subvolume \"$prev\" and \"$svol->{PRINT}\" will create same backup target: $droot->{PRINT}/${snapshot_basename}.*";
|
||||
ERROR "Please fix \"snapshot_name\" or \"target\" configuration options!";
|
||||
exit 1;
|
||||
}
|
||||
$backup_check{$snapshot_backup_target} = $svol->{PRINT};
|
||||
$droot->{node}->{_BACKUP_CHECK}->{$droot_subdir_path} = $svol->{PRINT};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue