On 5/28/20 4:41 PM, Alwin Antreich wrote:
> Luminous, Nautilus and Octopus. In Octopus the mon_status was dropped.
> Also the ceph status was cleaned up and doesn't provide the mgrmap and
> monmap.
> 
> The rados queries used in the ceph status API endpoints (cluster / node)
> were factored out and merged to one place.
> 
> Signed-off-by: Alwin Antreich <a.antre...@proxmox.com>
> ---
> note: as discussed off-list with Dominik, the status API call could also
>       be split into multiple API calls. To provide mgrmap, monmap and
>       status separately.
> 
>  PVE/API2/Ceph.pm                  |  5 +----
>  PVE/API2/Ceph/MON.pm              |  6 +++---
>  PVE/API2/Ceph/OSD.pm              |  2 +-
>  PVE/API2/Cluster/Ceph.pm          |  5 +----
>  PVE/Ceph/Tools.pm                 | 13 +++++++++++++
>  www/manager6/ceph/StatusDetail.js |  7 ++++---
>  6 files changed, 23 insertions(+), 15 deletions(-)
> 
> diff --git a/PVE/API2/Ceph.pm b/PVE/API2/Ceph.pm
> index 85a04101..afc1bdbd 100644
> --- a/PVE/API2/Ceph.pm
> +++ b/PVE/API2/Ceph.pm
> @@ -580,10 +580,7 @@ __PACKAGE__->register_method ({
>  
>       PVE::Ceph::Tools::check_ceph_inited();
>  
> -     my $rados = PVE::RADOS->new();
> -     my $status = $rados->mon_command({ prefix => 'status' });
> -     $status->{health} = $rados->mon_command({ prefix => 'health', detail => 
> 'detail' });
> -     return $status;
> +     return PVE::Ceph::Tools::ceph_cluster_status();
>      }});
>  
>  __PACKAGE__->register_method ({
> diff --git a/PVE/API2/Ceph/MON.pm b/PVE/API2/Ceph/MON.pm
> index 3baeac52..b33b8700 100644
> --- a/PVE/API2/Ceph/MON.pm
> +++ b/PVE/API2/Ceph/MON.pm
> @@ -130,7 +130,7 @@ __PACKAGE__->register_method ({
>       my $monhash = PVE::Ceph::Services::get_services_info("mon", $cfg, 
> $rados);
>  
>       if ($rados) {
> -         my $monstat = $rados->mon_command({ prefix => 'mon_status' });
> +         my $monstat = $rados->mon_command({ prefix => 'quorum_status' });
>  
>           my $mons = $monstat->{monmap}->{mons};
>           foreach my $d (@$mons) {
> @@ -338,7 +338,7 @@ __PACKAGE__->register_method ({
>       my $monsection = "mon.$monid";
>  
>       my $rados = PVE::RADOS->new();
> -     my $monstat = $rados->mon_command({ prefix => 'mon_status' });
> +     my $monstat = $rados->mon_command({ prefix => 'quorum_status' });
>       my $monlist = $monstat->{monmap}->{mons};
>       my $monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, 
> $rados);
>  
> @@ -356,7 +356,7 @@ __PACKAGE__->register_method ({
>               # reopen with longer timeout
>               $rados = PVE::RADOS->new(timeout => 
> PVE::Ceph::Tools::get_config('long_rados_timeout'));
>               $monhash = PVE::Ceph::Services::get_services_info('mon', $cfg, 
> $rados);
> -             $monstat = $rados->mon_command({ prefix => 'mon_status' });
> +             $monstat = $rados->mon_command({ prefix => 'quorum_status' });
>               $monlist = $monstat->{monmap}->{mons};
>  
>               my $addr;
> diff --git a/PVE/API2/Ceph/OSD.pm b/PVE/API2/Ceph/OSD.pm
> index a514c502..ceaed129 100644
> --- a/PVE/API2/Ceph/OSD.pm
> +++ b/PVE/API2/Ceph/OSD.pm
> @@ -344,7 +344,7 @@ __PACKAGE__->register_method ({
>  
>       # get necessary ceph infos
>       my $rados = PVE::RADOS->new();
> -     my $monstat = $rados->mon_command({ prefix => 'mon_status' });
> +     my $monstat = $rados->mon_command({ prefix => 'quorum_status' });
>  
>       die "unable to get fsid\n" if !$monstat->{monmap} || 
> !$monstat->{monmap}->{fsid};
>       my $fsid = $monstat->{monmap}->{fsid};
> diff --git a/PVE/API2/Cluster/Ceph.pm b/PVE/API2/Cluster/Ceph.pm
> index e18d421e..c0277221 100644
> --- a/PVE/API2/Cluster/Ceph.pm
> +++ b/PVE/API2/Cluster/Ceph.pm
> @@ -142,10 +142,7 @@ __PACKAGE__->register_method ({
>  
>       PVE::Ceph::Tools::check_ceph_inited();
>  
> -     my $rados = PVE::RADOS->new();
> -     my $status = $rados->mon_command({ prefix => 'status' });
> -     $status->{health} = $rados->mon_command({ prefix => 'health', detail => 
> 'detail' });
> -     return $status;
> +     return PVE::Ceph::Tools::ceph_cluster_status();
>      }
>  });
>  
> diff --git a/PVE/Ceph/Tools.pm b/PVE/Ceph/Tools.pm
> index 3273c7d1..b4a83f2e 100644
> --- a/PVE/Ceph/Tools.pm
> +++ b/PVE/Ceph/Tools.pm
> @@ -468,4 +468,17 @@ sub get_real_flag_name {
>      return $flagmap->{$flag} // $flag;
>  }
>  
> +sub ceph_cluster_status {
> +    my ($rados) = @_;
> +    $rados = PVE::RADOS->new() if !$rados;
> +
> +    my $status = $rados->mon_command({ prefix => 'status' });
> +
> +    $status->{health} = $rados->mon_command({ prefix => 'health', detail => 
> 'detail' });
> +    $status->{monmap} = $rados->mon_command({ prefix => 'mon dump' });

Guarding this could be one way but at least doing it only if $status->{xy} isn't
already defined would avoid (useless?) extra calls in the nautilus case?


> +    $status->{mgrmap} = $rados->mon_command({ prefix => 'mgr dump' });
> +
> +    return $status;
> +}
> +
>  1;
> diff --git a/www/manager6/ceph/StatusDetail.js 
> b/www/manager6/ceph/StatusDetail.js
> index 8185e3bb..6561eba3 100644
> --- a/www/manager6/ceph/StatusDetail.js
> +++ b/www/manager6/ceph/StatusDetail.js
> @@ -263,9 +263,10 @@ Ext.define('PVE.ceph.StatusDetail', {
>  
>       // update osds counts
>  
> -     var total_osds = osdmap.osdmap.num_osds || 0;
> -     var in_osds = osdmap.osdmap.num_in_osds || 0;
> -     var up_osds = osdmap.osdmap.num_up_osds || 0;
> +     // pre-octopus || octopus || 0
> +     var total_osds = osdmap.osdmap.num_osds || osdmap.num_osds || 0;
> +     var in_osds = osdmap.osdmap.num_in_osds || osdmap.num_in_osds || 0;
> +     var up_osds = osdmap.osdmap.num_up_osds || osdmap.num_up_osds || 0;
>       var out_osds = total_osds - in_osds;
>       var down_osds = total_osds - up_osds;
>  
> 


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to