]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix GetInfo querying
authorSage Weil <sage.weil@dreamhost.com>
Thu, 5 May 2011 15:12:24 +0000 (08:12 -0700)
committerSage Weil <sage.weil@dreamhost.com>
Thu, 5 May 2011 15:12:24 +0000 (08:12 -0700)
Don't query for info we already have, or have already requested.  Remove
unneeded helper so that this is simpler and we have access to the info
we need.

Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
src/osd/PG.cc
src/osd/PG.h

index 4037b1db6f51e2589547de3fecab45c2ef71d0a9..febe42f94e9856d3cfaaa11942b2da59ddd97460 100644 (file)
@@ -4176,23 +4176,26 @@ PG::RecoveryState::GetInfo::GetInfo(my_context ctx) : my_base(ctx) {
       dout(10) << "transitioning to pending, need upthru" << dendl;
       post_event(NeedNewMap());
     } else {
-      stringstream out;
-      map< int, map< pg_t, Query > > query_map;
-      prior_set->gen_query_map(*pg->osd->osdmap,
-                              pg->info,
-                              query_map);
-      for (map< int, map< pg_t, Query> >::iterator i = query_map.begin();
-          i != query_map.end();
-          ++i) {
-       for (map< pg_t, Query >::iterator j = i->second.begin();
-            j != i->second.end();
-            ++j) {
-         context< RecoveryMachine >().send_query(i->first, j->second);
-         peer_info_requested.insert(i->first);
+      for (set<int>::const_iterator it = prior_set->cur.begin();
+          it != prior_set->cur.end();
+          ++it) {
+       int peer = *it;
+       if (pg->peer_info.count(peer)) {
+         dout(10) << " have osd" << peer << " info " << pg->peer_info[peer] << dendl;
+       } else if (peer_info_requested.count(peer)) {
+         dout(10) << " already requested info from osd" << peer << dendl;
+       } else if (!pg->osd->osdmap->is_up(peer)) {
+         dout(10) << " not querying info from down osd" << peer << dendl;
+       } else {
+         dout(10) << " querying info from osd" << peer << dendl;
+         context< RecoveryMachine >().send_query(peer, Query(Query::INFO, pg->info.history));
+         peer_info_requested.insert(peer);
        }
       }
     }
   }
+
+#warning is this right?
   if (peer_info_requested.empty()) {
     post_event(GotInfo());
   }
@@ -4667,19 +4670,3 @@ PG::PgPriorSet::PgPriorSet(int whoami,
 
 }
 
-void PG::PgPriorSet::gen_query_map(const OSDMap &osdmap,
-                                  const PG::Info &info,
-                                  map< int, map<pg_t,Query> >& query_map)
-{
-  for (set<int>::const_iterator it = cur.begin();
-       it != cur.end();
-       ++it) {
-    // -- query info from everyone in prior_set.
-    if (osdmap.is_up(*it)) {
-      dout(10) << " querying info from osd" << *it << dendl;
-      query_map[*it][info.pgid] = Query(Query::INFO, info.history);
-    } else {
-      dout(10) << " not querying info from down osd" << *it << dendl;
-    }
-  }
-}
index 82ef708de56290104b76bfbe36dcd0d12c35a114..c322ad42f770f1b817124dc94dcf432bd2056c9a 100644 (file)
@@ -827,10 +827,6 @@ public:
               const vector<int> &acting,
               const Info &info,
               const PG *pg);
-
-    void gen_query_map(const OSDMap &osdmap,
-                      const Info &info,
-                      map< int, map<pg_t,Query> >& query_map);
   };
 
   friend std::ostream& operator<<(std::ostream& oss,