constexpr bool rgwx_stat = true;
constexpr bool sync_manifest = true;
constexpr bool skip_decrypt = true;
+ constexpr bool sync_cloudtiered = true;
int ret = conn->get_obj(dpp, user_id, info, src_obj, pmod, unmod_ptr,
dest_mtime_weight.zone_short_id, dest_mtime_weight.pg_ver,
prepend_meta, get_op, rgwx_stat,
- sync_manifest, skip_decrypt,
+ sync_manifest, skip_decrypt, sync_cloudtiered,
true, &cb, &in_stream_req);
if (ret < 0) {
return ret;
static constexpr bool rgwx_stat = false;
static constexpr bool sync_manifest = true;
static constexpr bool skip_decrypt = true;
+ static constexpr bool sync_cloudtiered = true;
ret = conn->get_obj(dpp, user_id, info, src_obj, pmod, unmod_ptr,
dest_mtime_weight.zone_short_id, dest_mtime_weight.pg_ver,
prepend_meta, get_op, rgwx_stat,
- sync_manifest, skip_decrypt,
+ sync_manifest, skip_decrypt, sync_cloudtiered,
true,
&cb, &in_stream_req);
if (ret < 0) {
RGWObjManifest m;
try {
decode(m, attr_iter->second);
- if (m.get_tier_type() == "cloud-s3") {
+ if (m.get_tier_type() == "cloud-s3" && !sync_cloudtiered) {
/* XXX: Instead send presigned redirect or read-through */
op_ret = -ERR_INVALID_OBJECT_STATE;
s->err.message = "This object was transitioned to cloud-s3";
bool range_parsed;
bool skip_manifest;
bool skip_decrypt{false};
+ bool sync_cloudtiered{false};
utime_t gc_invalidate_time;
bool is_slo;
std::string lo_etag;
uint32_t mod_zone_id, uint64_t mod_pg_ver,
bool prepend_metadata, bool get_op, bool rgwx_stat,
bool sync_manifest, bool skip_decrypt,
+ bool sync_cloudtiered,
bool send, RGWHTTPStreamRWRequest::ReceiveCB *cb, RGWRESTStreamRWRequest **req)
{
get_obj_params params;
params.rgwx_stat = rgwx_stat;
params.sync_manifest = sync_manifest;
params.skip_decrypt = skip_decrypt;
+ params.sync_cloudtiered = sync_cloudtiered;
params.cb = cb;
return get_obj(dpp, obj, params, send, req);
}
if (in_params.sync_manifest) {
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "sync-manifest", ""));
}
+ if (in_params.sync_cloudtiered) {
+ params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "sync-cloudtiered", ""));
+ }
if (in_params.skip_decrypt) {
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "skip-decrypt", ""));
}
bool get_op{false};
bool rgwx_stat{false};
bool sync_manifest{false};
+ bool sync_cloudtiered{false};
bool skip_decrypt{true};
RGWHTTPStreamRWRequest::ReceiveCB *cb{nullptr};
const ceph::real_time *mod_ptr, const ceph::real_time *unmod_ptr,
uint32_t mod_zone_id, uint64_t mod_pg_ver,
bool prepend_metadata, bool get_op, bool rgwx_stat, bool sync_manifest,
- bool skip_decrypt, bool send, RGWHTTPStreamRWRequest::ReceiveCB *cb, RGWRESTStreamRWRequest **req);
+ bool skip_decrypt, bool sync_cloudtiered,
+ bool send, RGWHTTPStreamRWRequest::ReceiveCB *cb, RGWRESTStreamRWRequest **req);
int complete_request(RGWRESTStreamRWRequest *req,
std::string *etag,
ceph::real_time *mtime,
skip_decrypt = s->info.args.exists(RGW_SYS_PARAM_PREFIX "skip-decrypt");
}
+ // multisite sync requests should fetch cloudtiered objects
+ sync_cloudtiered = s->info.args.exists(RGW_SYS_PARAM_PREFIX "sync-cloudtiered");
+
return RGWGetObj_ObjStore::get_params(y);
}