RGWSI_SysObj_Core *svc = source.core_svc;
rgw_raw_obj& obj = source.get_obj();
- return svc->set_attrs(obj, attrs, nullptr, objv_tracker, y);
+ return svc->set_attrs(obj, attrs, nullptr, objv_tracker, exclusive, y);
}
int RGWSI_SysObj::Obj::WOp::write_attr(const char *name, bufferlist& bl,
map<string, bufferlist> m;
m[name] = bl;
- return svc->set_attrs(obj, m, nullptr, objv_tracker, y);
+ return svc->set_attrs(obj, m, nullptr, objv_tracker, exclusive, y);
}
int RGWSI_SysObj::Pool::list_prefixed_objs(const string& prefix, std::function<void(const string&)> cb)
map<string, bufferlist>& attrs,
map<string, bufferlist> *rmattrs,
RGWObjVersionTracker *objv_tracker,
- optional_yield y)
+ bool exclusive, optional_yield y)
{
rgw_pool pool;
string oid;
}
info.status = 0;
info.flags = CACHE_FLAG_MODIFY_XATTRS;
- int ret = RGWSI_SysObj_Core::set_attrs(obj, attrs, rmattrs, objv_tracker, y);
+ int ret = RGWSI_SysObj_Core::set_attrs(obj, attrs, rmattrs, objv_tracker, exclusive, y);
string name = normal_name(pool, oid);
if (ret >= 0) {
if (objv_tracker && objv_tracker->read_version.ver) {
map<string, bufferlist>& attrs,
map<string, bufferlist> *rmattrs,
RGWObjVersionTracker *objv_tracker,
- optional_yield y);
+ bool exclusive, optional_yield y) override;
int remove(RGWSysObjectCtxBase& obj_ctx,
RGWObjVersionTracker *objv_tracker,
map<string, bufferlist>& attrs,
map<string, bufferlist> *rmattrs,
RGWObjVersionTracker *objv_tracker,
- optional_yield y)
+ bool exclusive, optional_yield y)
{
RGWSI_RADOS::Obj rados_obj;
int r = get_rados_obj(zone_svc, obj, &rados_obj);
librados::ObjectWriteOperation op;
+ if (exclusive) {
+ op.create(true); // exclusive create
+ }
if (objv_tracker) {
objv_tracker->prepare_op_for_write(&op);
}
map<string, bufferlist>& attrs,
map<string, bufferlist> *rmattrs,
RGWObjVersionTracker *objv_tracker,
- optional_yield y);
+ bool exclusive, optional_yield y);
virtual int omap_get_all(const rgw_raw_obj& obj, std::map<string, bufferlist> *m,
optional_yield y);