]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: don't send messages to down osds; enforce in OSDMap::get_inst()
authorSage Weil <sage@newdream.net>
Wed, 21 May 2008 20:00:44 +0000 (13:00 -0700)
committerSage Weil <sage@newdream.net>
Wed, 21 May 2008 20:00:44 +0000 (13:00 -0700)
src/osd/OSDMap.h
src/osd/PG.cc

index f28f5ac392bb73664e73526667d1d7645e9b9b99..19bd485e2aa2ff833782b6177073f8619affb27e 100644 (file)
@@ -303,7 +303,7 @@ private:
     return osd_addr[osd];
   }
   entity_inst_t get_inst(int osd) {
-    assert(exists(osd));
+    assert(exists(osd) && is_up(osd));
     return entity_inst_t(entity_name_t::OSD(osd),
                         osd_addr[osd]);
   }
index 622a0955481fe6ad165d7527ed8489e83764c4dc..e6090bb9c9afbfd07c75e2af719defa8bafef8ab 100644 (file)
@@ -696,9 +696,13 @@ void PG::peer(ObjectStore::Transaction& t,
       continue;
     }
     
-    dout(10) << " querying info from osd" << *it << dendl;
-    query_map[*it][info.pgid] = Query(Query::INFO, info.history);
-    peer_info_requested.insert(*it);
+    if (osd->osdmap->is_up(*it)) {
+      dout(10) << " querying info from osd" << *it << dendl;
+      query_map[*it][info.pgid] = Query(Query::INFO, info.history);
+      peer_info_requested.insert(*it);
+    } else {
+      dout(10) << " not querying down osd" << *it << dendl;
+    }
   }
   if (missing_info) return;
 
@@ -1074,12 +1078,15 @@ void PG::purge_strays()
   for (set<int>::iterator p = stray_set.begin();
        p != stray_set.end();
        p++) {
-    dout(10) << "sending PGRemove to osd" << *p << dendl;
-    set<pg_t> ls;
-    ls.insert(info.pgid);
-    MOSDPGRemove *m = new MOSDPGRemove(osd->osdmap->get_epoch(), ls);
-    osd->messenger->send_message(m, osd->osdmap->get_inst(*p));
-
+    if (osd->osdmap->is_up(*p)) {
+      dout(10) << "sending PGRemove to osd" << *p << dendl;
+      set<pg_t> ls;
+      ls.insert(info.pgid);
+      MOSDPGRemove *m = new MOSDPGRemove(osd->osdmap->get_epoch(), ls);
+      osd->messenger->send_message(m, osd->osdmap->get_inst(*p));
+    } else {
+      dout(10) << "not sending PGRemote to down osd" << *p << dendl;
+    }
     peer_info.erase(*p);
   }