int ret = conn->get_obj(user_id, info, src_obj, pmod, unmod_ptr,
dest_mtime_weight.zone_short_id, dest_mtime_weight.pg_ver,
true /* prepend_meta */, true /* GET */, true /* rgwx-stat */,
- &cb, &in_stream_req);
+ true /* sync manifest */, &cb, &in_stream_req);
if (ret < 0) {
return ret;
}
ret = conn->get_obj(user_id, info, src_obj, pmod, unmod_ptr,
dest_mtime_weight.zone_short_id, dest_mtime_weight.pg_ver,
true /* prepend_meta */, true /* GET */, false /* rgwx-stat */,
- &cb, &in_stream_req);
+ true /* sync manifest */, &cb, &in_stream_req);
if (ret < 0) {
goto set_err_state;
}
const real_time *mod_ptr, const real_time *unmod_ptr,
uint32_t mod_zone_id, uint64_t mod_pg_ver,
bool prepend_metadata, bool get_op, bool rgwx_stat,
- RGWGetDataCB *cb, RGWRESTStreamRWRequest **req)
+ bool sync_manifest, RGWGetDataCB *cb,
+ RGWRESTStreamRWRequest **req)
{
string url;
int ret = get_url(url);
if (rgwx_stat) {
params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "stat", "true"));
}
+ if (sync_manifest) {
+ params.push_back(param_pair_t(RGW_SYS_PARAM_PREFIX "sync-manifest", ""));
+ }
if (!obj.key.instance.empty()) {
const string& instance = obj.key.instance;
params.push_back(param_pair_t("versionId", instance));
int get_obj(const rgw_user& uid, req_info *info /* optional */, rgw_obj& obj,
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 prepend_metadata, bool get_op, bool rgwx_stat, bool sync_manifest,
RGWGetDataCB *cb, RGWRESTStreamRWRequest **req);
int complete_request(RGWRESTStreamRWRequest *req, string& etag, ceph::real_time *mtime, uint64_t *psize, map<string, string>& attrs);
return RGWGetObj_ObjStore_S3::send_response_data_error();
}
+int RGWGetObj_ObjStore_S3::get_params()
+{
+ // for multisite sync requests, only read the slo manifest itself, rather than
+ // all of the data from its parts. the parts will sync as separate objects
+ skip_manifest = s->info.args.exists(RGW_SYS_PARAM_PREFIX "sync-manifest");
+
+ return RGWGetObj_ObjStore::get_params();
+}
+
int RGWGetObj_ObjStore_S3::send_response_data_error()
{
bufferlist bl;
RGWGetObj_ObjStore_S3() {}
~RGWGetObj_ObjStore_S3() override {}
+ int get_params() override;
int send_response_data_error() override;
int send_response_data(bufferlist& bl, off_t ofs, off_t len) override;
void set_custom_http_response(int http_ret) { custom_http_ret = http_ret; }