RBD AioRequest

RBD librados中AioRequest,以寫爲例。

                |->m_ictx (ImageCtx)
    AioRequest--|-m_oid (string)      
     /_\        |-m_object_no, m_object_off, m_object_len (uint64_t)
      |         |-m_snap_id (librados::snap_t)
      |         |->m_completion (Context*)
      |         |-m_parent_extents (std::vector<std::pair<uint64_t,uint64_t> >)
      |         |-m_hide_enoent (bool)
      |
 AbstractWrite--|-m_state (write_state_d)
   /_\          |-m_write (librados::ObjectWriteOperation)
    |           |-m_snap_seq (uint64_t)
    |           |-m_snaps (std::vector<librados::snap_t>)
    |
 AioWrite--|-m_write_data (bufferlist)
           |-m_op_flags (int)


new AioWrite(ictx, p->oid.name, p->objectno, p->offset,bl, snapc, req_comp)

AioWrite(ImageCtx *ictx, const std::string &oid, uint64_t object_no,     
¦ ¦ ¦ ¦ ¦uint64_t object_off, const ceph::bufferlist &data,              
¦ ¦ ¦ ¦ ¦const ::SnapContext &snapc, Context *completion)                
¦ : AbstractWrite(ictx, oid, object_no, object_off, data.length(), snapc,
            ¦ ¦ ¦ completion, false),                                    
    m_write_data(data), m_op_flags(0) {                                  
}

AbstractWrite::AbstractWrite(ImageCtx *ictx, const std::string &oid,                                                                                                                                            
                             uint64_t object_no, uint64_t object_off,
                             uint64_t len, const ::SnapContext &snapc,
                             Context *completion, bool hide_enoent)
  : AioRequest(ictx, oid, object_no, object_off, len, CEPH_NOSNAP, completion,
               hide_enoent),
    m_state(LIBRBD_AIO_WRITE_FLAT), m_snap_seq(snapc.seq.val)
{
  m_snaps.insert(m_snaps.end(), snapc.snaps.begin(), snapc.snaps.end());
}

AioRequest::AioRequest(ImageCtx *ictx, const std::string &oid,                                                                                                                                                  
                       uint64_t objectno, uint64_t off, uint64_t len,                                                                                                                
                       librados::snap_t snap_id, 
                       Context *completion,
                       bool hide_enoent)
¦ : m_ictx(ictx), m_oid(oid), m_object_no(objectno), m_object_off(off),                                                                                                              
¦ ¦ m_object_len(len), m_snap_id(snap_id), m_completion(completion),                                                                                                                 
¦ ¦ m_hide_enoent(hide_enoent) {                                                                                                                                                     

¦ Striper::extent_to_file(m_ictx->cct, &m_ictx->layout, m_object_no,                                                                                                                 
¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦ ¦       0, m_ictx->layout.fl_object_size, m_parent_extents);                                                                                                       

¦ RWLock::RLocker snap_locker(m_ictx->snap_lock);                                                                                                                                    
¦ RWLock::RLocker parent_locker(m_ictx->parent_lock);                                                                                                                                
¦ compute_parent_extents();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章