]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/: add PG_STATE_SNAPTRIM[_WAIT] to expose snap trim state to user
authorSamuel Just <sjust@redhat.com>
Thu, 26 Jan 2017 23:05:14 +0000 (15:05 -0800)
committerGreg Farnum <gfarnum@redhat.com>
Wed, 26 Apr 2017 18:25:42 +0000 (11:25 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit c2eac34c86517e410eb4842d8b8085da7d8d7973)

src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h
src/osd/osd_types.cc
src/osd/osd_types.h

index b9ae9e6493023e4aa95f843fea1239f84c4ff4c1..7ae0e9be2c7bade9513a0e6848adb5d9e3d2ab00 100644 (file)
@@ -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&)
index fad46e3d6718f22cd403db2e537d56bea77acc01..b55907edf6be43415bca633b4a23c5b0ba63407d 100644 (file)
@@ -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();
index 410af4457ebb56715fbdd8cf022cdf58b1b811a4..9884ce0c6baf37453e6ae18cea4e26a1f66a6fb1 100644 (file)
@@ -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;
index f8aeb083fc1b797cc8e0586eda1236d85e302258..0c8fc32ae44d1941d5d4b75dfbc9bfa7e2e143d0 100644 (file)
@@ -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<int32_t> &a);