summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Harkes <jaharkes@cs.cmu.edu>2013-02-21 15:17:38 -0500
committerJan Harkes <jaharkes@cs.cmu.edu>2013-02-21 15:29:11 -0500
commitc83a01d4e8dcd26eec24c020c5b79fcfa4ae44a3 (patch)
tree6f39a0223240fed773d62ff8fc989fb545817e6b
parent4277265d99647c9fe950ba627e5d86234cfd70a9 (diff)
downloadceph-c83a01d4e8dcd26eec24c020c5b79fcfa4ae44a3.tar.gz
Fix failing > 4MB range requests through radosgw S3 API.
When a range request is made for more than rgw_get_obj_max_req_size bytes the first returned chunk sets 'ret' to STATUS_PARTIAL_CONTENT and all remaining chunks behave as if there is an error state and only return a minimal header. Fix this by passing STATUS_PARTIAL_CONTENT to set_req_state_err, but leave the 'ret' member variable untouched. Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu>
-rw-r--r--src/rgw/rgw_rest_s3.cc8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/rgw/rgw_rest_s3.cc b/src/rgw/rgw_rest_s3.cc
index b4ddded0627..16ac4000436 100644
--- a/src/rgw/rgw_rest_s3.cc
+++ b/src/rgw/rgw_rest_s3.cc
@@ -71,7 +71,7 @@ int RGWGetObj_ObjStore_S3::send_response_data(bufferlist& bl, off_t bl_ofs, off_
{
const char *content_type = NULL;
string content_type_str;
- int orig_ret = ret;
+ int req_state = ret;
map<string, string> response_attrs;
map<string, string>::iterator riter;
@@ -132,9 +132,9 @@ int RGWGetObj_ObjStore_S3::send_response_data(bufferlist& bl, off_t bl_ofs, off_
}
if (partial_content && !ret)
- ret = STATUS_PARTIAL_CONTENT;
+ req_state = STATUS_PARTIAL_CONTENT;
done:
- set_req_state_err(s, ret);
+ set_req_state_err(s, req_state);
dump_errno(s);
@@ -148,7 +148,7 @@ done:
sent_header = true;
send_data:
- if (get_data && !orig_ret) {
+ if (get_data && !ret) {
int r = s->cio->write(bl.c_str() + bl_ofs, bl_len);
if (r < 0)
return r;