it will copy an entire source object
Signed-off-by: Malcolm Lee <fengxueyu35@126.com>
(cherry picked from commit
753b3a7)
Conflicts:
1. in original commit, copy_source is std::string, jewel
version is const char *.
2. in original commit, url_decode take only one param,
jewel version take 2 params.
3. in original commit, get_obj_state take 6 params, jewel
version takes 4 params.
<< dendl;
goto done;
}
+
+ if (copy_source && !copy_source_range) {
+ rgw_obj_key obj_key(copy_source_object_name, copy_source_version_id);
+ rgw_obj obj(copy_source_bucket_info.bucket, obj_key.name);
+
+ RGWObjState *astate;
+ op_ret = store->get_obj_state(static_cast<RGWObjectCtx *>(s->obj_ctx),
+ obj, &astate, true);
+ if (op_ret < 0) {
+ ldout(s->cct, 0) << "ERROR: get copy source obj state returned with error" << op_ret << dendl;
+ goto done;
+ }
+ if (!astate->exists){
+ op_ret = -ENOENT;
+ goto done;
+ }
+ lst = astate->size - 1;
+ } else {
+ lst = copy_source_range_lst;
+ }
fst = copy_source_range_fst;
- lst = copy_source_range_lst;
do {
bufferlist data_in;
const char *copy_source = s->info.env->get("HTTP_X_AMZ_COPY_SOURCE");
- if (copy_source && !s->info.env->get("HTTP_X_AMZ_COPY_SOURCE_RANGE")) {
- ret = RGWCopyObj::parse_copy_location(copy_source,
+ if (copy_source &&
+ (! s->info.env->get("HTTP_X_AMZ_COPY_SOURCE_RANGE")) &&
+ (! s->info.args.exists("uploadId"))) {
+ std::string url_decode_copy_source;
+ url_decode(copy_source, url_decode_copy_source);
+ ret = RGWCopyObj::parse_copy_location(url_decode_copy_source,
s->init_state.src_bucket,
s->src_object);
if (!ret) {