}
}
+# FIXME remove maxfiles for PVE 7.0
+my $convert_maxfiles_to_prune_backups = sub {
+ my ($scfg) = @_;
+
+ return if !$scfg;
+
+ my $maxfiles = delete $scfg->{maxfiles};
+
+ if (!defined($scfg->{'prune-backups'}) && defined($maxfiles)) {
+ my $prune_backups;
+ if ($maxfiles) {
+ $prune_backups = { 'keep-last' => $maxfiles };
+ } else { # maxfiles 0 means no limit
+ $prune_backups = { 'keep-all' => 1 };
+ }
+ $scfg->{'prune-backups'} = PVE::JSONSchema::print_property_string(
+ $prune_backups,
+ 'prune-backups'
+ );
+ }
+};
+
sub storage_config {
my ($cfg, $storeid, $noerr) = @_;
die "storage '$storeid' does not exist\n" if (!$noerr && !$scfg);
+ $convert_maxfiles_to_prune_backups->($scfg);
+
return $scfg;
}
return PVE::Storage::Plugin::file_size_info($filename, $timeout);
}
+sub get_volume_notes {
+ my ($cfg, $volid, $timeout) = @_;
+
+ my ($storeid, $volname) = parse_volume_id($volid);
+ my $scfg = storage_config($cfg, $storeid);
+ my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
+
+ return $plugin->get_volume_notes($scfg, $storeid, $volname, $timeout);
+}
+
+sub update_volume_notes {
+ my ($cfg, $volid, $notes, $timeout) = @_;
+
+ my ($storeid, $volname) = parse_volume_id($volid);
+ my $scfg = storage_config($cfg, $storeid);
+ my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
+
+ $plugin->update_volume_notes($scfg, $storeid, $volname, $notes, $timeout);
+}
+
sub volume_size_info {
my ($cfg, $volid, $timeout) = @_;
foreach my $prune_entry (@{$prune_entries}) {
my $mark = $prune_entry->{mark};
my $id = $id_func->($prune_entry->{ctime});
+ $already_included->{$id} = 1 if defined($mark) && $mark eq 'keep';
+ }
- next if $already_included->{$id};
+ foreach my $prune_entry (@{$prune_entries}) {
+ my $mark = $prune_entry->{mark};
+ my $id = $id_func->($prune_entry->{ctime});
- if (defined($mark)) {
- $already_included->{$id} = 1 if $mark eq 'keep';
- next;
- }
+ next if defined($mark) || $already_included->{$id};
if (!$newly_included->{$id}) {
last if scalar(keys %{$newly_included}) >= $keep_count;
sub prune_mark_backup_group {
my ($backup_group, $keep) = @_;
- if (!scalar(grep {$_ > 0} values %{$keep})) {
+ my $keep_all = delete $keep->{'keep-all'};
+
+ if ($keep_all || !scalar(grep {$_ > 0} values %{$keep})) {
+ $keep = { 'keep-all' => 1 } if $keep_all;
foreach my $prune_entry (@{$backup_group}) {
$prune_entry->{mark} = 'keep';
}