]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: can't download object with range when compression enabled 20226/head
authorfang yuxiang <fang.yuxiang@eisoo.com>
Thu, 1 Feb 2018 09:36:46 +0000 (17:36 +0800)
committerfang yuxiang <fang.yuxiang@eisoo.com>
Fri, 2 Feb 2018 01:56:30 +0000 (09:56 +0800)
Fixes: http://tracker.ceph.com/issues/22852
Signed-off-by: fang yuxiang <fang.yuxiang@eisoo.com>
src/rgw/rgw_compression.cc

index b9637d01d09b9d2c96ca24e0d244d7cfea500831..b1ffa04e15a93072e97dcb70b83349025ad47209 100644 (file)
@@ -121,15 +121,17 @@ int RGWGetObj_Decompress::handle_data(bufferlist& bl, off_t bl_ofs, off_t bl_len
   }
 
   cur_ofs += bl_len;
-
   off_t ch_len = std::min<off_t>(out_bl.length() - q_ofs, q_len);
-  r = next->handle_data(out_bl, q_ofs, ch_len);
-  if (r < 0) {
-    lderr(cct) << "handle_data failed with exit code " << r << dendl;
-    return r;
+  if (ch_len > 0) {
+    r = next->handle_data(out_bl, q_ofs, ch_len);
+    if (r < 0) {
+      lderr(cct) << "handle_data failed with exit code " << r << dendl;
+      return r;
+    }
+    out_bl.splice(0, q_ofs + ch_len);
+    q_len -= ch_len;
+    q_ofs = 0;
   }
-  q_len -= ch_len;
-  q_ofs = 0;
   return r;
 }