[pve-devel] [PATCH storage v2 2/3] disks: die if storage name is already in use
Aaron Lauterer
a.lauterer at proxmox.com
Thu Aug 18 17:22:58 CEST 2022
On 8/17/22 13:42, Fabian Grünbichler wrote:
> On July 15, 2022 1:58 pm, Aaron Lauterer wrote:
[...]
>> - my $worker = sub {
>> - my $path = "/mnt/pve/$name";
>> - my $mountunitname = PVE::Systemd::escape_unit($path, 1) . ".mount";
>> - my $mountunitpath = "/etc/systemd/system/$mountunitname";
>> + my $mounted = PVE::Diskmanage::mounted_paths();
>> + die "a mountpoint for '${name}' already exists: ${path} ($1)\n" if $mounted->{$path};
>
> nit: the mountpoint existing is not the issue (something already being
> mounted there is!). also, where does the $1 come from?
good point and thanks for catching the $1
>
>> + die "a systemd mount unit already exists: ${mountunitpath}\n" if -e $mountunitpath;
>
> could check if it's identical to the one we'd generate (in the spirit of
> patch #3 ;))
I looked into it, depending on how hard we want to match the mount unit, this
could be a bit hard. It contains the /dev/disk/by-uuid/... path which will not
be the same as it changes with each FS creation (IIUC).
>
>>
>> + my $worker = sub {
>> PVE::Diskmanage::locked_disk_action(sub {
>> PVE::Diskmanage::assert_disk_unused($dev);
>>
>> diff --git a/PVE/API2/Disks/LVM.pm b/PVE/API2/Disks/LVM.pm
>> index 6e4331a..a27afe2 100644
>> --- a/PVE/API2/Disks/LVM.pm
>> +++ b/PVE/API2/Disks/LVM.pm
>> @@ -152,6 +152,9 @@ __PACKAGE__->register_method ({
>> PVE::Diskmanage::assert_disk_unused($dev);
>> PVE::Storage::assert_sid_unused($name) if $param->{add_storage};
>>
>> + die "volume group with name '${name}' already exists\n"
>> + if PVE::Storage::LVMPlugin::lvm_vgs()->{$name};
>
> probably better off inside the worker, since `vgs` might take a while
> (although we also use it in the index API call in this module..)
From a GUI perspective: putting it in a worker would result in the user to hit
okay and then will see the failed task right? Keeping it as is will result in an
error popping up when clicking ok/create and the user can edit the name instead
of starting all over again. Though, if `vgs` really needs a bit, that error
popping up could take a moment or two.
[...]
>> sub preparetree {
>> @@ -336,6 +340,7 @@ __PACKAGE__->register_method ({
>> my $user = $rpcenv->get_user();
>>
>> my $name = $param->{name};
>> + my $node = $param->{node};
>
> nit: please also change the usage further below in this API handler if
> you do this
what exactly do you mean? defining local variables for $param->{..} ones?
>
>> my $devs = [PVE::Tools::split_list($param->{devices})];
>> my $raidlevel = $param->{raidlevel};
>> my $compression = $param->{compression} // 'on';
>> @@ -346,6 +351,10 @@ __PACKAGE__->register_method ({
>> }
>> PVE::Storage::assert_sid_unused($name) if $param->{add_storage};
>>
>> + my $pools = get_pool_data();
>
> and also here
>
>> + die "pool '${name}' already exists on node '$node'\n"
>> + if grep { $_->{name} eq $name } @{$pools};
>> +
>> my $numdisks = scalar(@$devs);
>> my $mindisks = {
>> single => 1,
>> --
>> 2.30.2
>>
>>
>>
>> _______________________________________________
>> pve-devel mailing list
>> pve-devel at lists.proxmox.com
>> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>>
>>
>>
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
More information about the pve-devel
mailing list