all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Aaron Lauterer <a.lauterer@proxmox.com>
To: Thomas Lamprecht <t.lamprecht@proxmox.com>,
	Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH storage 1/2] rbd: fix #3286 add namespace support
Date: Fri, 2 Apr 2021 14:20:41 +0200	[thread overview]
Message-ID: <f7372cf2-51d3-d618-8e6a-c907ac103b0a@proxmox.com> (raw)
In-Reply-To: <5f42111c-488d-a702-69a6-7deebec46b92@proxmox.com>

Thanks for the review. I took another look at the plugin and I believe that a `get_rbd_path` sub can be use in multiple places, even the `get_kernel_device` sub could use it AFAICS. I'll send in a v2 where I will introduce that, and then add the NS functionality.

On 4/1/21 4:48 PM, Thomas Lamprecht wrote:
> On 01.04.21 15:40, Aaron Lauterer wrote:
>> This patch introduces support for Cephs RBD namespaces.
>>
>> A new storage config parameter 'namespace' defines the namespace to be
>> used for the RBD storage.
>>
>> The namespace must already exist in the Ceph cluster as it is not
>> automatically created.
>>
>> The main intention is to use this for external Ceph clusters. With
>> namespaces, each PVE cluster can get its own namespace and will not
>> conflict with other PVE clusters.
>>
>> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
>>
>> remove just style changes
>> ---
>> Changes from RFC:
>>
>> add --namespace parameter centrally in sub $build_cmd. All commands
>> except one (rbd unmap) support it. To handle commands that don't support
>> it, a hash with them was introduced.
>>
>> In a few places paths (FS, Ceph hierarchy) are needed. These are the
>> places scattered throughout the plugin where the namespace is inserted
>> if it is configured.
>>
>>   PVE/Storage/RBDPlugin.pm | 34 ++++++++++++++++++++++++++++------
>>   1 file changed, 28 insertions(+), 6 deletions(-)
>>
>> diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm
>> index fab6d57..2d78f40 100644
>> --- a/PVE/Storage/RBDPlugin.pm
>> +++ b/PVE/Storage/RBDPlugin.pm
>> @@ -27,7 +27,9 @@ my $add_pool_to_disk = sub {
>>   
>>       my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>>   
>> -    return "$pool/$disk";
>> +    my $namespace = $scfg->{namespace} ? "/$scfg->{namespace}" : "";
> 
> can I have "0" as namespace? as then above check may break. Maybe do:
> 
> my $namespace = '/' . ($scfg->{namespace} // '');
> 
> return "${pool}${namespace}${disk}";
> 
> 
> 
>> +
>> +    return "${pool}${namespace}/${disk}";
>>   };
>>   
>>   my $build_cmd = sub {
>> @@ -38,6 +40,14 @@ my $build_cmd = sub {
>>   
>>       my $cmd = [$binary, '-p', $pool];
>>   
>> +    # some subcommands will fail if the --namespace parameter is present
>> +    my $no_namespace_parameter = {
>> +	unmap => 1,
>> +    };
>> +
>> +    push @$cmd, '--namespace', $scfg->{namespace}
>> +	if ($scfg->{namespace} && !$no_namespace_parameter->{$op});
>> +
>>       push @$cmd, '-c', $cmd_option->{ceph_conf} if ($cmd_option->{ceph_conf});
>>       push @$cmd, '-m', $cmd_option->{mon_host} if ($cmd_option->{mon_host});
>>       push @$cmd, '--auth_supported', $cmd_option->{auth_supported} if ($cmd_option->{auth_supported});
>> @@ -154,6 +164,7 @@ sub rbd_ls {
>>   
>>       my $cmd = &$rbd_cmd($scfg, $storeid, 'ls', '-l', '--format', 'json');
>>       my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>> +    $pool .= "/$scfg->{namespace}" if $scfg->{namespace};
>>   
>>       my $raw = '';
>>       my $parser = sub { $raw .= shift };
>> @@ -281,6 +292,10 @@ sub properties {
>>   	    description => "Pool.",
>>   	    type => 'string',
>>   	},
>> +	namespace=> {
>> +	    description => "RBD Namespace.",
>> +	    type => 'string',
>> +	},
>>   	username => {
>>   	    description => "RBD Id.",
>>   	    type => 'string',
>> @@ -302,6 +317,7 @@ sub options {
>>   	disable => { optional => 1 },
>>   	monhost => { optional => 1},
>>   	pool => { optional => 1 },
>> +	namespace => { optional => 1 },
>>   	username => { optional => 1 },
>>   	content => { optional => 1 },
>>   	krbd => { optional => 1 },
>> @@ -349,9 +365,10 @@ sub path {
>>       $name .= '@'.$snapname if $snapname;
>>   
>>       my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>> -    return ("/dev/rbd/$pool/$name", $vmid, $vtype) if $scfg->{krbd};
>> +    my $namespace = $scfg->{namespace} ? "/$scfg->{namespace}" : "";
> 
> same as above, a for perl falsy $ns value "breaks" this.
> 
> maybe we could use a `get_pool_ns_path($scfg)` (possible better name possible,
> should be relatively short and not too misguiding) sub returning both of above?
> 
> Or actually: maybe even a `get_rbd_path($scfg, $image)` returning
> "${pool}${namespace}${image}"
> 
> (with $ns omitted/added depending on config)
> 
> There's seems to be more use for that one when looking at the changes made here.
> 
>> +    return ("/dev/rbd/${pool}${namespace}/${name}", $vmid, $vtype) if $scfg->{krbd};
>>   
>> -    my $path = "rbd:$pool/$name";
>> +    my $path = "rbd:${pool}${namespace}/${name}";
>>   
>>       $path .= ":conf=$cmd_option->{ceph_conf}" if $cmd_option->{ceph_conf};
>>       if (defined($scfg->{monhost})) {
>> @@ -370,6 +387,7 @@ sub find_free_diskname {
>>       my ($class, $storeid, $scfg, $vmid, $fmt, $add_fmt_suffix) = @_;
>>   
>>       my $cmd = &$rbd_cmd($scfg, $storeid, 'ls');
>> +
> 
> unrelated new line added? (albeit this one may improve code readability, so fine for me)
> 
>>       my $disk_list = [];
>>   
>>       my $parser = sub {
>> @@ -487,6 +505,7 @@ sub free_image {
>>       my ($vtype, $name, $vmid, undef, undef, undef) =
>>   	$class->parse_volname($volname);
>>   
>> +
> 
> bogus new lien added?
> 
>>       my $snaps = rbd_ls_snap($scfg, $storeid, $name);
>>       foreach my $snap (keys %$snaps) {
>>   	if ($snaps->{$snap}->{protected}) {
>> @@ -511,6 +530,7 @@ sub list_images {
>>   
>>       $cache->{rbd} = rbd_ls($scfg, $storeid) if !$cache->{rbd};
>>       my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>> +    $pool .= "/$scfg->{namespace}" if $scfg->{namespace};
>>   
>>       my $res = [];
>>   
>> @@ -575,7 +595,9 @@ sub deactivate_storage {
>>   }
>>   
>>   my $get_kernel_device_name = sub {
>> -    my ($pool, $name) = @_;
>> +    my ($pool, $name, $namespace) = @_;
>> +
>> +    return "/dev/rbd/${pool}/${namespace}/${name}" if $namespace;
>>   
>>       return "/dev/rbd/$pool/$name";
>>   };
>> @@ -590,7 +612,7 @@ sub map_volume {
>>   
>>       my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>>   
>> -    my $kerneldev = $get_kernel_device_name->($pool, $name);
>> +    my $kerneldev = $get_kernel_device_name->($pool, $name, $scfg->{namespace});
>>   
>>       return $kerneldev if -b $kerneldev; # already mapped
>>   
>> @@ -611,7 +633,7 @@ sub unmap_volume {
>>   
>>       my $pool =  $scfg->{pool} ? $scfg->{pool} : 'rbd';
>>   
>> -    my $kerneldev = $get_kernel_device_name->($pool, $name);
>> +    my $kerneldev = $get_kernel_device_name->($pool, $name, $scfg->{namespace});
>>   
>>       if (-b $kerneldev) {
>>   	my $cmd = &$rbd_cmd($scfg, $storeid, 'unmap', $kerneldev);
>>
> 




      reply	other threads:[~2021-04-02 12:20 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-01 13:40 Aaron Lauterer
2021-04-01 13:40 ` [pve-devel] [PATCH storage 2/2] rbd: add integration test for namespace handling Aaron Lauterer
2021-04-01 14:34   ` Thomas Lamprecht
2021-04-01 14:48 ` [pve-devel] [PATCH storage 1/2] rbd: fix #3286 add namespace support Thomas Lamprecht
2021-04-02 12:20   ` Aaron Lauterer [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f7372cf2-51d3-d618-8e6a-c907ac103b0a@proxmox.com \
    --to=a.lauterer@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=t.lamprecht@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal