From: Samuel Just Date: Thu, 26 Jan 2017 23:05:14 +0000 (-0800) Subject: osd/: add PG_STATE_SNAPTRIM[_WAIT] to expose snap trim state to user X-Git-Tag: v11.2.1~21^2~9 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=95306559db139ad3cda3ee2eac36195582ff9329;p=ceph.git osd/: add PG_STATE_SNAPTRIM[_WAIT] to expose snap trim state to user Signed-off-by: Samuel Just (cherry picked from commit c2eac34c86517e410eb4842d8b8085da7d8d7973) --- diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index b9ae9e649302..7ae0e9be2c7b 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -13302,9 +13302,11 @@ PrimaryLogPG::AwaitAsyncWork::AwaitAsyncWork(my_context ctx) : my_base(ctx), NamedState(context< SnapTrimmer >().pg->cct, "Trimming/AwaitAsyncWork") { + auto *pg = context< SnapTrimmer >().pg; context< SnapTrimmer >().log_enter(state_name); - context< SnapTrimmer >().pg->osd->queue_for_snap_trim( - context< SnapTrimmer >().pg); + context< SnapTrimmer >().pg->osd->queue_for_snap_trim(pg); + pg->state_set(PG_STATE_SNAPTRIM); + pg->publish_stats_to_osd(); } boost::statechart::result PrimaryLogPG::AwaitAsyncWork::react(const DoSnapWork&) diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index fad46e3d6718..b55907edf6be 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1476,6 +1476,8 @@ private: context< SnapTrimmer >().log_exit(state_name, enter_time); auto *pg = context< SnapTrimmer >().pg; pg->osd->snap_reserver.cancel_reservation(pg->get_pgid()); + pg->state_clear(PG_STATE_SNAPTRIM); + pg->publish_stats_to_osd(); } boost::statechart::result react(const KickTrim&) { return discard_event(); @@ -1575,6 +1577,8 @@ private: pg->get_pgid(), pending, 0); + pg->state_set(PG_STATE_SNAPTRIM_WAIT); + pg->publish_stats_to_osd(); } boost::statechart::result react(const SnapTrimReserved&); void exit() { @@ -1582,6 +1586,9 @@ private: if (pending) pending->cancel(); pending = nullptr; + auto *pg = context< SnapTrimmer >().pg; + pg->state_clear(PG_STATE_SNAPTRIM_WAIT); + pg->publish_stats_to_osd(); } boost::statechart::result react(const KickTrim&) { return discard_event(); diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 410af4457ebb..9884ce0c6baf 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -822,6 +822,10 @@ std::string pg_state_string(int state) oss << "incomplete+"; if (state & PG_STATE_PEERED) oss << "peered+"; + if (state & PG_STATE_SNAPTRIM) + oss << "snaptrim+"; + if (state & PG_STATE_SNAPTRIM_WAIT) + oss << "snaptrim_wait+"; string ret(oss.str()); if (ret.length() > 0) ret.resize(ret.length() - 1); @@ -875,6 +879,10 @@ int pg_string_state(const std::string& state) type = PG_STATE_ACTIVATING; else if (state == "peered") type = PG_STATE_PEERED; + else if (state == "snaptrim") + type = PG_STATE_SNAPTRIM; + else if (state == "snaptrim_wait") + type = PG_STATE_SNAPTRIM_WAIT; else type = -1; return type; diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index f8aeb083fc1b..0c8fc32ae44d 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -943,6 +943,8 @@ inline ostream& operator<<(ostream& out, const osd_stat_t& s) { #define PG_STATE_UNDERSIZED (1<<23) // pg acting < pool size #define PG_STATE_ACTIVATING (1<<24) // pg is peered but not yet active #define PG_STATE_PEERED (1<<25) // peered, cannot go active, can recover +#define PG_STATE_SNAPTRIM (1<<26) // trimming snaps +#define PG_STATE_SNAPTRIM_WAIT (1<<27) // queued to trim snaps std::string pg_state_string(int state); std::string pg_vector_string(const vector &a);