RGWAccessControlPolicy * const bucket_acl,
const boost::optional<Policy>& bucket_policy,
const off_t start_ofs,
- const off_t end_ofs)
+ const off_t end_ofs,
+ bool swift_slo)
{
ldpp_dout(this, 20) << "user manifest obj=" << ent.key.name
<< "[" << ent.key.instance << "]" << dendl;
RGWRados::Object op_target(store, s->bucket_info, obj_ctx, part);
RGWRados::Object::Read read_op(&op_target);
- read_op.conds.if_match = ent.meta.etag.c_str();
+ if (!swift_slo) {
+ /* SLO etag is optional */
+ read_op.conds.if_match = ent.meta.etag.c_str();
+ }
read_op.params.attrs = &attrs;
read_op.params.obj_size = &obj_size;
const boost::optional<Policy>& bucket_policy,
off_t start_ofs,
off_t end_ofs,
- void *param),
+ void *param,
+ bool swift_slo),
void * const cb_param)
{
rgw_bucket& bucket = pbucket_info->bucket;
len_count += end_ofs - start_ofs;
if (cb) {
- r = cb(bucket, ent, bucket_acl, bucket_policy, start_ofs, end_ofs, cb_param);
+ r = cb(bucket, ent, bucket_acl, bucket_policy, start_ofs, end_ofs,
+ cb_param, false /* swift_slo */);
if (r < 0) {
return r;
}
const boost::optional<Policy>& bucket_policy,
off_t start_ofs,
off_t end_ofs,
- void *param),
+ void *param,
+ bool swift_slo),
void *cb_param)
{
bool found_start = false, found_end = false;
int r = cb(part.bucket, ent, part.bucket_acl,
(part.bucket_policy ?
boost::optional<Policy>(*part.bucket_policy) : none),
- start_ofs, end_ofs, cb_param);
+ start_ofs, end_ofs, cb_param, true /* swift_slo */);
if (r < 0)
return r;
}
const boost::optional<Policy>& bucket_policy,
const off_t start_ofs,
const off_t end_ofs,
- void * const param)
+ void * const param,
+ bool swift_slo = false)
{
RGWGetObj *op = static_cast<RGWGetObj *>(param);
- return op->read_user_manifest_part(bucket, ent, bucket_acl, bucket_policy, start_ofs, end_ofs);
+ return op->read_user_manifest_part(
+ bucket, ent, bucket_acl, bucket_policy, start_ofs, end_ofs, swift_slo);
}
int RGWGetObj::handle_user_manifest(const char *prefix)