From a15f6e4cea5af9fc82c755120642634b68af5992 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Mon, 19 Jun 2017 12:23:01 -0400 Subject: [PATCH] mon: store application metadata in pg_pool_t Signed-off-by: Jason Dillaman --- src/mon/MonCommands.h | 25 +++++++++++++++++++++++++ src/osd/osd_types.cc | 33 ++++++++++++++++++++++++++++----- src/osd/osd_types.h | 3 +++ 3 files changed, 56 insertions(+), 5 deletions(-) diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index b04b1b7b64d..66177ae1698 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -897,6 +897,31 @@ COMMAND("osd pool get-quota " \ "name=pool,type=CephPoolname ", "obtain object or byte limits for pool", "osd", "r", "cli,rest") +COMMAND("osd pool application enable " \ + "name=pool,type=CephPoolname " \ + "name=app,type=CephString,goodchars=[A-Za-z0-9-_.] " \ + "name=force,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ + "enable use of an application [cephfs,rbd,rgw] on pool ", + "osd", "rw", "cli,rest") +COMMAND("osd pool application disable " \ + "name=pool,type=CephPoolname " \ + "name=app,type=CephString " \ + "name=force,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ + "disables use of an application on pool ", + "osd", "rw", "cli,rest") +COMMAND("osd pool application set " \ + "name=pool,type=CephPoolname " \ + "name=app,type=CephString " \ + "name=key,type=CephString,goodchars=[A-Za-z0-9-_.] " \ + "name=value,type=CephString,goodchars=[A-Za-z0-9-_.=]", + "sets application metadata key to on pool ", + "osd", "rw", "cli,rest") +COMMAND("osd pool application rm " \ + "name=pool,type=CephPoolname " \ + "name=app,type=CephString " \ + "name=key,type=CephString", + "removes application metadata key on pool ", + "osd", "rw", "cli,rest") COMMAND("osd utilization", "get basic pg distribution stats", "osd", "r", "cli,rest") diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index bbacdb38aa2..cda9e67f3be 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1206,6 +1206,15 @@ void pg_pool_t::dump(Formatter *f) const f->open_object_section("options"); opts.dump(f); f->close_section(); // options + f->open_object_section("application_metadata"); + for (auto &app_pair : application_metadata) { + f->open_object_section(app_pair.first.c_str()); + for (auto &kv_pair : app_pair.second) { + f->dump_string(kv_pair.first.c_str(), kv_pair.second); + } + f->close_section(); // application + } + f->close_section(); // application_metadata } void pg_pool_t::convert_to_pg_shards(const vector &from, set* to) const { @@ -1505,15 +1514,13 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const return; } - uint8_t v = 25; + uint8_t v = 26; if (!(features & CEPH_FEATURE_NEW_OSDOP_ENCODING)) { // this was the first post-hammer thing we added; if it's missing, encode // like hammer. v = 21; } - if ((features & - (CEPH_FEATURE_RESEND_ON_SPLIT|CEPH_FEATURE_SERVER_JEWEL)) != - (CEPH_FEATURE_RESEND_ON_SPLIT|CEPH_FEATURE_SERVER_JEWEL)) { + if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { v = 24; } @@ -1581,12 +1588,15 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const if (v >= 25) { ::encode(last_force_op_resend, bl); } + if (v >= 26) { + ::encode(application_metadata, bl); + } ENCODE_FINISH(bl); } void pg_pool_t::decode(bufferlist::iterator& bl) { - DECODE_START_LEGACY_COMPAT_LEN(25, 5, 5, bl); + DECODE_START_LEGACY_COMPAT_LEN(26, 5, 5, bl); ::decode(type, bl); ::decode(size, bl); ::decode(crush_rule, bl); @@ -1733,6 +1743,9 @@ void pg_pool_t::decode(bufferlist::iterator& bl) } else { last_force_op_resend = last_force_op_resend_preluminous; } + if (struct_v >= 26) { + ::decode(application_metadata, bl); + } DECODE_FINISH(bl); calc_pg_masks(); calc_grade_table(); @@ -1796,6 +1809,7 @@ void pg_pool_t::generate_test_instances(list& o) a.erasure_code_profile = "profile in osdmap"; a.expected_num_objects = 123456; a.fast_read = false; + a.application_metadata = {{"rbd", {{"key", "value"}}}}; o.push_back(new pg_pool_t(a)); } @@ -1854,6 +1868,15 @@ ostream& operator<<(ostream& out, const pg_pool_t& p) if (p.fast_read) out << " fast_read " << p.fast_read; out << p.opts; + if (!p.application_metadata.empty()) { + out << " application "; + for (auto it = p.application_metadata.begin(); + it != p.application_metadata.end(); ++it) { + if (it != p.application_metadata.begin()) + out << ","; + out << it->first; + } + } return out; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 2507e64b86c..1f4a032f826 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1348,6 +1348,9 @@ public: pool_opts_t opts; ///< options + /// application -> key/value metadata + map> application_metadata; + private: vector grade_table; -- 2.39.5