object_off, snapc, parent_trace, completion);
}
+template <typename I>
+ObjectRequest<I>*
+ObjectRequest<I>::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 <typename I>
ObjectRequest<I>*
ObjectRequest<I>::create_write(I *ictx, const std::string &oid,
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,
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<I>::create_trim(&image_ctx, oid, m_object_no,
+ m_snapc, false, this);
req->send();
return 0;
}
template <typename I>
class C_RemoveObject : public C_AsyncObjectThrottle<I> {
public:
- C_RemoveObject(AsyncObjectThrottle<I> &throttle, ImageCtx *image_ctx,
+ C_RemoveObject(AsyncObjectThrottle<I> &throttle, I *image_ctx,
uint64_t object_no)
: C_AsyncObjectThrottle<I>(throttle, *image_ctx), m_object_no(object_no)
{
{
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;
ldout(cct, 20) << " ex " << *p << dendl;
Context *req_comp = new C_ContextCompletion(*completion);
- io::ObjectRequest<> *req;
+ io::ObjectRequest<I> *req;
if (p->offset == 0) {
- req = new io::ObjectTrimRequest(&image_ctx, p->oid.name, p->objectno,
- snapc, true, req_comp);
+ req = io::ObjectRequest<I>::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<I>::create_truncate(&image_ctx, p->oid.name,
+ p->objectno, p->offset, snapc,
+ {}, req_comp);
}
req->send();
}
prog_ctx);
}
+ TrimRequest(ImageCtxT &image_ctx, Context *on_finish,
+ uint64_t original_size, uint64_t new_size,
+ ProgressContext &prog_ctx);
+
void send() override;
protected:
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();