From 07464701cd047fee6cd9c4a9cd78a837ffc07489 Mon Sep 17 00:00:00 2001 From: songbaisen Date: Wed, 3 Feb 2016 14:12:25 +0800 Subject: [PATCH] Mon: show the pool quota info on ceph df detail command Fixes: #14216 Signed-off-by: song baisen --- src/mon/PGMonitor.cc | 26 +++++++++++--- src/mon/PGMonitor.h | 2 +- src/test/Makefile.am | 1 + src/test/mon/test_pool_quota.sh | 61 +++++++++++++++++++++++++++++++++ 4 files changed, 85 insertions(+), 5 deletions(-) create mode 100755 src/test/mon/test_pool_quota.sh diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 60ce45d4941..414b2e0188a 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1335,7 +1335,7 @@ inline string percentify(const float& a) { //void PGMonitor::dump_object_stat_sum(stringstream& ss, Formatter *f, void PGMonitor::dump_object_stat_sum(TextTable &tbl, Formatter *f, object_stat_sum_t &sum, uint64_t avail, - float raw_used_rate, bool verbose) const + float raw_used_rate, bool verbose, const pg_pool_t *pool) const { float curr_object_copies_rate = 0.0; if (sum.num_object_copies > 0) @@ -1347,6 +1347,8 @@ void PGMonitor::dump_object_stat_sum(TextTable &tbl, Formatter *f, f->dump_unsigned("max_avail", avail); f->dump_int("objects", sum.num_objects); if (verbose) { + f->dump_int("quota_objects", pool->quota_max_objects); + f->dump_int("quota_bytes", pool->quota_max_bytes); f->dump_int("dirty", sum.num_objects_dirty); f->dump_int("rd", sum.num_rd); f->dump_int("rd_bytes", sum.num_rd_kb * 1024ull); @@ -1414,8 +1416,12 @@ void PGMonitor::dump_pool_stats(stringstream &ss, Formatter *f, bool verbose) } else { tbl.define_column("NAME", TextTable::LEFT, TextTable::LEFT); tbl.define_column("ID", TextTable::LEFT, TextTable::LEFT); - if (verbose) + if (verbose) { tbl.define_column("CATEGORY", TextTable::LEFT, TextTable::LEFT); + tbl.define_column("QUOTA OBJECTS", TextTable::LEFT, TextTable::LEFT); + tbl.define_column("QUOTA BYTES", TextTable::LEFT, TextTable::LEFT); + } + tbl.define_column("USED", TextTable::LEFT, TextTable::RIGHT); tbl.define_column("%USED", TextTable::LEFT, TextTable::RIGHT); tbl.define_column("MAX AVAIL", TextTable::LEFT, TextTable::RIGHT); @@ -1485,10 +1491,22 @@ void PGMonitor::dump_pool_stats(stringstream &ss, Formatter *f, bool verbose) } else { tbl << pool_name << pool_id; - if (verbose) + if (verbose) { tbl << "-"; + + if (pool->quota_max_objects == 0) + tbl << "N/A"; + else + tbl << si_t(pool->quota_max_objects); + + if (pool->quota_max_bytes == 0) + tbl << "N/A"; + else + tbl << si_t(pool->quota_max_bytes); + } + } - dump_object_stat_sum(tbl, f, stat.stats.sum, avail, raw_used_rate, verbose); + dump_object_stat_sum(tbl, f, stat.stats.sum, avail, raw_used_rate, verbose, pool); if (f) f->close_section(); // stats else diff --git a/src/mon/PGMonitor.h b/src/mon/PGMonitor.h index c5af197fe59..233f7768799 100644 --- a/src/mon/PGMonitor.h +++ b/src/mon/PGMonitor.h @@ -157,7 +157,7 @@ private: object_stat_sum_t &sum, uint64_t avail, float raw_used_rate, - bool verbose) const; + bool verbose, const pg_pool_t *pool) const; int64_t get_rule_avail(OSDMap& osdmap, int ruleno) const; diff --git a/src/test/Makefile.am b/src/test/Makefile.am index 6abfa432790..9bcb6b886aa 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -79,6 +79,7 @@ check_SCRIPTS += \ test/mon/osd-erasure-code-profile.sh \ test/mon/mkfs.sh \ test/mon/mon-scrub.sh \ + test/mon/test_pool_quota.sh \ test/osd/osd-scrub-repair.sh \ test/osd/osd-scrub-snaps.sh \ test/osd/osd-config.sh \ diff --git a/src/test/mon/test_pool_quota.sh b/src/test/mon/test_pool_quota.sh new file mode 100755 index 00000000000..fd3879d1970 --- /dev/null +++ b/src/test/mon/test_pool_quota.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# +# Generic pool quota test +# + +# Includes +source ../qa/workunits/ceph-helpers.sh + +function run() { + local dir=$1 + shift + + export CEPH_MON="127.0.0.1:17108" + export CEPH_ARGS + CEPH_ARGS+="--fsid=$(uuidgen) --auth-supported=none " + CEPH_ARGS+="--mon-host=$CEPH_MON " + + local funcs=${@:-$(set | sed -n -e 's/^\(TEST_[0-9a-z_]*\) .*/\1/p')} + for func in $funcs ; do + $func $dir || return 1 + done +} + +function TEST_pool_quota() { + local dir=$1 + setup $dir || return 1 + + run_mon $dir a || return 1 + run_osd $dir 0 || return 1 + run_osd $dir 1 || return 1 + run_osd $dir 2 || return 1 + + local poolname=testquoa + ceph osd pool create $poolname 20 + local objects=`ceph df detail | grep -w $poolname|awk '{print $4}'` + local bytes=`ceph df detail | grep -w $poolname|awk '{print $5}'` + + echo $objects + echo $bytes + if [ $objects != 'N/A' ] || [ $bytes != 'N/A' ] ; + then + return 1 + fi + + ceph osd pool set-quota $poolname max_objects 1000 + ceph osd pool set-quota $poolname max_bytes 1024 + + objects=`ceph df detail | grep -w $poolname|awk '{print $4}'` + bytes=`ceph df detail | grep -w $poolname|awk '{print $5}'` + + if [ $objects != '1000' ] || [ $bytes != '1024' ] ; + then + return 1 + fi + + ceph osd pool delete $poolname $poolname --yes-i-really-really-mean-it + teardown $dir || return 1 +} + +main testpoolquota