]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG::agent_load_hit_sets: take ondisk_read_lock
authorSamuel Just <sam.just@inktank.com>
Sat, 19 Apr 2014 01:11:55 +0000 (18:11 -0700)
committerSamuel Just <sam.just@inktank.com>
Mon, 21 Apr 2014 17:53:04 +0000 (10:53 -0700)
Otherwise, the hit_set might be not yet written due to a recently
completed recovery.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/ReplicatedPG.cc

index e62649e92372128b218e954e61fd1f0f4c1423b7..9e65d22ae23d1842b259082a06c38443ed803a34 100644 (file)
@@ -10903,9 +10903,19 @@ void ReplicatedPG::agent_load_hit_sets()
          break;
        }
 
+       ObjectContextRef obc = get_object_context(oid, false);
+       if (!obc) {
+         derr << __func__ << ": could not load hitset " << oid << dendl;
+         break;
+       }
+
        bufferlist bl;
-       int r = osd->store->read(coll, oid, 0, 0, bl);
-       assert(r >= 0);
+       {
+         obc->ondisk_read_lock();
+         int r = osd->store->read(coll, oid, 0, 0, bl);
+         assert(r >= 0);
+         obc->ondisk_read_unlock();
+       }
        HitSetRef hs(new HitSet);
        bufferlist::iterator pbl = bl.begin();
        ::decode(*hs, pbl);