int RGWAsyncPutSystemObj::_send_request()
{
- return store->put_system_obj_data(NULL, obj, bl, -1, exclusive);
+ return store->put_system_obj_data(NULL, obj, bl, -1, exclusive, objv_tracker);
}
RGWAsyncPutSystemObj::RGWAsyncPutSystemObj(RGWCoroutine *caller, RGWAioCompletionNotifier *cn, RGWRados *_store,
- const rgw_raw_obj& _obj, bool _exclusive,
- bufferlist& _bl) : RGWAsyncRadosRequest(caller, cn), store(_store),
- obj(_obj), exclusive(_exclusive),
- bl(_bl)
+ 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)
{
}
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,
- const rgw_raw_obj& _obj, bool _exclusive,
- bufferlist& _bl);
+ RGWObjVersionTracker *_objv_tracker, rgw_raw_obj& _obj,
+ bool _exclusive, bufferlist& _bl);
};
class RGWAsyncPutSystemObjAttrs : public RGWAsyncRadosRequest {
T *result;
/// on ENOENT, call handle_data() with an empty object instead of failing
const bool empty_on_enoent;
+ RGWObjVersionTracker *objv_tracker;
RGWAsyncGetSystemObj *req{nullptr};
public:
RGWSimpleRadosReadCR(RGWAsyncRadosProcessor *_async_rados, RGWRados *_store,
const rgw_raw_obj& _obj,
- T *_result, bool empty_on_enoent = true)
+ T *_result, bool empty_on_enoent = true,
+ RGWObjVersionTracker *objv_tracker = nullptr)
: RGWSimpleCoroutine(_store->ctx()), async_rados(_async_rados), store(_store),
obj_ctx(store), obj(_obj), result(_result),
- empty_on_enoent(empty_on_enoent) {}
+ empty_on_enoent(empty_on_enoent), objv_tracker(objv_tracker) {}
~RGWSimpleRadosReadCR() override {
request_cleanup();
}
int RGWSimpleRadosReadCR<T>::send_request()
{
req = new RGWAsyncGetSystemObj(this, stack->create_completion_notifier(),
- store, &obj_ctx, NULL,
+ store, &obj_ctx, objv_tracker,
obj,
&bl, 0, -1);
if (pattrs) {
bufferlist bl;
rgw_raw_obj obj;
+ RGWObjVersionTracker *objv_tracker;
- RGWAsyncPutSystemObj *req;
+ RGWAsyncPutSystemObj *req{nullptr};
public:
RGWSimpleRadosWriteCR(RGWAsyncRadosProcessor *_async_rados, RGWRados *_store,
const rgw_raw_obj& _obj,
- const T& _data) : RGWSimpleCoroutine(_store->ctx()),
- async_rados(_async_rados),
- store(_store),
- obj(_obj),
- req(NULL) {
+ const T& _data, RGWObjVersionTracker *objv_tracker = nullptr)
+ : RGWSimpleCoroutine(_store->ctx()), async_rados(_async_rados),
+ store(_store), obj(_obj), objv_tracker(objv_tracker) {
::encode(_data, bl);
}
int send_request() override {
req = new RGWAsyncPutSystemObj(this, stack->create_completion_notifier(),
- store, obj, false, bl);
+ store, objv_tracker, obj, false, bl);
async_rados->queue(req);
return 0;
}