summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-05-30 12:58:11 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-05-30 13:04:27 -0700
commit29fa9a1924f9ca272d9293ce09cdde31808659af (patch)
treef5d63c594d2bb87965f8a5df3889587f71e4f095
parentd86b9a852b57553448709c2b978ac3a8637cd63f (diff)
downloadceph-29fa9a1924f9ca272d9293ce09cdde31808659af.tar.gz
rgw: only append prefetched data if reading from headwip-5209
Fixes: #5209 Backport: bobtail, cuttlefish If the head object wrongfully contains data, but according to the manifest we don't read from the head, we shouldn't copy the prefetched data. Also fix the length calculation for that data. Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_rados.cc34
1 files changed, 17 insertions, 17 deletions
diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
index 31332b5993e..a520bafa730 100644
--- a/src/rgw/rgw_rados.cc
+++ b/src/rgw/rgw_rados.cc
@@ -2639,31 +2639,31 @@ int RGWRados::get_obj(void *ctx, void **handle, rgw_obj& obj,
state->io_ctx.locator_set_key(key);
+ read_len = len;
+
if (reading_from_head) {
/* only when reading from the head object do we need to do the atomic test */
r = append_atomic_test(rctx, read_obj, op, &astate);
if (r < 0)
goto done_ret;
- }
-
- read_len = len;
- if (astate) {
- if (!ofs && astate->data.length() >= len) {
- bl = astate->data;
- goto done;
- }
+ if (astate) {
+ if (!ofs && astate->data.length() >= len) {
+ bl = astate->data;
+ goto done;
+ }
- if (ofs < astate->data.length()) {
- unsigned copy_len = min((uint64_t)astate->data.length(), len);
- astate->data.copy(ofs, copy_len, bl);
- read_len -= copy_len;
- read_ofs += copy_len;
- if (!read_len)
- goto done;
+ if (ofs < astate->data.length()) {
+ unsigned copy_len = min((uint64_t)astate->data.length() - ofs, len);
+ astate->data.copy(ofs, copy_len, bl);
+ read_len -= copy_len;
+ read_ofs += copy_len;
+ if (!read_len)
+ goto done;
- merge_bl = true;
- pbl = &read_bl;
+ merge_bl = true;
+ pbl = &read_bl;
+ }
}
}