]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add helper to decode compression info from single attr
authorCasey Bodley <cbodley@redhat.com>
Thu, 17 Sep 2020 17:26:32 +0000 (13:26 -0400)
committerYang Honggang <yanghonggang@kuaishou.com>
Wed, 10 Feb 2021 12:00:51 +0000 (20:00 +0800)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit a5520be135156c867a6502845603e2afdbb0a44a)

Conflicts:
src/rgw/rgw_compression.cc
src/rgw/rgw_compression.h

src/rgw/rgw_compression.cc
src/rgw/rgw_compression.h

index bcd7fbc27a08b3c1e89286cf9247beeb3494d6cf..b70f51ad483e284bdd80df863b63f89001428db2 100644 (file)
@@ -5,6 +5,38 @@
 
 #define dout_subsys ceph_subsys_rgw
 
+int rgw_compression_info_from_attr(const bufferlist& attr,
+                                   bool& need_decompress,
+                                   RGWCompressionInfo& cs_info)
+{
+  auto bliter = attr.cbegin();
+  try {
+    decode(cs_info, bliter);
+  } catch (buffer::error& err) {
+    return -EIO;
+  }
+  if (cs_info.blocks.size() == 0) {
+    return -EIO;
+  }
+  if (cs_info.compression_type != "none")
+    need_decompress = true;
+  else
+    need_decompress = false;
+  return 0;
+}
+
+int rgw_compression_info_from_attrset(const map<string, bufferlist>& attrs,
+                                      bool& need_decompress,
+                                      RGWCompressionInfo& cs_info)
+{
+  auto value = attrs.find(RGW_ATTR_COMPRESSION);
+  if (value == attrs.end()) {
+    need_decompress = false;
+    return 0;
+  }
+  return rgw_compression_info_from_attr(value->second, need_decompress, cs_info);
+}
+
 //------------RGWPutObj_Compress---------------
 
 int RGWPutObj_Compress::process(bufferlist&& in, uint64_t logical_offset)
index e0448044ceeeb2a61295f18cb0f9ab971aaa83fe..67a1e0ccb43fd60b5d2375b82bab22dde2abacbc 100644 (file)
 #include "rgw_putobj.h"
 #include "rgw_op.h"
 
+int rgw_compression_info_from_attr(const bufferlist& attr,
+                                   bool& need_decompress,
+                                   RGWCompressionInfo& cs_info);
+int rgw_compression_info_from_attrset(const map<string, bufferlist>& attrs,
+                                      bool& need_decompress,
+                                      RGWCompressionInfo& cs_info);
+
 class RGWGetObj_Decompress : public RGWGetObj_Filter
 {
   CephContext* cct;