]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: PG::Info -> pg_info_t
authorSage Weil <sage.weil@dreamhost.com>
Wed, 1 Feb 2012 20:53:24 +0000 (12:53 -0800)
committerSage Weil <sage.weil@dreamhost.com>
Wed, 1 Feb 2012 20:53:24 +0000 (12:53 -0800)
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/messages/MOSDPGInfo.h
src/messages/MOSDPGLog.h
src/messages/MOSDPGMissing.h
src/messages/MOSDPGNotify.h
src/osd/OSD.cc
src/osd/OSD.h
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc
src/osd/osd_types.cc
src/osd/osd_types.h

index 21796f4b8cb566aa93b499184bf7a5a5028cb82a..7e8fb57274b35fdaa07fc06efcb9e69ceaaffe8a 100644 (file)
@@ -23,7 +23,7 @@ class MOSDPGInfo : public Message {
   epoch_t epoch;
 
 public:
-  vector<PG::Info> pg_info;
+  vector<pg_info_t> pg_info;
 
   epoch_t get_epoch() { return epoch; }
 
index 774e1357ae9d27e9f628e1215a178099532cb76b..832e053f8b6e9ea0f55c186c56f2f79d0e510a0a 100644 (file)
@@ -27,7 +27,7 @@ class MOSDPGLog : public Message {
   epoch_t query_epoch;
 
 public:
-  PG::Info info;
+  pg_info_t info;
   PG::Log log;
   PG::Missing missing;
 
@@ -36,10 +36,10 @@ public:
   epoch_t get_query_epoch() { return query_epoch; }
 
   MOSDPGLog() {}
-  MOSDPGLog(version_t mv, PG::Info& i) :
+  MOSDPGLog(version_t mv, pg_info_t& i) :
     Message(MSG_OSD_PG_LOG),
     epoch(mv), query_epoch(mv), info(i)  { }
-  MOSDPGLog(version_t mv, PG::Info& i, epoch_t query_epoch) :
+  MOSDPGLog(version_t mv, pg_info_t& i, epoch_t query_epoch) :
     Message(MSG_OSD_PG_LOG),
     epoch(mv), query_epoch(query_epoch), info(i)  { }
 private:
index 17b6bdb8f82b6de921ba03ab25fe21b38d49467a..55debebf30fb5834345eb652585e40b7bff9bede 100644 (file)
@@ -22,13 +22,13 @@ class MOSDPGMissing : public Message {
   epoch_t epoch;
 
 public:
-  PG::Info info;
+  pg_info_t info;
   PG::Missing missing;
 
   epoch_t get_epoch() { return epoch; }
 
   MOSDPGMissing() {}
-  MOSDPGMissing(version_t mv, const PG::Info &info_,
+  MOSDPGMissing(version_t mv, const pg_info_t &info_,
                const PG::Missing &missing_)
     : Message(MSG_OSD_PG_MISSING), epoch(mv), info(info_),
       missing(missing_) { }
index 3ea09b97adbb3ba316ce0f2ac00a8a131db50408..9c022d2443b871798bbf487b37af840cff088b77 100644 (file)
@@ -30,15 +30,15 @@ class MOSDPGNotify : public Message {
   /// query. This allows the recipient to disregard responses to old
   /// queries.
   epoch_t query_epoch;
-  vector<PG::Info> pg_list;   // pgid -> version
+  vector<pg_info_t> pg_list;   // pgid -> version
 
  public:
   version_t get_epoch() { return epoch; }
-  vector<PG::Info>& get_pg_list() { return pg_list; }
+  vector<pg_info_t>& get_pg_list() { return pg_list; }
   epoch_t get_query_epoch() { return query_epoch; }
 
   MOSDPGNotify() {}
-  MOSDPGNotify(epoch_t e, vector<PG::Info>& l, epoch_t query_epoch) :
+  MOSDPGNotify(epoch_t e, vector<pg_info_t>& l, epoch_t query_epoch) :
     Message(MSG_OSD_PG_NOTIFY), epoch(e),
     query_epoch(query_epoch) {
     pg_list.swap(l);
@@ -65,7 +65,7 @@ public:
   }
   void print(ostream& out) const {
     out << "pg_notify(";
-    for (vector<PG::Info>::const_iterator i = pg_list.begin();
+    for (vector<pg_info_t>::const_iterator i = pg_list.begin();
          i != pg_list.end();
          ++i) {
       if (i != pg_list.begin())
index d40ddb2dfda4841385aba3ee9a88a08e214327ce..316e7ca5c13f1619250f47f12028aa0b07ed7ff8 100644 (file)
@@ -1206,7 +1206,7 @@ void OSD::load_pgs()
  * look up a pg.  if we have it, great.  if not, consider creating it IF the pg mapping
  * hasn't changed since the given epoch and we are the primary.
  */
-PG *OSD::get_or_create_pg(const PG::Info& info, epoch_t epoch, int from, int& created,
+PG *OSD::get_or_create_pg(const pg_info_t& info, epoch_t epoch, int from, int& created,
                          bool primary,
                          ObjectStore::Transaction **pt,
                          C_Contexts **pfin)
@@ -1464,7 +1464,7 @@ void OSD::update_heartbeat_peers()
        _add_heartbeat_source(pg->acting[i], old_from, old_from_stamp, old_con);
       for (unsigned i=0; i<pg->up.size(); i++)
        _add_heartbeat_source(pg->up[i], old_from, old_from_stamp, old_con);
-      for (map<int,PG::Info>::iterator p = pg->peer_info.begin(); p != pg->peer_info.end(); ++p)
+      for (map<int,pg_info_t>::iterator p = pg->peer_info.begin(); p != pg->peer_info.end(); ++p)
        if (osdmap->is_up(p->first))
          _add_heartbeat_source(p->first, old_from, old_from_stamp, old_con);
     }
@@ -3599,7 +3599,7 @@ void OSD::activate_map(ObjectStore::Transaction& t, list<Context*>& tfin)
 
   dout(7) << "activate_map version " << osdmap->get_epoch() << dendl;
 
-  map< int, vector<PG::Info> >  notify_list;  // primary -> list
+  map< int, vector<pg_info_t> >  notify_list;  // primary -> list
   map< int, map<pg_t,PG::Query> > query_map;    // peer -> PG -> get_summary_since
   map<int,MOSDPGInfo*> info_map;  // peer -> message
 
@@ -4272,10 +4272,10 @@ void OSD::handle_pg_create(MOSDPGCreate *m)
  * content for, and they are primary for.
  */
 
-void OSD::do_notifies(map< int, vector<PG::Info> >& notify_list,
+void OSD::do_notifies(map< int, vector<pg_info_t> >& notify_list,
                      epoch_t query_epoch)
 {
-  for (map< int, vector<PG::Info> >::iterator it = notify_list.begin();
+  for (map< int, vector<pg_info_t> >::iterator it = notify_list.begin();
        it != notify_list.end();
        it++) {
     if (it->first == whoami) {
@@ -4316,7 +4316,7 @@ void OSD::do_infos(map<int,MOSDPGInfo*>& info_map)
   for (map<int,MOSDPGInfo*>::iterator p = info_map.begin();
        p != info_map.end();
        ++p) { 
-    for (vector<PG::Info>::iterator i = p->second->pg_info.begin();
+    for (vector<pg_info_t>::iterator i = p->second->pg_info.begin();
         i != p->second->pg_info.end();
         ++i) {
       dout(20) << "Sending info " << *i << " to osd." << p->first << dendl;
@@ -4329,7 +4329,7 @@ void OSD::do_infos(map<int,MOSDPGInfo*>& info_map)
 
 /** PGNotify
  * from non-primary to primary
- * includes PG::Info.
+ * includes pg_info_t.
  * NOTE: called with opqueue active.
  */
 void OSD::handle_pg_notify(MOSDPGNotify *m)
@@ -4347,7 +4347,7 @@ void OSD::handle_pg_notify(MOSDPGNotify *m)
   map<int, MOSDPGInfo*> info_map;
   int created = 0;
 
-  for (vector<PG::Info>::iterator it = m->get_pg_list().begin();
+  for (vector<pg_info_t>::iterator it = m->get_pg_list().begin();
        it != m->get_pg_list().end();
        it++) {
     PG *pg = 0;
@@ -4442,7 +4442,7 @@ void OSD::handle_pg_info(MOSDPGInfo *m)
 
   int created = 0;
 
-  for (vector<PG::Info>::iterator p = m->pg_info.begin();
+  for (vector<pg_info_t>::iterator p = m->pg_info.begin();
        p != m->pg_info.end();
        ++p) {
     ObjectStore::Transaction *t = 0;
@@ -4641,7 +4641,7 @@ void OSD::handle_pg_query(MOSDPGQuery *m)
   
   if (!require_same_or_newer_map(m, m->get_epoch())) return;
 
-  map< int, vector<PG::Info> > notify_list;
+  map< int, vector<pg_info_t> > notify_list;
   
   for (map<pg_t,PG::Query>::iterator it = m->pg_list.begin();
        it != m->pg_list.end();
@@ -4667,7 +4667,7 @@ void OSD::handle_pg_query(MOSDPGQuery *m)
 
       assert(role != 0);
       dout(10) << " pg " << pgid << " dne" << dendl;
-      PG::Info empty(pgid);
+      pg_info_t empty(pgid);
       if (it->second.type == PG::Query::LOG ||
          it->second.type == PG::Query::FULLLOG) {
        MOSDPGLog *mlog = new MOSDPGLog(osdmap->get_epoch(), empty,
index 1fad6389ce8971a9846ab66fa1a1bb96924cdc51..5b301831b892e69ff5adf720bcde1da020d12e23 100644 (file)
@@ -436,7 +436,7 @@ protected:
 
   PG *lookup_lock_raw_pg(pg_t pgid);
 
-  PG *get_or_create_pg(const PG::Info& info, epoch_t epoch, int from, int& pcreated, bool primary,
+  PG *get_or_create_pg(const pg_info_t& info, epoch_t epoch, int from, int& pcreated, bool primary,
                       ObjectStore::Transaction **pt,
                       C_Contexts **pfin);
   
@@ -579,7 +579,7 @@ protected:
 
 
   // -- generic pg peering --
-  void do_notifies(map< int, vector<PG::Info> >& notify_list,
+  void do_notifies(map< int, vector<pg_info_t> >& notify_list,
                   epoch_t query_epoch);
   void do_queries(map< int, map<pg_t,PG::Query> >& query_map);
   void do_infos(map<int, MOSDPGInfo*>& info_map);
index 221681a5cf6d4103a24a401976340af4ac881e49..d39171c356b25dff3362a09b003f59f4052c4084 100644 (file)
@@ -70,46 +70,6 @@ std::string PG::gen_prefix() const
 }
   
 
-/******* PG::Info *******/
-
-void PG::Info::dump(Formatter *f) const
-{
-  f->dump_stream("pgid") << pgid;
-  f->dump_stream("last_update") << last_update;
-  f->dump_stream("last_complete") << last_complete;
-  f->dump_stream("log_tail") << log_tail;
-  f->dump_stream("last_backfill") << last_backfill;
-  f->dump_stream("purged_snaps") << purged_snaps;
-  f->open_object_section("history");
-  history.dump(f);
-  f->close_section();
-  f->open_object_section("stats");
-  stats.dump(f);
-  f->close_section();
-
-  f->dump_int("empty", is_empty());
-  f->dump_int("dne", dne());
-  f->dump_int("incomplete", is_incomplete());
-}
-
-void PG::Info::generate_test_instances(list<PG::Info*>& o)
-{
-  o.push_back(new Info);
-  o.push_back(new Info);
-  list<pg_history_t*> h;
-  pg_history_t::generate_test_instances(h);
-  o.back()->history = *h.back();
-  o.back()->pgid = pg_t(1, 2, -1);
-  o.back()->last_update = eversion_t(3, 4);
-  o.back()->last_complete = eversion_t(5, 6);
-  o.back()->log_tail = eversion_t(7, 8);
-  o.back()->last_backfill = hobject_t(object_t("objname"), "key", 123, 456);
-  list<pg_stat_t*> s;
-  pg_stat_t::generate_test_instances(s);
-  o.back()->stats = *s.back();
-}
-
-
 /******* PG::Log ********/
 
 void PG::Log::copy_after(const Log &other, eversion_t v) 
@@ -189,7 +149,7 @@ void PG::IndexedLog::trim(ObjectStore::Transaction& t, eversion_t s)
 
 /********* PG **********/
 
-void PG::proc_master_log(ObjectStore::Transaction& t, Info &oinfo, Log &olog, Missing& omissing, int from)
+void PG::proc_master_log(ObjectStore::Transaction& t, pg_info_t &oinfo, Log &olog, Missing& omissing, int from)
 {
   dout(10) << "proc_master_log for osd." << from << ": " << olog << " " << omissing << dendl;
   assert(!is_active() && is_primary());
@@ -208,7 +168,7 @@ void PG::proc_master_log(ObjectStore::Transaction& t, Info &oinfo, Log &olog, Mi
 }
     
 void PG::proc_replica_log(ObjectStore::Transaction& t,
-                         Info &oinfo, Log &olog, Missing& omissing, int from)
+                         pg_info_t &oinfo, Log &olog, Missing& omissing, int from)
 {
   dout(10) << "proc_replica_log for osd." << from << ": "
           << oinfo << " " << olog << " " << omissing << dendl;
@@ -313,9 +273,9 @@ void PG::proc_replica_log(ObjectStore::Transaction& t,
   peer_missing[from].swap(omissing);
 }
 
-bool PG::proc_replica_info(int from, Info &oinfo)
+bool PG::proc_replica_info(int from, pg_info_t &oinfo)
 {
-  map<int,PG::Info>::iterator p = peer_info.find(from);
+  map<int,pg_info_t>::iterator p = peer_info.find(from);
   if (p != peer_info.end() && p->second.last_update == oinfo.last_update) {
     dout(10) << " got dup osd." << from << " info " << oinfo << ", identical to ours" << dendl;
     return false;
@@ -403,7 +363,7 @@ bool PG::merge_old_entry(ObjectStore::Transaction& t, Log::Entry& oe)
 }
 
 void PG::merge_log(ObjectStore::Transaction& t,
-                  Info &oinfo, Log &olog, int fromosd)
+                  pg_info_t &oinfo, Log &olog, int fromosd)
 {
   dout(10) << "merge_log " << olog << " from osd." << fromosd
            << " into " << log << dendl;
@@ -539,7 +499,7 @@ void PG::merge_log(ObjectStore::Transaction& t,
  * TODO: if the missing set becomes very large, this could get expensive.
  * Instead, we probably want to just iterate over our unfound set.
  */
-bool PG::search_for_missing(const Info &oinfo, const Missing *omissing,
+bool PG::search_for_missing(const pg_info_t &oinfo, const Missing *omissing,
                            int fromosd)
 {
   bool stats_updated = false;
@@ -721,7 +681,7 @@ bool PG::is_all_uptodate() const
       dout(10) << __func__ << ": osd." << peer << " has " << pm->second.num_missing() << " missing" << dendl;
       uptodate = false;
     }
-    map<int,Info>::const_iterator pi = peer_info.find(peer);
+    map<int,pg_info_t>::const_iterator pi = peer_info.find(peer);
     if (pi->second.last_backfill != hobject_t::get_max()) {
       dout(10) << __func__ << ": osd." << peer << " has last_backfill " << pi->second.last_backfill << dendl;
       uptodate = false;
@@ -877,7 +837,7 @@ void PG::build_prior(std::auto_ptr<PriorSet> &prior_set)
 {
   if (1) {
     // sanity check
-    for (map<int,Info>::iterator it = peer_info.begin();
+    for (map<int,pg_info_t>::iterator it = peer_info.begin();
         it != peer_info.end();
         it++) {
       assert(info.history.last_epoch_started >= it->second.history.last_epoch_started);
@@ -948,13 +908,13 @@ void PG::clear_primary_state()
  *  2) Prefer longer tail if it brings another info into contiguity
  *  3) Prefer current primary
  */
-map<int, PG::Info>::const_iterator PG::find_best_info(const map<int, Info> &infos) const
+map<int, pg_info_t>::const_iterator PG::find_best_info(const map<int, pg_info_t> &infos) const
 {
-  map<int, Info>::const_iterator best = infos.end();
+  map<int, pg_info_t>::const_iterator best = infos.end();
   // find osd with newest last_update.  if there are multiples, prefer
   //  - a longer tail, if it brings another peer into log contiguity
   //  - the current primary
-  for (map<int, Info>::const_iterator p = infos.begin();
+  for (map<int, pg_info_t>::const_iterator p = infos.begin();
        p != infos.end();
        ++p) {
     // Disquality anyone who is incomplete (not fully backfilled)
@@ -972,7 +932,7 @@ map<int, PG::Info>::const_iterator PG::find_best_info(const map<int, Info> &info
       continue;
     }
     // Prefer longer tail if it brings another peer into contiguity
-    for (map<int, Info>::const_iterator q = infos.begin();
+    for (map<int, pg_info_t>::const_iterator q = infos.begin();
         q != infos.end();
         ++q) {
       if (q->second.is_incomplete())
@@ -1009,14 +969,14 @@ map<int, PG::Info>::const_iterator PG::find_best_info(const map<int, Info> &info
  */
 bool PG::calc_acting(int& newest_update_osd_id, vector<int>& want) const
 {
-  map<int, Info> all_info(peer_info.begin(), peer_info.end());
+  map<int, pg_info_t> all_info(peer_info.begin(), peer_info.end());
   all_info[osd->whoami] = info;
 
-  for (map<int,Info>::iterator p = all_info.begin(); p != all_info.end(); ++p) {
+  for (map<int,pg_info_t>::iterator p = all_info.begin(); p != all_info.end(); ++p) {
     dout(10) << "calc_acting osd." << p->first << " " << p->second << dendl;
   }
 
-  map<int, Info>::const_iterator newest_update_osd = find_best_info(all_info);
+  map<int, pg_info_t>::const_iterator newest_update_osd = find_best_info(all_info);
 
   if (newest_update_osd == all_info.end()) {
     if (up != acting) {
@@ -1035,7 +995,7 @@ bool PG::calc_acting(int& newest_update_osd_id, vector<int>& want) const
   newest_update_osd_id = newest_update_osd->first;
   
   // select primary
-  map<int,Info>::const_iterator primary;
+  map<int,pg_info_t>::const_iterator primary;
   if (up.size() &&
       !all_info[up[0]].is_incomplete() &&
       all_info[up[0]].last_update >= newest_update_osd->second.log_tail) {
@@ -1046,8 +1006,8 @@ bool PG::calc_acting(int& newest_update_osd_id, vector<int>& want) const
             << " selected as primary instead" << dendl;
     primary = newest_update_osd;
   } else {
-    map<int, Info> complete_infos;
-    for (map<int, Info>::iterator i = all_info.begin();
+    map<int, pg_info_t> complete_infos;
+    for (map<int, pg_info_t>::iterator i = all_info.begin();
         i != all_info.end();
         ++i) {
       if (!i->second.is_incomplete())
@@ -1079,7 +1039,7 @@ bool PG::calc_acting(int& newest_update_osd_id, vector<int>& want) const
        ++i) {
     if (*i == primary->first)
       continue;
-    const Info &cur_info = all_info.find(*i)->second;
+    const pg_info_t &cur_info = all_info.find(*i)->second;
     if (cur_info.is_incomplete() || cur_info.last_update < primary->second.log_tail) {
       if (backfill < 1) {
        dout(10) << " osd." << *i << " (up) accepted (backfill) " << cur_info << dendl;
@@ -1095,7 +1055,7 @@ bool PG::calc_acting(int& newest_update_osd_id, vector<int>& want) const
     }
   }
 
-  for (map<int,Info>::const_iterator i = all_info.begin();
+  for (map<int,pg_info_t>::const_iterator i = all_info.begin();
        i != all_info.end();
        ++i) {
     if (usable >= get_osdmap()->get_pg_size(info.pgid))
@@ -1191,7 +1151,7 @@ void PG::build_might_have_unfound()
   }
 
   // include any (stray) peers
-  for (map<int,Info>::iterator p = peer_info.begin();
+  for (map<int,pg_info_t>::iterator p = peer_info.begin();
        p != peer_info.end();
        p++)
     might_have_unfound.insert(p->first);
@@ -1314,7 +1274,7 @@ void PG::activate(ObjectStore::Transaction& t, list<Context*>& tfin,
     for (unsigned i=1; i<acting.size(); i++) {
       int peer = acting[i];
       assert(peer_info.count(peer));
-      PG::Info& pi = peer_info[peer];
+      pg_info_t& pi = peer_info[peer];
 
       dout(10) << "activate peer osd." << peer << " " << pi << dendl;
 
@@ -1464,7 +1424,7 @@ void PG::_activate_committed(epoch_t e)
     epoch_t cur_epoch = get_osdmap()->get_epoch();
     entity_inst_t primary = get_osdmap()->get_cluster_inst(acting[0]);
     MOSDPGInfo *m = new MOSDPGInfo(cur_epoch);
-    PG::Info i = info;
+    pg_info_t i = info;
     i.history.last_epoch_started = e;
     m->pg_info.push_back(i);
     osd->cluster_messenger->send_message(m, primary);
@@ -3116,7 +3076,7 @@ void PG::share_pg_info()
 {
   dout(10) << "share_pg_info" << dendl;
 
-  // share new PG::Info with replicas
+  // share new pg_info_t with replicas
   for (unsigned i=1; i<acting.size(); i++) {
     int peer = acting[i];
     MOSDPGInfo *m = new MOSDPGInfo(get_osdmap()->get_epoch());
@@ -3141,7 +3101,7 @@ void PG::share_pg_log()
   while (++a != end) {
     int peer(*a);
     PG::Missing& pmissing(peer_missing[peer]);
-    PG::Info& pinfo(peer_info[peer]);
+    pg_info_t& pinfo(peer_info[peer]);
 
     MOSDPGLog *m = new MOSDPGLog(info.last_update.epoch, info);
     m->log.copy_after(log, pinfo.last_update);
@@ -3158,7 +3118,7 @@ void PG::share_pg_log()
 }
 
 void PG::fulfill_info(int from, const Query &query, 
-                     pair<int, Info> &notify_info)
+                     pair<int, pg_info_t> &notify_info)
 {
   assert(!acting.empty());
   assert(from == acting[0]);
@@ -3467,7 +3427,7 @@ void PG::start_peering_interval(const OSDMapRef lastmap,
   }
 }
 
-void PG::proc_primary_info(ObjectStore::Transaction &t, const Info &oinfo)
+void PG::proc_primary_info(ObjectStore::Transaction &t, const pg_info_t &oinfo)
 {
   assert(!is_primary());
   assert(is_stray() || is_active());
@@ -3860,7 +3820,7 @@ boost::statechart::result PG::RecoveryState::Primary::react(const AdvMap& advmap
   OSDMapRef osdmap = advmap.osdmap;
 
   // Remove any downed osds from peer_info
-  map<int,PG::Info>::iterator p = pg->peer_info.begin();
+  map<int,pg_info_t>::iterator p = pg->peer_info.begin();
   while (p != pg->peer_info.end()) {
     if (!osdmap->is_up(p->first)) {
       dout(10) << " dropping down osd." << p->first << " info " << p->second << dendl;
@@ -4191,7 +4151,7 @@ boost::statechart::result PG::RecoveryState::Stray::react(const MQuery& query)
 {
   PG *pg = context< RecoveryMachine >().pg;
   if (query.query.type == Query::INFO) {
-    pair<int, Info> notify_info;
+    pair<int, pg_info_t> notify_info;
     pg->fulfill_info(query.from, query.query, notify_info);
     context< RecoveryMachine >().send_notify(notify_info.first, notify_info.second);
   } else {
@@ -4316,7 +4276,7 @@ boost::statechart::result PG::RecoveryState::GetInfo::react(const MNotifyRec& in
              if (!osdmap->exists(o) || osdmap->get_info(o).lost_at > interval.first)
                continue;  // dne or lost
              if (osdmap->is_up(o)) {
-               PG::Info *pinfo;
+               pg_info_t *pinfo;
                if (o == pg->osd->whoami) {
                  pinfo = &pg->info;
                } else {
@@ -4370,7 +4330,7 @@ PG::RecoveryState::GetLog::GetLog(my_context ctx) :
     return;
   }
 
-  const Info& best = pg->peer_info[newest_update_osd];
+  const pg_info_t& best = pg->peer_info[newest_update_osd];
 
   // am i broken?
   if (pg->info.last_update < best.log_tail) {
@@ -4382,7 +4342,7 @@ PG::RecoveryState::GetLog::GetLog(my_context ctx) :
   // how much log to request?
   eversion_t request_log_from = pg->info.last_update;
   for (vector<int>::iterator p = pg->acting.begin() + 1; p != pg->acting.end(); ++p) {
-    Info& ri = pg->peer_info[*p];
+    pg_info_t& ri = pg->peer_info[*p];
     if (ri.last_update >= best.log_tail && ri.last_update < request_log_from)
       request_log_from = ri.last_update;
   }
@@ -4495,7 +4455,7 @@ PG::RecoveryState::GetMissing::GetMissing(my_context ctx)
   for (vector<int>::iterator i = pg->acting.begin() + 1;
        i != pg->acting.end();
        ++i) {
-    const Info& pi = pg->peer_info[*i];
+    const pg_info_t& pi = pg->peer_info[*i];
 
     if (pi.is_empty())
       continue;                                // no pg data, nothing divergent
@@ -4635,7 +4595,7 @@ void PG::RecoveryState::RecoveryMachine::log_exit(const char *state_name, utime_
 #undef dout_prefix
 #define dout_prefix *_dout << machine.pg->gen_prefix() 
 
-void PG::RecoveryState::handle_notify(int from, PG::Info& i,
+void PG::RecoveryState::handle_notify(int from, pg_info_t& i,
                                      RecoveryCtx *rctx)
 {
   dout(10) << "handle_notify " << i << " from osd." << from << dendl;
@@ -4644,7 +4604,7 @@ void PG::RecoveryState::handle_notify(int from, PG::Info& i,
   end_handle();
 }
 
-void PG::RecoveryState::handle_info(int from, PG::Info& i,
+void PG::RecoveryState::handle_info(int from, pg_info_t& i,
                                    RecoveryCtx *rctx)
 {
   dout(10) << "handle_info " << i << " from osd." << from << dendl;
@@ -4723,7 +4683,7 @@ PG::PriorSet::PriorSet(const OSDMap &osdmap,
                       const map<epoch_t, Interval> &past_intervals,
                       const vector<int> &up,
                       const vector<int> &acting,
-                      const PG::Info &info,
+                      const pg_info_t &info,
                       const PG *debug_pg)
   : pg_down(false)
 {
index 12db39687dd42e7a351c55a54a4815f83a33db76..9d519c7ced29ff1945ee3f578dd8e9f5ae4e5f65 100644 (file)
@@ -159,91 +159,7 @@ public:
 
   std::string gen_prefix() const;
 
-  /*
-   * PG::Info - summary of PG statistics.
-   *
-   * some notes: 
-   *  - last_complete implies we have all objects that existed as of that
-   *    stamp, OR a newer object, OR have already applied a later delete.
-   *  - if last_complete >= log.bottom, then we know pg contents thru log.head.
-   *    otherwise, we have no idea what the pg is supposed to contain.
-   */
-  struct Info {
-    pg_t pgid;
-    eversion_t last_update;    // last object version applied to store.
-    eversion_t last_complete;  // last version pg was complete through.
-
-    eversion_t log_tail;     // oldest log entry.
-
-    hobject_t last_backfill;   // objects >= this and < last_complete may be missing
-
-    interval_set<snapid_t> purged_snaps;
-
-    pg_stat_t stats;
-
-    pg_history_t history;
-
-    Info()
-      : last_backfill(hobject_t::get_max())
-    { }
-    Info(pg_t p)
-      : pgid(p),
-       last_backfill(hobject_t::get_max())
-    { }
-
-    bool is_empty() const { return last_update.version == 0; }
-    bool dne() const { return history.epoch_created == 0; }
-
-    bool is_incomplete() const { return last_backfill != hobject_t::get_max(); }
 
-    void encode(bufferlist &bl) const {
-      __u8 v = 25;
-      ::encode(v, bl);
-
-      ::encode(pgid, bl);
-      ::encode(last_update, bl);
-      ::encode(last_complete, bl);
-      ::encode(log_tail, bl);
-      ::encode(last_backfill, bl);
-      ::encode(stats, bl);
-      history.encode(bl);
-      ::encode(purged_snaps, bl);
-    }
-    void decode(bufferlist::iterator &bl) {
-      __u8 v;
-      ::decode(v, bl);
-
-      if (v < 23) {
-       old_pg_t opgid;
-       ::decode(opgid, bl);
-       pgid = opgid;
-      } else {
-       ::decode(pgid, bl);
-      }
-      ::decode(last_update, bl);
-      ::decode(last_complete, bl);
-      ::decode(log_tail, bl);
-      if (v < 25) {
-       bool log_backlog;
-       ::decode(log_backlog, bl);
-      }
-      if (v >= 24)
-       ::decode(last_backfill, bl);
-      ::decode(stats, bl);
-      history.decode(bl);
-      if (v >= 22)
-       ::decode(purged_snaps, bl);
-      else {
-       set<snapid_t> snap_trimq;
-       ::decode(snap_trimq, bl);
-      }
-    }
-    void dump(Formatter *f) const;
-    static void generate_test_instances(list<Info*>& o);
-  };
-  WRITE_CLASS_ENCODER(Info)
-
-  
   /** 
    * Query - used to ask a peer for information about a pg.
    *
@@ -843,7 +759,7 @@ public:
   WRITE_CLASS_ENCODER(Interval)
 
   // pg state
-  Info        info;
+  pg_info_t        info;
   const coll_t coll;
   IndexedLog  log;
   hobject_t    log_oid;
@@ -898,7 +814,7 @@ public:
             const map<epoch_t, Interval> &past_intervals,
             const vector<int> &up,
             const vector<int> &acting,
-            const Info &info,
+            const pg_info_t &info,
             const PG *debug_pg=NULL);
 
     bool affected_by_map(const OSDMapRef osdmap, const PG *debug_pg=0) const;
@@ -915,14 +831,14 @@ public:
     utime_t start_time;
     map< int, map<pg_t, Query> > *query_map;
     map< int, MOSDPGInfo* > *info_map;
-    map< int, vector<Info> > *notify_list;
+    map< int, vector<pg_info_t> > *notify_list;
     list< Context* > *context_list;
     ObjectStore::Transaction *transaction;
     RecoveryCtx() : query_map(0), info_map(0), notify_list(0),
                    context_list(0), transaction(0) {}
     RecoveryCtx(map< int, map<pg_t, Query> > *query_map,
                map< int, MOSDPGInfo* > *info_map,
-               map< int, vector<Info> > *notify_list,
+               map< int, vector<pg_info_t> > *notify_list,
                list< Context* > *context_list,
                ObjectStore::Transaction *transaction)
       : query_map(query_map), info_map(info_map), 
@@ -959,8 +875,8 @@ public:
 
     struct MInfoRec : boost::statechart::event< MInfoRec > {
       int from;
-      Info &info;
-      MInfoRec(int from, Info &info) :
+      pg_info_t &info;
+      MInfoRec(int from, pg_info_t &info) :
        from(from), info(info) {}
     };
 
@@ -973,8 +889,8 @@ public:
 
     struct MNotifyRec : boost::statechart::event< MNotifyRec > {
       int from;
-      Info &info;
-      MNotifyRec(int from, Info &info) :
+      pg_info_t &info;
+      MNotifyRec(int from, pg_info_t &info) :
        from(from), info(info) {}
     };
 
@@ -1063,7 +979,7 @@ public:
        return state->rctx->context_list;
       }
 
-      void send_notify(int to, const Info &info) {
+      void send_notify(int to, const pg_info_t &info) {
        assert(state->rctx->notify_list);
        (*state->rctx->notify_list)[to].push_back(info);
       }
@@ -1340,8 +1256,8 @@ public:
       machine.initiate();
     }
 
-    void handle_notify(int from, Info& i, RecoveryCtx *ctx);
-    void handle_info(int from, Info& i, RecoveryCtx *ctx);
+    void handle_notify(int from, pg_info_t& i, RecoveryCtx *ctx);
+    void handle_info(int from, pg_info_t& i, RecoveryCtx *ctx);
     void handle_log(int from,
                    MOSDPGLog *msg,
                    RecoveryCtx *ctx);
@@ -1367,7 +1283,7 @@ protected:
   bool        need_up_thru;
   set<int>    stray_set;   // non-acting osds that have PG data.
   eversion_t  oldest_update; // acting: lowest (valid) last_update in active set
-  map<int,Info>        peer_info;   // info from peers (stray or prior)
+  map<int,pg_info_t>        peer_info;   // info from peers (stray or prior)
   map<int, Missing>    peer_missing;
   set<int>             peer_log_requested;  // logs i've requested (and start stamps)
   set<int>             peer_missing_requested;
@@ -1517,14 +1433,14 @@ public:
 
   virtual void calc_trim_to() = 0;
 
-  void proc_replica_log(ObjectStore::Transaction& t, Info &oinfo, Log &olog,
+  void proc_replica_log(ObjectStore::Transaction& t, pg_info_t &oinfo, Log &olog,
                        Missing& omissing, int from);
-  void proc_master_log(ObjectStore::Transaction& t, Info &oinfo, Log &olog,
+  void proc_master_log(ObjectStore::Transaction& t, pg_info_t &oinfo, Log &olog,
                       Missing& omissing, int from);
-  bool proc_replica_info(int from, Info &info);
+  bool proc_replica_info(int from, pg_info_t &info);
   bool merge_old_entry(ObjectStore::Transaction& t, Log::Entry& oe);
-  void merge_log(ObjectStore::Transaction& t, Info &oinfo, Log &olog, int from);
-  bool search_for_missing(const Info &oinfo, const Missing *omissing,
+  void merge_log(ObjectStore::Transaction& t, pg_info_t &oinfo, Log &olog, int from);
+  bool search_for_missing(const pg_info_t &oinfo, const Missing *omissing,
                          int fromosd);
 
   void check_for_lost_objects();
@@ -1534,7 +1450,7 @@ public:
   
   void trim_write_ahead();
 
-  map<int, Info>::const_iterator find_best_info(const map<int, Info> &infos) const;
+  map<int, pg_info_t>::const_iterator find_best_info(const map<int, pg_info_t> &infos) const;
   bool calc_acting(int& newest_update_osd, vector<int>& want) const;
   bool choose_acting(int& newest_update_osd);
   void build_might_have_unfound();
@@ -1545,7 +1461,7 @@ public:
   void _activate_committed(epoch_t e);
   void all_activated_and_committed();
 
-  void proc_primary_info(ObjectStore::Transaction &t, const Info &info);
+  void proc_primary_info(ObjectStore::Transaction &t, const pg_info_t &info);
 
   bool have_unfound() const { 
     return missing.num_missing() > missing_loc.size();
@@ -1724,16 +1640,16 @@ public:
   void set_last_peering_reset();
 
   void fulfill_info(int from, const Query &query, 
-                   pair<int, Info> &notify_info);
+                   pair<int, pg_info_t> &notify_info);
   void fulfill_log(int from, const Query &query, epoch_t query_epoch);
   bool acting_up_affected(const vector<int>& newup, const vector<int>& newacting);
   bool old_peering_msg(epoch_t reply_epoch, epoch_t query_epoch);
 
   // recovery bits
-  void handle_notify(int from, PG::Info& i, RecoveryCtx *rctx) {
+  void handle_notify(int from, pg_info_t& i, RecoveryCtx *rctx) {
     recovery_state.handle_notify(from, i, rctx);
   }
-  void handle_info(int from, PG::Info& i, RecoveryCtx *rctx) {
+  void handle_info(int from, pg_info_t& i, RecoveryCtx *rctx) {
     recovery_state.handle_info(from, i, rctx);
   }
   void handle_log(int from,
@@ -1793,7 +1709,6 @@ public:
                                    utime_t expire) = 0;
 };
 
-WRITE_CLASS_ENCODER(PG::Info)
 WRITE_CLASS_ENCODER(PG::Query)
 WRITE_CLASS_ENCODER(PG::Missing::item)
 WRITE_CLASS_ENCODER(PG::Missing)
@@ -1802,28 +1717,6 @@ WRITE_CLASS_ENCODER(PG::Log)
 WRITE_CLASS_ENCODER(PG::Interval)
 WRITE_CLASS_ENCODER(PG::OndiskLog)
 
-inline ostream& operator<<(ostream& out, const PG::Info& pgi) 
-{
-  out << pgi.pgid << "(";
-  if (pgi.dne())
-    out << " DNE";
-  if (pgi.is_empty())
-    out << " empty";
-  else {
-    out << " v " << pgi.last_update;
-    if (pgi.last_complete != pgi.last_update)
-      out << " lc " << pgi.last_complete;
-    out << " (" << pgi.log_tail << "," << pgi.last_update << "]";
-    if (pgi.is_incomplete())
-      out << " lb " << pgi.last_backfill;
-  }
-  //out << " c " << pgi.epoch_created;
-  out << " n=" << pgi.stats.stats.sum.num_objects;
-  out << " " << pgi.history
-      << ")";
-  return out;
-}
-
 inline ostream& operator<<(ostream& out, const PG::Query& q) 
 {
   out << "query(" << q.get_type_name() << " " << q.since;
index d9234651fe633b0ae3d975579994a9cbfd27753c..1a05c40e622962289c578b8b5461c011c0d0e97a 100644 (file)
@@ -580,7 +580,7 @@ void ReplicatedPG::do_op(MOSDOp *op)
   // operation won't apply properly on the backfill_target.  (the
   // opposite is not a problem; if the target is after the line, we
   // don't apply on the backfill_target and it doesn't matter.)
-  Info *backfill_target_info = NULL;
+  pg_info_t *backfill_target_info = NULL;
   bool before_backfill = false;
   if (backfill_target >= 0) {
     backfill_target_info = &peer_info[backfill_target];
@@ -2769,7 +2769,7 @@ int ReplicatedPG::prepare_transaction(OpContext *ctx)
   info.stats.stats.add(ctx->delta_stats, ctx->obc->obs.oi.category);
 
   if (backfill_target >= 0) {
-    Info& pinfo = peer_info[backfill_target];
+    pg_info_t& pinfo = peer_info[backfill_target];
     if (soid < pinfo.last_backfill)
       pinfo.stats.stats.add(ctx->delta_stats, ctx->obc->obs.oi.category);
     else if (soid < backfill_pos)
@@ -3035,7 +3035,7 @@ void ReplicatedPG::issue_repop(RepGather *repop, utime_t now,
 
   for (unsigned i=1; i<acting.size(); i++) {
     int peer = acting[i];
-    Info &pinfo = peer_info[peer];
+    pg_info_t &pinfo = peer_info[peer];
 
     repop->waitfor_ack.insert(peer);
     repop->waitfor_disk.insert(peer);
@@ -5470,7 +5470,7 @@ int ReplicatedPG::recover_backfill(int max)
   dout(10) << "recover_backfill (" << max << ")" << dendl;
   assert(backfill_target >= 0);
 
-  Info& pinfo = peer_info[backfill_target];
+  pg_info_t& pinfo = peer_info[backfill_target];
   BackfillInterval& pbi = peer_backfill_info;
 
   // Initialize from prior backfill state
index 788f97db858d9d47f6a6f7897543027af5e93555..bc68648654500ca9894d4beb965972a6679325af 100644 (file)
@@ -997,6 +997,94 @@ void pg_history_t::generate_test_instances(list<pg_history_t*>& o)
 }
 
 
+// -- pg_info_t --
+
+void pg_info_t::encode(bufferlist &bl) const
+{
+  __u8 v = 25;
+  ::encode(v, bl);
+    
+  ::encode(pgid, bl);
+  ::encode(last_update, bl);
+  ::encode(last_complete, bl);
+  ::encode(log_tail, bl);
+  ::encode(last_backfill, bl);
+  ::encode(stats, bl);
+  history.encode(bl);
+  ::encode(purged_snaps, bl);
+}
+
+void pg_info_t::decode(bufferlist::iterator &bl)
+{
+  __u8 v;
+  ::decode(v, bl);
+
+  if (v < 23) {
+    old_pg_t opgid;
+    ::decode(opgid, bl);
+    pgid = opgid;
+  } else {
+    ::decode(pgid, bl);
+  }
+  ::decode(last_update, bl);
+  ::decode(last_complete, bl);
+  ::decode(log_tail, bl);
+  if (v < 25) {
+    bool log_backlog;
+    ::decode(log_backlog, bl);
+  }
+  if (v >= 24)
+    ::decode(last_backfill, bl);
+  ::decode(stats, bl);
+  history.decode(bl);
+  if (v >= 22)
+    ::decode(purged_snaps, bl);
+  else {
+    set<snapid_t> snap_trimq;
+    ::decode(snap_trimq, bl);
+  }
+}
+
+/******* PG::Info *******/
+
+void pg_info_t::dump(Formatter *f) const
+{
+  f->dump_stream("pgid") << pgid;
+  f->dump_stream("last_update") << last_update;
+  f->dump_stream("last_complete") << last_complete;
+  f->dump_stream("log_tail") << log_tail;
+  f->dump_stream("last_backfill") << last_backfill;
+  f->dump_stream("purged_snaps") << purged_snaps;
+  f->open_object_section("history");
+  history.dump(f);
+  f->close_section();
+  f->open_object_section("stats");
+  stats.dump(f);
+  f->close_section();
+
+  f->dump_int("empty", is_empty());
+  f->dump_int("dne", dne());
+  f->dump_int("incomplete", is_incomplete());
+}
+
+void pg_info_t::generate_test_instances(list<pg_info_t*>& o)
+{
+  o.push_back(new pg_info_t);
+  o.push_back(new pg_info_t);
+  list<pg_history_t*> h;
+  pg_history_t::generate_test_instances(h);
+  o.back()->history = *h.back();
+  o.back()->pgid = pg_t(1, 2, -1);
+  o.back()->last_update = eversion_t(3, 4);
+  o.back()->last_complete = eversion_t(5, 6);
+  o.back()->log_tail = eversion_t(7, 8);
+  o.back()->last_backfill = hobject_t(object_t("objname"), "key", 123, 456);
+  list<pg_stat_t*> s;
+  pg_stat_t::generate_test_instances(s);
+  o.back()->stats = *s.back();
+}
+
+
 // -- OSDSuperblock --
 
 void OSDSuperblock::encode(bufferlist &bl) const
index 43fe6119f9e472f5c1dee4c495ec5e11d1597ce7..0d14ab52da2424f458cb7f09c3cbc0600d1433fb 100644 (file)
@@ -892,6 +892,73 @@ inline ostream& operator<<(ostream& out, const pg_history_t& h) {
 }
 
 
+/**
+ * pg_info_t - summary of PG statistics.
+ *
+ * some notes: 
+ *  - last_complete implies we have all objects that existed as of that
+ *    stamp, OR a newer object, OR have already applied a later delete.
+ *  - if last_complete >= log.bottom, then we know pg contents thru log.head.
+ *    otherwise, we have no idea what the pg is supposed to contain.
+ */
+struct pg_info_t {
+  pg_t pgid;
+  eversion_t last_update;    // last object version applied to store.
+  eversion_t last_complete;  // last version pg was complete through.
+  
+  eversion_t log_tail;     // oldest log entry.
+
+  hobject_t last_backfill;   // objects >= this and < last_complete may be missing
+
+  interval_set<snapid_t> purged_snaps;
+
+  pg_stat_t stats;
+
+  pg_history_t history;
+
+  pg_info_t()
+    : last_backfill(hobject_t::get_max())
+  { }
+  pg_info_t(pg_t p)
+    : pgid(p),
+      last_backfill(hobject_t::get_max())
+  { }
+  
+  bool is_empty() const { return last_update.version == 0; }
+  bool dne() const { return history.epoch_created == 0; }
+
+  bool is_incomplete() const { return last_backfill != hobject_t::get_max(); }
+
+  void encode(bufferlist& bl) const;
+  void decode(bufferlist::iterator& p);
+  void dump(Formatter *f) const;
+  static void generate_test_instances(list<pg_info_t*>& o);
+};
+WRITE_CLASS_ENCODER(pg_info_t)
+
+inline ostream& operator<<(ostream& out, const pg_info_t& pgi) 
+{
+  out << pgi.pgid << "(";
+  if (pgi.dne())
+    out << " DNE";
+  if (pgi.is_empty())
+    out << " empty";
+  else {
+    out << " v " << pgi.last_update;
+    if (pgi.last_complete != pgi.last_update)
+      out << " lc " << pgi.last_complete;
+    out << " (" << pgi.log_tail << "," << pgi.last_update << "]";
+    if (pgi.is_incomplete())
+      out << " lb " << pgi.last_backfill;
+  }
+  //out << " c " << pgi.epoch_created;
+  out << " n=" << pgi.stats.stats.sum.num_objects;
+  out << " " << pgi.history
+      << ")";
+  return out;
+}
+
+
 
 
 struct osd_peer_stat_t {