]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/: clean up remaining info mutators
authorSamuel Just <sjust@redhat.com>
Fri, 12 Apr 2019 18:08:53 +0000 (11:08 -0700)
committersjust@redhat.com <sjust@redhat.com>
Wed, 1 May 2019 18:22:28 +0000 (11:22 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/osd/PG.cc
src/osd/PG.h
src/osd/PeeringState.cc
src/osd/PeeringState.h
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h
src/osd/osd_types.h

index 5960d1bb5c95e4e2cc64e488056274d333558b3c..95997e46fb4a76432a58ba03e27cf8b8284a2a8c 100644 (file)
@@ -186,7 +186,7 @@ PG::PG(OSDService *o, OSDMapRef curmap,
     this,
     this),
   pg_whoami(recovery_state.pg_whoami),
-  info(recovery_state.info),
+  info(recovery_state.get_info()),
   pg_id(p),
   coll(p),
   osd(o),
index bbee7b13de7f7823afa6e448d8f9e6e68a16dd0d..8995ca38fd1e7b5c8054c3e07809ad5e8a673ee4 100644 (file)
@@ -183,7 +183,7 @@ protected:
    * Peering state information being moved to PeeringState
    */
   pg_shard_t pg_whoami;
-  pg_info_t &info;
+  const pg_info_t &info;
 
 public:
   // -- members --
@@ -844,20 +844,28 @@ public:
   void add_num_bytes(int64_t num_bytes) {
     ceph_assert(_lock.is_locked_by_me());
     if (num_bytes) {
-      info.stats.stats.sum.num_bytes += num_bytes;
-      if (info.stats.stats.sum.num_bytes < 0) {
-        info.stats.stats.sum.num_bytes = 0;
-      }
+      recovery_state.update_stats(
+       [num_bytes](auto &history, auto &stats) {
+         stats.stats.sum.num_bytes += num_bytes;
+         if (stats.stats.sum.num_bytes < 0) {
+           stats.stats.sum.num_bytes = 0;
+         }
+         return false;
+       });
     }
   }
   void sub_num_bytes(int64_t num_bytes) {
     ceph_assert(_lock.is_locked_by_me());
     ceph_assert(num_bytes >= 0);
     if (num_bytes) {
-      info.stats.stats.sum.num_bytes -= num_bytes;
-      if (info.stats.stats.sum.num_bytes < 0) {
-        info.stats.stats.sum.num_bytes = 0;
-      }
+      recovery_state.update_stats(
+       [num_bytes](auto &history, auto &stats) {
+         stats.stats.sum.num_bytes -= num_bytes;
+         if (stats.stats.sum.num_bytes < 0) {
+           stats.stats.sum.num_bytes = 0;
+         }
+         return false;
+       });
     }
   }
 
index 628532561856539dfcced05c6792fb7212b8deea..27f91bfce2fcf44f87dadad3df0c7deb5c23f603 100644 (file)
@@ -3958,6 +3958,11 @@ void PeeringState::prepare_backfill_for_missing(
   }
 }
 
+void PeeringState::update_hset(const pg_hit_set_history_t &hset_history)
+{
+  info.hit_set = hset_history;
+}
+
 /*------------ Peering State Machine----------------*/
 #undef dout_prefix
 #define dout_prefix (context< PeeringMachine >().dpp->gen_prefix(*_dout) \
index 5fdb7a6d3891eacaea1dded0bd977ebbff32f7a4..01ecaf17b7aa490c1bb18f801715a549d047a295 100644 (file)
@@ -1508,6 +1508,8 @@ public:
     std::function<bool(pg_history_t &, pg_stat_t &)> f,
     ObjectStore::Transaction *t = nullptr);
 
+  void update_hset(const pg_hit_set_history_t &hset_history);
+
   std::optional<pg_stat_t> prepare_stats_for_publish(
     bool pg_stats_publish_valid,
     const pg_stat_t &pg_stats_publish,
@@ -1563,7 +1565,9 @@ public:
     const hobject_t soid);
 
   void object_recovered(
-    const hobject_t &hoid) {
+    const hobject_t &hoid,
+    const object_stat_sum_t &stat_diff) {
+    info.stats.stats.sum.add(stat_diff);
     missing_loc.recovered(hoid);
   }
 
