int RGWAsyncPutSystemObj::_send_request()
{
- return store->put_system_obj_data(NULL, obj, bl, -1, exclusive, objv_tracker);
+ return store->put_system_obj_data(NULL, obj, bl, -1, exclusive, &objv_tracker);
}
RGWAsyncPutSystemObj::RGWAsyncPutSystemObj(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWRados *_store,
- RGWObjVersionTracker *_objv_tracker, rgw_raw_obj& _obj,
- bool _exclusive, bufferlist& _bl)
- : RGWAsyncRadosRequest(caller, cn), store(_store), objv_tracker(_objv_tracker),
- obj(_obj), exclusive(_exclusive), bl(_bl)
+ RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj,
+ bool _exclusive, bufferlist _bl)
+ : RGWAsyncRadosRequest(caller, cn), store(_store),
+ obj(_obj), exclusive(_exclusive), bl(std::move(_bl))
{
+ if (_objv_tracker) {
+ objv_tracker = *_objv_tracker;
+ }
}
int RGWAsyncPutSystemObjAttrs::_send_request()
class RGWAsyncPutSystemObj : public RGWAsyncRadosRequest {
RGWRados *store;
- RGWObjVersionTracker *objv_tracker;
rgw_raw_obj obj;
bool exclusive;
bufferlist bl;
int _send_request() override;
public:
RGWAsyncPutSystemObj(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWRados *_store,
- RGWObjVersionTracker *_objv_tracker, rgw_raw_obj& _obj,
- bool _exclusive, bufferlist& _bl);
+ RGWObjVersionTracker *_objv_tracker, const rgw_raw_obj& _obj,
+ bool _exclusive, bufferlist _bl);
+
+ RGWObjVersionTracker objv_tracker;
};
class RGWAsyncPutSystemObjAttrs : public RGWAsyncRadosRequest {
RGWAsyncRadosProcessor *async_rados;
RGWRados *store;
bufferlist bl;
-
rgw_raw_obj obj;
RGWObjVersionTracker *objv_tracker;
-
RGWAsyncPutSystemObj *req{nullptr};
public:
int send_request() override {
req = new RGWAsyncPutSystemObj(this, stack->create_completion_notifier(),
- store, objv_tracker, obj, false, bl);
+ store, objv_tracker, obj, false, std::move(bl));
async_rados->queue(req);
return 0;
}
int request_complete() override {
+ if (objv_tracker) { // copy the updated version
+ *objv_tracker = req->objv_tracker;
+ }
return req->get_ret_status();
}
};