]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #4461 from ceph/wip-11372
authorJosh Durgin <jdurgin@redhat.com>
Thu, 30 Apr 2015 16:21:48 +0000 (09:21 -0700)
committerJosh Durgin <jdurgin@redhat.com>
Thu, 30 Apr 2015 16:21:48 +0000 (09:21 -0700)
librbd: add valgrind memory checks for unit tests

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
1  2 
src/librbd/ObjectMap.cc
src/librbd/RebuildObjectMapRequest.cc
src/pybind/rbd.py
src/test/librados_test_stub/LibradosTestStub.cc
src/test/librbd/test_ImageWatcher.cc
src/test/librbd/test_internal.cc
src/test/librbd/test_librbd.cc

Simple merge
index 2df56fab8162f8ce19703f31a43b800c52bd9dd4,4d9df00fa072a2f369bc1c137fd6a5a9a4c51f88..87cee7e421d434d1b857412480a49b999b714cb9
@@@ -82,54 -72,13 +82,55 @@@ private
        this, NULL, rados_ctx_cb);
  
      librados::ObjectReadOperation op;
 -    op.assert_exists();
 -    int r = m_image_ctx.data_ctx.aio_operate(m_oid, comp, &op, NULL);
 +    op.list_snaps(&m_snap_set, &m_snap_list_ret);
 +
 +    int r = m_io_ctx.aio_operate(m_oid, comp, &op, NULL);
      assert(r == 0);
+     comp->release();
    }
  
 -  bool update_object_map(bool exists) {
 +  uint8_t get_object_state() {
 +    RWLock::RLocker snap_locker(m_image_ctx.snap_lock);
 +    for (std::vector<librados::clone_info_t>::const_iterator r =
 +           m_snap_set.clones.begin(); r != m_snap_set.clones.end(); ++r) {
 +      librados::snap_t from_snap_id;
 +      librados::snap_t to_snap_id;
 +      if (r->cloneid == librados::SNAP_HEAD) {
 +        from_snap_id = next_valid_snap_id(m_snap_set.seq + 1);
 +        to_snap_id = librados::SNAP_HEAD;
 +      } else {
 +        from_snap_id = next_valid_snap_id(r->snaps[0]);
 +        to_snap_id = r->snaps[r->snaps.size()-1];
 +      }
 +
 +      if (to_snap_id < m_snap_id) {
 +        continue;
 +      } else if (m_snap_id < from_snap_id) {
 +        break;
 +      }
 +
 +      RWLock::RLocker snap_locker(m_image_ctx.snap_lock);
 +      if ((m_image_ctx.features & RBD_FEATURE_FAST_DIFF) != 0 &&
 +          from_snap_id != m_snap_id) {
 +        return OBJECT_EXISTS_CLEAN;
 +      }
 +      return OBJECT_EXISTS;
 +    }
 +    return OBJECT_NONEXISTENT;
 +  }
 +
 +  uint64_t next_valid_snap_id(uint64_t snap_id) {
 +    assert(m_image_ctx.snap_lock.is_locked());
 +
 +    std::map<librados::snap_t, SnapInfo>::iterator it =
 +      m_image_ctx.snap_info.lower_bound(snap_id);
 +    if (it == m_image_ctx.snap_info.end()) {
 +      return CEPH_NOSNAP;
 +    }
 +    return it->first;
 +  }
 +
 +  bool update_object_map(uint8_t new_state) {
      CephContext *cct = m_image_ctx.cct;
      bool lost_exclusive_lock = false;
  
@@@ -370,14 -317,17 +371,15 @@@ bool RebuildObjectMapRequest::send_upda
        if (m_image_ctx.image_watcher->is_lock_supported()) {
          m_image_ctx.image_watcher->assert_header_locked(&op);
        }
 -      cls_client::set_flags(&op, m_image_ctx.snap_id, 0,
 -                            RBD_FLAG_OBJECT_MAP_INVALID);
 +      cls_client::set_flags(&op, m_image_ctx.snap_id, 0, flags);
  
-       int r = m_image_ctx.md_ctx.aio_operate(m_image_ctx.header_oid,
-                                              create_callback_completion(), &op);
+       librados::AioCompletion *comp = create_callback_completion();
+       int r = m_image_ctx.md_ctx.aio_operate(m_image_ctx.header_oid, comp, &op);
        assert(r == 0);
+       comp->release();
  
        RWLock::WLocker snap_locker(m_image_ctx.snap_lock);
 -      m_image_ctx.update_flags(m_image_ctx.snap_id, RBD_FLAG_OBJECT_MAP_INVALID,
 -                               false);
 +      m_image_ctx.update_flags(m_image_ctx.snap_id, flags, false);
        return false;
      }
    }
Simple merge
Simple merge
Simple merge
Simple merge