From: Jason Dillaman Date: Fri, 13 Oct 2017 19:49:00 +0000 (-0400) Subject: librbd: tweaks to support testing of trim state machine X-Git-Tag: v13.0.1~523^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=3220480d4a22c81cb74f25e528f2bcf3986342c1;p=ceph-ci.git librbd: tweaks to support testing of trim state machine Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/io/ObjectRequest.cc b/src/librbd/io/ObjectRequest.cc index 0b2415cf42e..d6a3905deab 100644 --- a/src/librbd/io/ObjectRequest.cc +++ b/src/librbd/io/ObjectRequest.cc @@ -53,6 +53,16 @@ ObjectRequest::create_truncate(I *ictx, const std::string &oid, object_off, snapc, parent_trace, completion); } +template +ObjectRequest* +ObjectRequest::create_trim(I *ictx, const std::string &oid, + uint64_t object_no, const ::SnapContext &snapc, + bool post_object_map_update, + Context *completion) { + return new ObjectTrimRequest(util::get_image_ctx(ictx), oid, object_no, + snapc, post_object_map_update, completion); +} + template ObjectRequest* ObjectRequest::create_write(I *ictx, const std::string &oid, diff --git a/src/librbd/io/ObjectRequest.h b/src/librbd/io/ObjectRequest.h index b683dbf12c5..9b6b5a9bc6d 100644 --- a/src/librbd/io/ObjectRequest.h +++ b/src/librbd/io/ObjectRequest.h @@ -58,6 +58,11 @@ public: const ::SnapContext &snapc, const ZTracer::Trace &parent_trace, Context *completion); + static ObjectRequest* create_trim(ImageCtxT *ictx, const std::string &oid, + uint64_t object_no, + const ::SnapContext &snapc, + bool post_object_map_update, + Context *completion); static ObjectRequest* create_write(ImageCtxT *ictx, const std::string &oid, uint64_t object_no, uint64_t object_off, diff --git a/src/librbd/operation/TrimRequest.cc b/src/librbd/operation/TrimRequest.cc index a7e370b2fd1..00d3423cb28 100644 --- a/src/librbd/operation/TrimRequest.cc +++ b/src/librbd/operation/TrimRequest.cc @@ -45,8 +45,8 @@ public: string oid = image_ctx.get_object_name(m_object_no); ldout(image_ctx.cct, 10) << "removing (with copyup) " << oid << dendl; - auto req = new io::ObjectTrimRequest(&image_ctx, oid, m_object_no, - m_snapc, false, this); + auto req = io::ObjectRequest::create_trim(&image_ctx, oid, m_object_no, + m_snapc, false, this); req->send(); return 0; } @@ -58,7 +58,7 @@ private: template class C_RemoveObject : public C_AsyncObjectThrottle { public: - C_RemoveObject(AsyncObjectThrottle &throttle, ImageCtx *image_ctx, + C_RemoveObject(AsyncObjectThrottle &throttle, I *image_ctx, uint64_t object_no) : C_AsyncObjectThrottle(throttle, *image_ctx), m_object_no(object_no) { @@ -281,7 +281,7 @@ void TrimRequest::send_post_trim() { { RWLock::RLocker snap_locker(image_ctx.snap_lock); if (image_ctx.object_map != nullptr) { - ldout(image_ctx.cct, 5) << this << " send_post_copyup:" + ldout(image_ctx.cct, 5) << this << " send_post_trim:" << " delete_start_min=" << m_delete_start_min << " num_objects=" << m_num_objects << dendl; m_state = STATE_POST_TRIM; @@ -338,13 +338,15 @@ void TrimRequest::send_clean_boundary() { ldout(cct, 20) << " ex " << *p << dendl; Context *req_comp = new C_ContextCompletion(*completion); - io::ObjectRequest<> *req; + io::ObjectRequest *req; if (p->offset == 0) { - req = new io::ObjectTrimRequest(&image_ctx, p->oid.name, p->objectno, - snapc, true, req_comp); + req = io::ObjectRequest::create_trim(&image_ctx, p->oid.name, + p->objectno, snapc, true, + req_comp); } else { - req = new io::ObjectTruncateRequest(&image_ctx, p->oid.name, p->objectno, - p->offset, snapc, {}, req_comp); + req = io::ObjectRequest::create_truncate(&image_ctx, p->oid.name, + p->objectno, p->offset, snapc, + {}, req_comp); } req->send(); } diff --git a/src/librbd/operation/TrimRequest.h b/src/librbd/operation/TrimRequest.h index 69fb5a97fd0..8526046c94b 100644 --- a/src/librbd/operation/TrimRequest.h +++ b/src/librbd/operation/TrimRequest.h @@ -24,6 +24,10 @@ public: prog_ctx); } + TrimRequest(ImageCtxT &image_ctx, Context *on_finish, + uint64_t original_size, uint64_t new_size, + ProgressContext &prog_ctx); + void send() override; protected: @@ -86,10 +90,6 @@ private: uint64_t m_new_size; ProgressContext &m_prog_ctx; - TrimRequest(ImageCtxT &image_ctx, Context *on_finish, - uint64_t original_size, uint64_t new_size, - ProgressContext &prog_ctx); - void send_pre_trim(); void send_copyup_objects(); void send_remove_objects();