| 248 | |
| 249 | template <typename I> |
| 250 | void ObjectMapIterateRequest<I>::send_verify_objects() { |
| 251 | ceph_assert(ceph_mutex_is_locked(m_image_ctx.owner_lock)); |
| 252 | CephContext *cct = m_image_ctx.cct; |
| 253 | |
| 254 | uint64_t snap_id; |
| 255 | uint64_t num_objects; |
| 256 | { |
| 257 | std::shared_lock l{m_image_ctx.image_lock}; |
| 258 | snap_id = m_image_ctx.snap_id; |
| 259 | num_objects = Striper::get_num_objects(m_image_ctx.layout, |
| 260 | m_image_ctx.get_image_size(snap_id)); |
| 261 | } |
| 262 | ldout(cct, 5) << this << " send_verify_objects" << dendl; |
| 263 | |
| 264 | m_state = STATE_VERIFY_OBJECTS; |
| 265 | |
| 266 | typename AsyncObjectThrottle<I>::ContextFactory context_factory( |
| 267 | boost::lambda::bind(boost::lambda::new_ptr<C_VerifyObjectCallback<I> >(), |
| 268 | boost::lambda::_1, &m_image_ctx, snap_id, |
| 269 | boost::lambda::_2, m_handle_mismatch, &m_invalidate)); |
| 270 | AsyncObjectThrottle<I> *throttle = new AsyncObjectThrottle<I>( |
| 271 | this, m_image_ctx, context_factory, this->create_callback_context(), |
| 272 | &m_prog_ctx, 0, num_objects); |
| 273 | throttle->start_ops( |
| 274 | m_image_ctx.config.template get_val<uint64_t>("rbd_concurrent_management_ops")); |
| 275 | } |
| 276 | |
| 277 | template <typename I> |
| 278 | uint64_t ObjectMapIterateRequest<I>::get_image_size() const { |
nothing calls this directly
no test coverage detected