my $get_osd_usage = sub {
my ($rados) = @_;
- my $res = $rados->mon_command({ prefix => 'pg dump', dumpcontents => [ 'osds' ]}) || [];
- my $osdlist;
-
- if (ref($res) eq "HASH") { # since nautilus
- $osdlist = $res->{osd_stats};
- } elsif (ref($res) eq "ARRAY") { # until luminous
- $osdlist = $res;
- } else { # bail
- die "unknown format of pg dump osds\n";
+ my $osdlist = $rados->mon_command({ prefix => 'pg dump', dumpcontents => [ 'osds' ]});
+ if (!($osdlist && ref($osdlist))) {
+ warn "got unknown result format for 'pg dump osds' command\n";
+ return [];
}
- my $osdstat;
- foreach my $d (@$osdlist) {
+ if (ref($osdlist) eq "HASH") { # since nautilus
+ $osdlist = $osdlist->{osd_stats};
+ }
+
+ my $osdstat = {};
+ for my $d (@$osdlist) {
$osdstat->{$d->{osd}} = $d if defined($d->{osd});
}
my ($osdhash, $flags) = &$get_osd_status($rados);
- my $usagehash = &$get_osd_usage($rados);
+ my $osd_usage = $get_osd_usage->($rados);
my $osdmetadata_tmp = $rados->mon_command({ prefix => 'osd metadata' });
$new->{in} = $stat->{in} if defined($stat->{in});
}
- if (my $stat = $usagehash->{$e->{id}}) {
+ if (my $stat = $osd_usage->{$e->{id}}) {
$new->{total_space} = ($stat->{kb} || 1) * 1024;
$new->{bytes_used} = ($stat->{kb_used} || 0) * 1024;
$new->{percent_used} = ($new->{bytes_used}*100)/$new->{total_space};