lock_name(_lock_name),
cookie(_cookie),
duration(_duration),
- obj(_obj),
- req(nullptr)
+ obj(_obj)
{
set_description() << "rados lock dest=" << obj << " lock=" << lock_name << " cookie=" << cookie << " duration=" << duration;
}
void RGWSimpleRadosLockCR::request_cleanup()
{
- if (req) {
- req->finish();
- req = NULL;
- }
}
int RGWSimpleRadosLockCR::send_request(const DoutPrefixProvider *dpp)
{
+ int r = store->getRados()->get_raw_obj_ref(dpp, obj, &ref);
+ if (r < 0) {
+ ldpp_dout(dpp, -1) << "ERROR: failed to get ref for (" << obj << ") ret=" << r << dendl;
+ return r;
+ }
+
set_status() << "sending request";
- req = new RGWAsyncLockSystemObj(this, stack->create_completion_notifier(),
- store, NULL, obj, lock_name, cookie, duration);
- async_rados->queue(req);
- return 0;
+
+ rados::cls::lock::Lock l(lock_name);
+ utime_t dur(duration, 0);
+ l.set_duration(dur);
+ l.set_cookie(cookie);
+ l.set_may_renew(true);
+
+ librados::ObjectWriteOperation op;
+ l.lock_exclusive(&op);
+
+ cn = stack->create_completion_notifier();
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op);
}
int RGWSimpleRadosLockCR::request_complete()
{
- set_status() << "request complete; ret=" << req->get_ret_status();
- return req->get_ret_status();
+ int r = cn->completion()->get_return_value();
+ set_status() << "request complete; ret=" << r;
+ return r;
}
RGWSimpleRadosUnlockCR::RGWSimpleRadosUnlockCR(RGWAsyncRadosProcessor *_async_rados, rgw::sal::RadosStore* _store,
store(_store),
lock_name(_lock_name),
cookie(_cookie),
- obj(_obj),
- req(NULL)
+ obj(_obj)
{
set_description() << "rados unlock dest=" << obj << " lock=" << lock_name << " cookie=" << cookie;
}
void RGWSimpleRadosUnlockCR::request_cleanup()
{
- if (req) {
- req->finish();
- req = NULL;
- }
}
int RGWSimpleRadosUnlockCR::send_request(const DoutPrefixProvider *dpp)
{
+ int r = store->getRados()->get_raw_obj_ref(dpp, obj, &ref);
+ if (r < 0) {
+ ldpp_dout(dpp, -1) << "ERROR: failed to get ref for (" << obj << ") ret=" << r << dendl;
+ return r;
+ }
+
set_status() << "sending request";
- req = new RGWAsyncUnlockSystemObj(this, stack->create_completion_notifier(),
- store, NULL, obj, lock_name, cookie);
- async_rados->queue(req);
- return 0;
+ rados::cls::lock::Lock l(lock_name);
+ l.set_cookie(cookie);
+
+ librados::ObjectWriteOperation op;
+ l.unlock(&op);
+
+ cn = stack->create_completion_notifier();
+ return ref.ioctx.aio_operate(ref.obj.oid, cn->completion(), &op);
}
int RGWSimpleRadosUnlockCR::request_complete()
{
- set_status() << "request complete; ret=" << req->get_ret_status();
- return req->get_ret_status();
+ int r = cn->completion()->get_return_value();
+ set_status() << "request complete; ret=" << r;
+ return r;
}
int RGWOmapAppend::operate(const DoutPrefixProvider *dpp) {