]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: read_superblock cleanup. purge_strays() is generic
authorSage Weil <sage@newdream.net>
Sat, 17 May 2008 04:23:33 +0000 (21:23 -0700)
committerSage Weil <sage@newdream.net>
Sat, 17 May 2008 04:23:33 +0000 (21:23 -0700)
src/osd/OSD.cc
src/osd/PG.cc
src/osd/PG.h
src/osd/RAID4PG.cc
src/osd/RAID4PG.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index c640a57b62a31f94ed2d1cb7c391bf0726a8d751..c375994fdb66d2f36dc39f315e753a296e9f7b56 100644 (file)
@@ -321,7 +321,11 @@ int OSD::init()
     dout(2) << "boot" << dendl;
     
     // read superblock
-    read_superblock();
+    if (read_superblock() < 0) {
+      store->umount();
+      delete store;
+      return -1;
+    }
     
     // load up pgs (as they previously existed)
     load_pgs();
@@ -451,14 +455,19 @@ int OSD::read_superblock()
   bufferlist bl;
   int r = store->read(OSD_SUPERBLOCK_POBJECT, 0, sizeof(superblock), bl);
   if (bl.length() != sizeof(superblock)) {
-    dout(10) << "read_superblock failed, r = " << r << ", i got " << bl.length() << " bytes, not " << sizeof(superblock) << dendl;
+    derr(0) << "read_superblock failed, r = " << r 
+           << ", i got " << bl.length() << " bytes, not " << sizeof(superblock) << dendl;
     return -1;
   }
 
   bl.copy(0, sizeof(superblock), (char*)&superblock);
 
   dout(10) << "read_superblock " << superblock << dendl;
-  assert(whoami == superblock.whoami);  // fixme!
+  if (whoami != superblock.whoami) {
+    derr(0) << "read_superblock superblock says osd" << superblock.whoami
+           << ", but i (think i) am osd" << whoami << dendl;
+    return -1;
+  }
   
   // load up "current" osdmap
   assert(!osdmap);
@@ -2187,18 +2196,18 @@ void OSD::handle_pg_notify(MOSDPGNotify *m)
     dout(10) << *pg << " osd" << from << " " << *it << dendl;
     pg->info.history.merge(it->history);
 
+    // save info.
+    bool had = pg->peer_info.count(from);
+    pg->peer_info[from] = *it;
+
     // stray?
     bool acting = pg->is_acting(from);
-    if (!acting && (*it).last_update > eversion_t()) {     // FIXME is this right?
+    if (!acting) {
       dout(10) << *pg << " osd" << from << " has stray content: " << *it << dendl;
       pg->stray_set.insert(from);
       pg->state_clear(PG_STATE_CLEAN);
     }
 
-    // save info.
-    bool had = pg->peer_info.count(from);
-    pg->peer_info[from] = *it;
-
     if (had) {
       if (pg->is_active() && 
           (*it).is_uptodate() && 
index 2868d36108d91830345a8b32d32ccad2d3e5cf80..3c09eeba0760663582e8672a78e57780771e3b9c 100644 (file)
@@ -1060,6 +1060,27 @@ void PG::finish_recovery()
 }
 
 
+void PG::purge_strays()
+{
+  dout(10) << "purge_strays " << stray_set << dendl;
+  
+  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));
+
+    peer_info.erase(*p);
+  }
+
+  stray_set.clear();
+}
+
+
+
 
 void PG::update_stats()
 {
index 1ec55077b045d2e6ab600a5e7b2051d7f468dcc0..f20ef80ceae0e326b47ca5c69272d11b1be52952 100644 (file)
@@ -598,7 +598,8 @@ public:
 
   virtual void cancel_recovery() = 0;
   virtual bool do_recovery() = 0;
-  virtual void purge_strays() = 0;
+
+  void purge_strays();
 
   void finish_recovery();
 
index 84a9f2c2e41817e7771e053cf25eba694b07b1ff..2f2415ec8220828869e1b8b2b96dd52b77d4016e 100644 (file)
@@ -158,10 +158,5 @@ bool RAID4PG::do_recovery()
   return false;
 }
 
-void RAID4PG::purge_strays() 
-{
-  //assert(0);
-}
-
 
 
index 010371a25fd921f0cfd07993d7799ab307124be2..112ab10d12075b625ca80ec017f2d940140a29e1 100644 (file)
@@ -44,7 +44,6 @@ protected:
   void clean_up_local(ObjectStore::Transaction& t);
   void cancel_recovery();
   bool do_recovery();
-  void purge_strays();
 
   
 public:
index 4c78cf75f82125d06fd97dd70ea4cfa1e45f1402..90ed258f386ccfa36c16193158afff641102f76b 100644 (file)
@@ -1784,23 +1784,6 @@ void ReplicatedPG::do_peer_recovery()
   }
 }
 
-void ReplicatedPG::purge_strays()
-{
-  dout(10) << "purge_strays " << stray_set << dendl;
-  
-  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));
-  }
-
-  stray_set.clear();
-}
-
 
 
 /** clean_up_local
index afec8ad5099c45c2d25821d68044a37e8f7d0a15..848f3715f941c07d2bb6cbf10dfd242e86292aab 100644 (file)
@@ -117,8 +117,6 @@ protected:
   bool do_recovery();
   void do_peer_recovery();
 
-  void purge_strays();
-
 
   void op_read(MOSDOp *op);
   void op_modify(MOSDOp *op);