[pve-devel] [PATCH] Storage: add methode

Wolfgang Link w.link at proxmox.com
Thu Feb 12 07:18:18 CET 2015


>     +    } else {
>     +        die "can't snapshot";
    why 'can't snapshot'?!


If the storeid can not be parsed (undef)!

>     -    } elsif ($volid =~ m|^(/.+)$| && -e $volid) {
>     -        die "snapshot rollback device is not possible";
>     -    } else {
>     -        die "can't snapshot";

    Why do you remove those checks?

Because I checked them before in QemuServer.pm!
should I double check it?

>       -    # abort rollback if snapshot is not the latest
>     -    my $recentsnap = $class->zfs_get_latest_snapshot($scfg,
>     $volname);
>     -    if ($snap ne $recentsnap) {
>     -        die "cannot rollback, more recent snapshots exist\n";
>     -    }
>     -

    You simple remove that test (but do not call
    volume_rollback_is_possibe)?

I call it in QemuServer.pm.
should I double check it?

On 02/12/2015 06:57 AM, Dietmar Maurer wrote:
> On 02/11/2015 01:33 PM, Wolfgang Link wrote:
>> add methode volume_rollback_is_possibel and refactor
>> Improve error handling
>> If snapshot is not revetable catch it before vm will lock and shutdown.
>> This is the case if zfs has an younger snapshot.
> Please use a spell checker to fix spelling errors.
>
> possibel => possible
> revetable => ?
>
>>
>> Signed-off-by: Wolfgang Link <w.link at proxmox.com>
>> ---
>>   PVE/Storage.pm               |   19 +++++++++++++++----
>>   PVE/Storage/Plugin.pm        |    6 ++++++
>>   PVE/Storage/ZFSPlugin.pm     |    6 ------
>>   PVE/Storage/ZFSPoolPlugin.pm |   11 ++++++++---
>>   4 files changed, 29 insertions(+), 13 deletions(-)
>>
>> diff --git a/PVE/Storage.pm b/PVE/Storage.pm
>> index 8711710..c4b9a68 100755
>> --- a/PVE/Storage.pm
>> +++ b/PVE/Storage.pm
>> @@ -144,6 +144,21 @@ sub volume_resize {
>>       }
>>   }
>>   +sub volume_rollback_is_possibel {
>> +    my ($cfg, $volid, $snap) = @_;
>> +
>> +    my ($storeid, $volname) = parse_volume_id($volid, 1);
>> +    if ($storeid) {
>> +        my $scfg = storage_config($cfg, $storeid);
>> +        my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
>> +        return $plugin->volume_rollback_is_possibe($scfg, $storeid, 
>> $volname, $snap);
>
> volume_rollback_is_possibe => volume_rollback_is_possible
>
>
>> +     } elsif ($volid =~ m|^(/.+)$| && -e $volid) {
>> +        die "snapshot rollback device is not possible";
>
> We can improve those error messages, for example:
>
> die "rollback device '$volid' is not possible\n";
>
>
>> +    } else {
>> +        die "can't snapshot";
> why 'can't snapshot'?!
>
>> +    }
>> +}
>> +
>>   sub volume_snapshot {
>>       my ($cfg, $volid, $snap, $running) = @_;
>>   @@ -167,10 +182,6 @@ sub volume_snapshot_rollback {
>>           my $scfg = storage_config($cfg, $storeid);
>>           my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
>>           return $plugin->volume_snapshot_rollback($scfg, $storeid, 
>> $volname, $snap);
>> -    } elsif ($volid =~ m|^(/.+)$| && -e $volid) {
>> -        die "snapshot rollback device is not possible";
>> -    } else {
>> -        die "can't snapshot";
>
> Why do you remove those checks?
>>       }
>>   }
>>   diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm
>> index 15c23d4..4549f9f 100644
>> --- a/PVE/Storage/Plugin.pm
>> +++ b/PVE/Storage/Plugin.pm
>> @@ -656,6 +656,12 @@ sub volume_snapshot {
>>       return undef;
>>   }
>>   +sub volume_rollback_is_possibe {
>> +    my ($class, $scfg, $storeid, $volname, $snap) = @_;
>> +
>> +    return 1;
>> +}
>> +
>>   sub volume_snapshot_rollback {
>>       my ($class, $scfg, $storeid, $volname, $snap) = @_;
>>   diff --git a/PVE/Storage/ZFSPlugin.pm b/PVE/Storage/ZFSPlugin.pm
>> index 77394b9..f020985 100644
>> --- a/PVE/Storage/ZFSPlugin.pm
>> +++ b/PVE/Storage/ZFSPlugin.pm
>> @@ -310,12 +310,6 @@ sub volume_resize {
>>   sub volume_snapshot_rollback {
>>       my ($class, $scfg, $storeid, $volname, $snap) = @_;
>>   -    # abort rollback if snapshot is not the latest
>> -    my $recentsnap = $class->zfs_get_latest_snapshot($scfg, $volname);
>> -    if ($snap ne $recentsnap) {
>> -        die "cannot rollback, more recent snapshots exist\n";
>> -    }
>> -
>
> You simple remove that test (but do not call volume_rollback_is_possibe)?
>>       $class->zfs_delete_lu($scfg, $volname);
>>         $class->zfs_request($class, $scfg, undef, 'rollback', 
>> "$scfg->{pool}/$volname\@$snap");
>> diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
>> index 754f29f..0d38012 100644
>> --- a/PVE/Storage/ZFSPoolPlugin.pm
>> +++ b/PVE/Storage/ZFSPoolPlugin.pm
>> @@ -411,13 +411,18 @@ sub volume_snapshot_delete {
>>   sub volume_snapshot_rollback {
>>       my ($class, $scfg, $storeid, $volname, $snap) = @_;
>>   -    # abort rollback if snapshot is not the latest
>> +    zfs_request($class, $scfg, undef, 'rollback', 
>> "$scfg->{pool}/$volname\@$snap");
>> +}
>> +
>> +sub volume_rollback_is_possibe {
>> +    my ($class, $scfg, $storeid, $volname, $snap) = @_;
>> +
>>       my $recentsnap = $class->zfs_get_latest_snapshot($scfg, $volname);
>>       if ($snap ne $recentsnap) {
>> -        die "cannot rollback, more recent snapshots exist\n";
>> +    die "cannot rollback, more recent snapshots exist\n";
>>       }
>>   -    zfs_request($class, $scfg, undef, 'rollback', 
>> "$scfg->{pool}/$volname\@$snap");
>> +    return 1;
>>   }
>>     sub activate_storage {
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.proxmox.com/pipermail/pve-devel/attachments/20150212/033ee9cd/attachment.htm>


More information about the pve-devel mailing list