@@ -1618,6 +1622,10 @@ public:
 
   void recovery_committed_to(eversion_t version);
 
+  void local_recovery_complete() {
+    info.last_complete = info.last_update;
+  }
+
   void set_last_requested(version_t v) {
     pg_log.set_last_requested(v);
   }
index d988c69ef808a40aa118886f90a86a81071bca67..3d6dfb9e6e3f96bff6c640ee382e32c50562d063 100644 (file)
@@ -445,8 +445,7 @@ void PrimaryLogPG::on_global_recover(
   const object_stat_sum_t &stat_diff,
   bool is_delete)
 {
-  info.stats.stats.sum.add(stat_diff);
-  recovery_state.object_recovered(soid);
+  recovery_state.object_recovered(soid, stat_diff);
   publish_stats_to_osd();
   dout(10) << "pushed " << soid << " to all replicas" << dendl;
   map<hobject_t, ObjectContextRef>::iterator i = recovering.find(soid);
@@ -3702,7 +3701,12 @@ void PrimaryLogPG::promote_object(ObjectContextRef obc,
 
   if (op)
     wait_for_blocked_object(obc->obs.oi.soid, op);
-  info.stats.stats.sum.num_promote++;
+
+  recovery_state.update_stats(
+    [](auto &history, auto &stats) {
+      stats.stats.sum.num_promote++;
+      return false;
+    });
 }
 
 void PrimaryLogPG::execute_ctx(OpContext *ctx)
@@ -9931,8 +9935,13 @@ int PrimaryLogPG::start_flush(
   fop->objecter_tid = tid;
 
   flush_ops[soid] = fop;
-  info.stats.stats.sum.num_flush++;
-  info.stats.stats.sum.num_flush_kb += shift_round_up(oi.size, 10);
+
+  recovery_state.update_stats(
+    [&oi](auto &history, auto &stats) {
+      stats.stats.sum.num_flush++;
+      stats.stats.sum.num_flush_kb += shift_round_up(oi.size, 10);
+      return false;
+    });
   return -EINPROGRESS;
 }
 
@@ -11652,7 +11661,11 @@ void PrimaryLogPG::mark_all_unfound_lost(
     }
   }
 
-  info.stats.stats_invalid = true;
+  recovery_state.update_stats(
+    [](auto &history, auto &stats) {
+      stats.stats_invalid = true;
+      return false;
+    });
 
   submit_log_entries(
     log_entries,
@@ -11664,7 +11677,7 @@ void PrimaryLogPG::mark_all_unfound_lost(
            // clear old locations - merge_new_log_entries will have
            // handled rebuilding missing_loc for each of these
            // objects if we have the RECOVERY_DELETES flag
-           recovery_state.object_recovered(oid);
+           recovery_state.object_recovered(oid, object_stat_sum_t());
          }
        }
 
