RBD AioRequest

来源:互联网 发布:网络pc赌博怎么能赢 编辑:程序博客网 时间:2024/04/29 11:20

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();}
0 0
原创粉丝点击