]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: remove failed osds from pulling map
authorSage Weil <sage@newdream.net>
Mon, 11 Aug 2008 20:26:52 +0000 (13:26 -0700)
committerSage Weil <sage@newdream.net>
Mon, 11 Aug 2008 20:26:52 +0000 (13:26 -0700)
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index a704bcdb0929d9da7209f327b03c64f928f8ebd6..0447f58d0dc59e85c8018461201d5476e238318f 100644 (file)
@@ -1413,7 +1413,8 @@ void ReplicatedPG::pull(pobject_t poid)
   
   // take note
   assert(pulling.count(poid.oid) == 0);
-  pulling[poid.oid] = v;
+  pulling[poid.oid].first = v;
+  pulling[poid.oid].second = fromosd;
 }
 
 
@@ -1639,6 +1640,18 @@ void ReplicatedPG::on_osd_failure(int o)
        repop->waitfor_commit.count(o))
       repop_ack(repop, -1, true, o);
   }
+  
+  // remove from pushing map
+  {
+    map<object_t, pair<eversion_t,int> >::iterator p = pulling.begin();
+    while (p != pulling.end())
+      if (p->second.second == o) {
+       dout(10) << " forgetting pull of " << p->first << " " << p->second.first
+                << " from osd" << o << dendl;
+       pulling.erase(p++);
+      } else
+       p++;
+  }
 }
 
 void ReplicatedPG::on_acker_change()
index f8fe241360dc006a599907014ac3b3cbcdb650e1..289257704eac43aece478f70025ce32386071687 100644 (file)
@@ -86,7 +86,7 @@ protected:
                  int fromosd, eversion_t pg_complete_thru=eversion_t(0,0));
   
   // push/pull
-  map<object_t, eversion_t> pulling;  // which objects are currently being pulled
+  map<object_t, pair<eversion_t, int> > pulling;  // which objects are currently being pulled, and from where
   map<object_t, set<int> > pushing;