From: David Zafman Date: Thu, 16 Mar 2017 15:05:58 +0000 (-0700) Subject: osd: Add check_osdmap_full() to check for shard OSD fullness X-Git-Tag: v12.0.2~51^2~8 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c7e8dcad3414651e44c6b543e41f05f05c946d51;p=ceph.git osd: Add check_osdmap_full() to check for shard OSD fullness Signed-off-by: David Zafman --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 2bc8cce857e8b..2b2aa97beb0b1 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -921,6 +921,16 @@ void OSDService::update_osd_stat(vector& hb_peers) check_full_status(osd_stat); } +bool OSDService::check_osdmap_full(const set &missing_on) +{ + OSDMapRef osdmap = get_osdmap(); + for (auto shard : missing_on) { + if (osdmap->get_state(shard.osd) & CEPH_OSD_FULL) + return true; + } + return false; +} + void OSDService::send_message_osd_cluster(int peer, Message *m, epoch_t from_epoch) { OSDMapRef next_map = get_nextmap_reserved(); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 591e5d2d2c712..9429640a9b51f 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -1181,6 +1181,7 @@ public: bool is_nearfull() const; bool need_fullness_update(); ///< osdmap state needs update void set_injectfull(s_names type, int64_t count); + bool check_osdmap_full(const set &missing_on); // -- epochs -- diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index ddd0612b1313c..66bb890af0137 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -263,6 +263,8 @@ typedef ceph::shared_ptr OSDMapRef; virtual bool check_failsafe_full(ostream &ss) = 0; + virtual bool check_osdmap_full(const set &missing_on) = 0; + virtual ~Listener() {} }; Listener *parent; diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 9398783d86701..71846caabf80e 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -13031,6 +13031,11 @@ void PrimaryLogPG::_scrub_finish() } } +bool PrimaryLogPG::check_osdmap_full(const set &missing_on) +{ + return osd->check_osdmap_full(missing_on); +} + /*---SnapTrimmer Logging---*/ #undef dout_prefix #define dout_prefix *_dout << pg->gen_prefix() diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index f5b025db0e4fd..a7e812fe8da6f 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1732,6 +1732,7 @@ public: void on_removal(ObjectStore::Transaction *t) override; void on_shutdown() override; bool check_failsafe_full(ostream &ss) override; + bool check_osdmap_full(const set &missing_on) override; // attr cache handling void setattr_maybe_cache(