vector<RGWCloneRangeInfo>& ranges,
map<string, bufferlist> attrs,
bool truncate_dest,
- pair<string, bufferlist> *cmp_xattr)
+ pair<string, bufferlist> *xattr_cond)
{
std::string& bucket = dst_obj.bucket;
std::string& dst_oid = dst_obj.object;
}
if (range.len) {
RGW_LOG(20) << "calling op.clone_range(dst_ofs=" << range.dst_ofs << ", src.object=" << range.src.object << " range.src_ofs=" << range.src_ofs << " range.len=" << range.len << dendl;
+ if (xattr_cond) {
+ op.src_cmpxattr(range.src.object, xattr_cond->first.c_str(),
+ LIBRADOS_CMPXATTR_OP_EQ, xattr_cond->second);
+ }
op.clone_range(range.dst_ofs, range.src.object, range.src_ofs, range.len);
}
}
int clone_obj_cond(void *ctx, rgw_obj& dst_obj, off_t dst_ofs,
rgw_obj& src_obj, off_t src_ofs,
uint64_t size, map<string, bufferlist> attrs,
- pair<string, bufferlist> *cmp_xattr) {
+ pair<string, bufferlist> *xattr_cond) {
RGWCloneRangeInfo info;
vector<RGWCloneRangeInfo> v;
info.src = src_obj;
info.dst_ofs = dst_ofs;
info.len = size;
v.push_back(info);
- return clone_objs(ctx, dst_obj, v, attrs, true, cmp_xattr);
+ return clone_objs(ctx, dst_obj, v, attrs, true, xattr_cond);
}
/** Copy an object, with many extra options */