Skip to content

Commit

Permalink
Merge pull request #20002 from malc0lm/fix-copypart
Browse files Browse the repository at this point in the history
rgw: fix 'copy part' without 'x-amz-copy-source-range'
  • Loading branch information
mattbenjamin committed Feb 2, 2018
2 parents f0850a9 + 753b3a7 commit 6a09ad1
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
21 changes: 20 additions & 1 deletion src/rgw/rgw_op.cc
Expand Up @@ -3378,8 +3378,27 @@ void RGWPutObj::execute()
goto done;
}

if ((! copy_source.empty()) && !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),
copy_source_bucket_info, obj, &astate, true, false);
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;

op_ret = get_encrypt_filter(&encrypt, filter);
if (op_ret < 0) {
Expand Down
10 changes: 6 additions & 4 deletions src/rgw/rgw_rest_s3.cc
Expand Up @@ -3279,10 +3279,12 @@ int RGWHandler_REST_S3::init(RGWRados *store, struct req_state *s,

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(url_decode(copy_source),
s->init_state.src_bucket,
s->src_object);
(! s->info.env->get("HTTP_X_AMZ_COPY_SOURCE_RANGE")) &&
(! s->info.args.exists("uploadId"))) {

ret = RGWCopyObj::parse_copy_location(url_decode(copy_source),
s->init_state.src_bucket,
s->src_object);
if (!ret) {
ldout(s->cct, 0) << "failed to parse copy location" << dendl;
return -EINVAL; // XXX why not -ERR_INVALID_BUCKET_NAME or -ERR_BAD_URL?
Expand Down

0 comments on commit 6a09ad1

Please sign in to comment.