@@ -12137,8 +12150,8 @@ bool PrimaryLogPG::start_recovery_ops(
 
   uint64_t num_unfound = get_num_unfound();
 
-  if (!missing.have_missing()) {
-    info.last_complete = info.last_update;
+  if (!recovery_state.have_missing()) {
+    recovery_state.local_recovery_complete();
   }
 
   if (!missing.have_missing() || // Primary does not have missing
@@ -13307,7 +13320,7 @@ void PrimaryLogPG::hit_set_setup()
 void PrimaryLogPG::hit_set_remove_all()
 {
   // If any archives are degraded we skip this
-  for (list<pg_hit_set_info_t>::iterator p = info.hit_set.history.begin();
+  for (auto p = info.hit_set.history.begin();
        p != info.hit_set.history.end();
        ++p) {
     hobject_t aoid = get_hit_set_archive_object(p->begin, p->end, p->using_gmt);
@@ -13320,7 +13333,7 @@ void PrimaryLogPG::hit_set_remove_all()
   }
 
   if (!info.hit_set.history.empty()) {
-    list<pg_hit_set_info_t>::reverse_iterator p = info.hit_set.history.rbegin();
+    auto p = info.hit_set.history.rbegin();
     ceph_assert(p != info.hit_set.history.rend());
     hobject_t oid = get_hit_set_archive_object(p->begin, p->end, p->using_gmt);
     ceph_assert(!is_degraded_or_backfilling_object(oid));
@@ -13336,7 +13349,7 @@ void PrimaryLogPG::hit_set_remove_all()
     simple_opc_submit(std::move(ctx));
   }
 
-  info.hit_set = pg_hit_set_history_t();
+  recovery_state.update_hset(pg_hit_set_history_t());
   if (agent_state) {
     agent_state->discard_hit_sets();
   }
@@ -13427,7 +13440,7 @@ void PrimaryLogPG::hit_set_persist()
 
   // If any archives are degraded we skip this persist request
   // account for the additional entry being added below
-  for (list<pg_hit_set_info_t>::iterator p = info.hit_set.history.begin();
+  for (auto p = info.hit_set.history.begin();
        p != info.hit_set.history.end();
        ++p) {
     hobject_t aoid = get_hit_set_archive_object(p->begin, p->end, p->using_gmt);
@@ -13810,7 +13823,7 @@ void PrimaryLogPG::agent_load_hit_sets()
 
   if (agent_state->hit_set_map.size() < info.hit_set.history.size()) {
     dout(10) << __func__ << dendl;
-    for (list<pg_hit_set_info_t>::iterator p = info.hit_set.history.begin();
+    for (auto p = info.hit_set.history.begin();
         p != info.hit_set.history.end(); ++p) {
       if (agent_state->hit_set_map.count(p->begin.sec()) == 0) {
        dout(10) << __func__ << " loading " << p->begin << "-"
@@ -14210,18 +14223,22 @@ bool PrimaryLogPG::agent_choose_mode(bool restart, OpRequestRef op)
            << " -> "
            << TierAgentState::get_flush_mode_name(flush_mode)
            << dendl;
-    if (flush_mode == TierAgentState::FLUSH_MODE_HIGH) {
-      osd->agent_inc_high_count();
-      info.stats.stats.sum.num_flush_mode_high = 1;
-    } else if (flush_mode == TierAgentState::FLUSH_MODE_LOW) {
-      info.stats.stats.sum.num_flush_mode_low = 1;
-    }
-    if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_HIGH) {
-      osd->agent_dec_high_count();
-      info.stats.stats.sum.num_flush_mode_high = 0;
-    } else if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_LOW) {
-      info.stats.stats.sum.num_flush_mode_low = 0;
-    }
+    recovery_state.update_stats(
+      [=](auto &history, auto &stats) {
+       if (flush_mode == TierAgentState::FLUSH_MODE_HIGH) {
+         osd->agent_inc_high_count();
+         stats.stats.sum.num_flush_mode_high = 1;
+       } else if (flush_mode == TierAgentState::FLUSH_MODE_LOW) {
+         stats.stats.sum.num_flush_mode_low = 1;
+       }
+       if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_HIGH) {
+         osd->agent_dec_high_count();
+         stats.stats.sum.num_flush_mode_high = 0;
+       } else if (agent_state->flush_mode == TierAgentState::FLUSH_MODE_LOW) {
+         stats.stats.sum.num_flush_mode_low = 0;
+       }
+       return false;
+      });
     agent_state->flush_mode = flush_mode;
   }
   if (evict_mode != agent_state->evict_mode) {
@@ -14241,16 +14258,20 @@ bool PrimaryLogPG::agent_choose_mode(bool restart, OpRequestRef op)
       objects_blocked_on_cache_full.clear();
       requeued = true;
     }
-    if (evict_mode == TierAgentState::EVICT_MODE_SOME) {
-      info.stats.stats.sum.num_evict_mode_some = 1;
-    } else if (evict_mode == TierAgentState::EVICT_MODE_FULL) {
-      info.stats.stats.sum.num_evict_mode_full = 1;
-    }
-    if (agent_state->evict_mode == TierAgentState::EVICT_MODE_SOME) {
-      info.stats.stats.sum.num_evict_mode_some = 0;
-    } else if (agent_state->evict_mode == TierAgentState::EVICT_MODE_FULL) {
-      info.stats.stats.sum.num_evict_mode_full = 0;
-    }
+    recovery_state.update_stats(
+      [=](auto &history, auto &stats) {
+       if (evict_mode == TierAgentState::EVICT_MODE_SOME) {
+         stats.stats.sum.num_evict_mode_some = 1;
+       } else if (evict_mode == TierAgentState::EVICT_MODE_FULL) {
+         stats.stats.sum.num_evict_mode_full = 1;
+       }
+       if (agent_state->evict_mode == TierAgentState::EVICT_MODE_SOME) {
+         stats.stats.sum.num_evict_mode_some = 0;
+       } else if (agent_state->evict_mode == TierAgentState::EVICT_MODE_FULL) {
+         stats.stats.sum.num_evict_mode_full = 0;
+       }
+       return false;
+      });
     agent_state->evict_mode = evict_mode;
   }
   uint64_t old_effort = agent_state->evict_effort;
@@ -14804,8 +14825,12 @@ void PrimaryLogPG::_scrub_finish()
   const char *mode = (repair ? "repair": (deep_scrub ? "deep-scrub" : "scrub"));
 
   if (info.stats.stats_invalid) {
-    info.stats.stats = scrub_cstat;
-    info.stats.stats_invalid = false;
+    recovery_state.update_stats(
+      [=](auto &history, auto &stats) {
+       stats.stats = scrub_cstat;
+       stats.stats_invalid = false;
+       return false;
+      });
 
     if (agent_state)
       agent_choose_mode();
@@ -14855,13 +14880,17 @@ void PrimaryLogPG::_scrub_finish()
 
     if (repair) {
       ++scrubber.fixed;
-      info.stats.stats = scrub_cstat;
-      info.stats.dirty_stats_invalid = false;
-      info.stats.omap_stats_invalid = false;
-      info.stats.hitset_stats_invalid = false;
-      info.stats.hitset_bytes_stats_invalid = false;
-      info.stats.pin_stats_invalid = false;
-      info.stats.manifest_stats_invalid = false;
+      recovery_state.update_stats(
+       [this](auto &history, auto &stats) {
+         stats.stats = scrub_cstat;
+         stats.dirty_stats_invalid = false;
+         stats.omap_stats_invalid = false;
+         stats.hitset_stats_invalid = false;
+         stats.hitset_bytes_stats_invalid = false;
+         stats.pin_stats_invalid = false;
+         stats.manifest_stats_invalid = false;
+         return false;
+       });
       publish_stats_to_osd();
       recovery_state.share_pg_info();
     }
index d9d5765fd4bcf703520c7ddc110ef389b05565b0..f445df1f0ec81ebd7624a8d2af5adbdf57b63727 100644 (file)
@@ -451,7 +451,7 @@ public:
     ObjectStore::Transaction &t,
     bool async = false) override {
     if (hset_history) {
-      info.hit_set = *hset_history;
+      recovery_state.update_hset(*hset_history);
     }
     if (transaction_applied) {
       update_snap_map(logv, t);
@@ -492,7 +492,11 @@ public:
 
   void update_stats(
     const pg_stat_t &stat) override {
-    info.stats = stat;
+    recovery_state.update_stats(
+      [&stat](auto &history, auto &stats) {
+       stats = stat;
+       return false;
+      });
   }
 
   void schedule_recovery_work(
index 6dc86267e4ac03f4b20d48acf5eb59822f9e4dd5..f856e63101ed0f07bd3f3bad2b69b333a59d7909 100644 (file)
@@ -439,12 +439,12 @@ struct pg_t {
    */
   unsigned get_split_bits(unsigned pg_num) const;
 
-  bool contains(int bits, const ghobject_t& oid) {
+  bool contains(int bits, const ghobject_t& oid) const {
     return
       (int64_t)m_pool == oid.hobj.get_logical_pool() &&
       oid.match(bits, ps());
   }
-  bool contains(int bits, const hobject_t& oid) {
+  bool contains(int bits, const hobject_t& oid) const {
     return
       (int64_t)m_pool == oid.get_logical_pool() &&
       oid.match(bits, ps());