]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix PG::is_all_uptodate
authorColin Patrick McCabe <cmccabe@alumni.cmu.edu>
Tue, 23 Nov 2010 18:42:32 +0000 (10:42 -0800)
committerSage Weil <sage@newdream.net>
Tue, 23 Nov 2010 21:52:21 +0000 (13:52 -0800)
In PG::is_all_uptodate, don't try to look for peer_missing[osd->whoami].
The primary keeps that in PG::missing!

Signed-off-by: Colin McCabe <colinm@hq.newdream.net>
src/osd/PG.cc

index c3ba4225ccd8a72946cbf3ff8e65b73999194cb9..b8bc432c131edbabb1f1a9e85411f0f581e510ce 100644 (file)
@@ -783,8 +783,17 @@ bool PG::is_all_uptodate() const
   }
 
   size_t ml_sz = missing_loc.size();
+  size_t p_m_sz = missing.num_missing();
+  if (ml_sz != p_m_sz) {
+    dout(10) << __func__ << ": the primary has unfound objects." << dendl;
+    return false;
+  }
+
   vector<int>::const_iterator end = acting.end();
-  for (vector<int>::const_iterator a = acting.begin(); a != end; ++a) {
+  vector<int>::const_iterator a = acting.begin();
+  assert(a != end);
+  ++a;
+  for (; a != end; ++a) {
     int peer = *a;
     map<int, Missing>::const_iterator pm = peer_missing.find(peer);
     if (pm == peer_missing.end()) {