RGWStreamReadHTTPResourceCRF(CephContext *_cct,
RGWCoroutinesEnv *_env,
RGWCoroutine *_caller,
- RGWHTTPManager *_http_manager) : cct(_cct),
+ RGWHTTPManager *_http_manager,
+ const rgw_obj_key& _src_key) : cct(_cct),
env(_env),
caller(_caller),
- http_manager(_http_manager) {}
+ http_manager(_http_manager) {
+ rest_obj.key = _src_key;
+ }
~RGWStreamReadHTTPResourceCRF() override;
int init() override;
int read(bufferlist *data, uint64_t max, bool *need_retry) override; /* reentrant */
- int decode_rest_obj(map<string, string>& headers, bufferlist& extra_data, rgw_rest_obj *info);
+ int decode_rest_obj(map<string, string>& headers, bufferlist& extra_data, rgw_rest_obj *info) override;
bool has_attrs() override;
void get_attrs(std::map<string, string> *attrs);
bool is_done();
RGWDataSyncEnv *_sync_env,
RGWRESTConn *_conn,
rgw_obj& _src_obj,
- const rgw_sync_aws_src_obj_properties& _src_properties) : RGWStreamReadHTTPResourceCRF(_cct, _env, _caller, _sync_env->http_manager),
+ const rgw_sync_aws_src_obj_properties& _src_properties) : RGWStreamReadHTTPResourceCRF(_cct, _env, _caller,
+ _sync_env->http_manager, _src_obj.key),
sync_env(_sync_env), conn(_conn), src_obj(_src_obj),
src_properties(_src_properties) {
}
snprintf(buf, sizeof(buf), "%llu", (long long)src_properties.versioned_epoch);
new_attrs["x-amz-meta-rgwx-versioned-epoch"] = buf;
+ utime_t ut(src_properties.mtime);
+ snprintf(buf, sizeof(buf), "%lld.%09lld",
+ (long long)ut.sec(),
+ (long long)ut.nsec());
+
+ new_attrs["x-amz-meta-rgwx-source-mtime"] = buf;
+ new_attrs["x-amz-meta-rgwx-source-etag"] = src_properties.etag;
+ new_attrs["x-amz-meta-rgwx-source-key"] = rest_obj.key.name;
+ if (!rest_obj.key.instance.empty()) {
+ new_attrs["x-amz-meta-rgwx-source-version-id"] = rest_obj.key.instance;
+ }
+
r->set_send_length(rest_obj.content_len);
RGWAccessControlPolicy policy;