[pve-devel] [PATCH manager] API: OSD: Fix #2496 Check OSD Network

Thomas Lamprecht t.lamprecht at proxmox.com
Sat Dec 14 15:23:51 CET 2019


On 12/13/19 3:56 PM, Aaron Lauterer wrote:
> It's possible to have a situation where the cluster network (used for
> inter-OSD traffic) is not configured on a node. The OSD can still be
> created but can't communicate.
> 
> This check will abort the creation if there is no IP within the subnet
> of the cluster network present on the node. If there is no dedicated
> cluster network the public network is used. The chances of that not
> being configured is much lower but better be on the safe side and check
> it if there is no cluster network.
> 

As said in another mail, patch is OK semantically, thanks!
Some style nits inline, though.

> Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
> ---
>  PVE/API2/Ceph/OSD.pm | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/PVE/API2/Ceph/OSD.pm b/PVE/API2/Ceph/OSD.pm
> index 5f70cf58..59cc9567 100644
> --- a/PVE/API2/Ceph/OSD.pm
> +++ b/PVE/API2/Ceph/OSD.pm
> @@ -275,6 +275,14 @@ __PACKAGE__->register_method ({
>  	# extract parameter info and fail if a device is set more than once
>  	my $devs = {};
>  
> +	my $ceph_conf = cfs_read_file('ceph.conf');
> +
> +	# check if network is configured
> +	my $osd_network = $ceph_conf->{global}->{cluster_network}
> +			    // $ceph_conf->{global}->{public_network};
> +	die "No network interface configured for subnet $osd_network. Check ".
> +	    "your network config.\n" if !@{PVE::Network::get_local_ip_from_cidr($osd_network)};

I'd like to avoid a post-if if its statement goes over multiple lines, i.e.:

OK:
die "foo" if !check; 

OK:
die "a bit of a longer error message here, we need to be more yadda, yadda"
    if !check;

*NOT* OK:
die "even a longer error message here, we need to be really really really ".
    "more yadda, yadda"
    if !check;


The check itself should ideally also not span multiple lines, but exceptions can
be OK for that.

Also @{function_call()} is something which should be rather avoided, if the
alternatives are somewhat easily to do, here I'd maybe do:

my $cluster_net_ips = PVE::Network::get_local_ip_from_cidr($osd_network);
if (scalar(@$cluster_net_ips) < 1) {
   die "..."
}

> +
>  	# FIXME: rename params on next API compatibillity change (7.0)
>  	$param->{wal_dev_size} = delete $param->{wal_size};
>  	$param->{db_dev_size} = delete $param->{db_size};
> @@ -330,7 +338,6 @@ __PACKAGE__->register_method ({
>  	my $fsid = $monstat->{monmap}->{fsid};
>          $fsid = $1 if $fsid =~ m/^([0-9a-f\-]+)$/;
>  
> -	my $ceph_conf = cfs_read_file('ceph.conf');
>  	my $ceph_bootstrap_osd_keyring = PVE::Ceph::Tools::get_config('ceph_bootstrap_osd_keyring');
>  
>  	if (! -f $ceph_bootstrap_osd_keyring && $ceph_conf->{global}->{auth_client_required} eq 'cephx') {
> 




More information about the pve-devel mailing list