]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/sal: StoreObject doesn't store separate attrs
authorCasey Bodley <cbodley@redhat.com>
Sat, 18 Feb 2023 20:19:34 +0000 (15:19 -0500)
committerCasey Bodley <cbodley@redhat.com>
Thu, 25 May 2023 21:10:44 +0000 (17:10 -0400)
use RGWObjState::attrset instead

Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit ad878f6c26424efa1017c8f861ece21b6b7d7704)

src/rgw/driver/rados/rgw_sal_rados.cc
src/rgw/rgw_sal_dbstore.cc
src/rgw/rgw_sal_store.h

index 49be08fcb49a653b806daffb168e776a67bd7d62..67b600b472e10ac868cb7943a3bb4568e898f27f 100644 (file)
@@ -1751,7 +1751,7 @@ int RadosObject::get_obj_state(const DoutPrefixProvider* dpp, RGWObjState **psta
 
 int RadosObject::read_attrs(const DoutPrefixProvider* dpp, RGWRados::Object::Read &read_op, optional_yield y, rgw_obj* target_obj)
 {
-  read_op.params.attrs = &attrs;
+  read_op.params.attrs = &state.attrset;
   read_op.params.target_obj = target_obj;
   read_op.params.obj_size = &state.size;
   read_op.params.lastmod = &state.mtime;
@@ -1790,8 +1790,8 @@ int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, o
   /* Temporarily set target */
   state.obj = target;
   set_atomic();
-  attrs[attr_name] = attr_val;
-  r = set_obj_attrs(dpp, &attrs, nullptr, y);
+  state.attrset[attr_name] = attr_val;
+  r = set_obj_attrs(dpp, &state.attrset, nullptr, y);
   /* Restore target */
   state.obj = save;
 
@@ -1809,23 +1809,20 @@ int RadosObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* att
 }
 
 bool RadosObject::is_expired() {
-  auto iter = attrs.find(RGW_ATTR_DELETE_AT);
-  if (iter != attrs.end()) {
-    utime_t delete_at;
-    try {
-      auto bufit = iter->second.cbegin();
-      decode(delete_at, bufit);
-    } catch (buffer::error& err) {
-      ldout(store->ctx(), 0) << "ERROR: " << __func__ << ": failed to decode " RGW_ATTR_DELETE_AT " attr" << dendl;
-      return false;
-    }
-
-    if (delete_at <= ceph_clock_now() && !delete_at.is_zero()) {
-      return true;
-    }
+  auto iter = state.attrset.find(RGW_ATTR_DELETE_AT);
+  if (iter == state.attrset.end()) {
+    return false;
+  }
+  utime_t delete_at;
+  try {
+    auto bufit = iter->second.cbegin();
+    decode(delete_at, bufit);
+  } catch (buffer::error& err) {
+    ldout(store->ctx(), 0) << "ERROR: " << __func__ << ": failed to decode " RGW_ATTR_DELETE_AT " attr" << dendl;
+    return false;
   }
 
-  return false;
+  return delete_at <= ceph_clock_now() && !delete_at.is_zero();
 }
 
 void RadosObject::gen_rand_obj_instance_name()
index 1019b7ef8174173c4f466b19290039b5de2e8a85..ba7da28ca5a8a0aa7c684a61779dc8950eb6ecc9 100644 (file)
@@ -630,7 +630,7 @@ namespace rgw::sal {
 
   int DBObject::read_attrs(const DoutPrefixProvider* dpp, DB::Object::Read &read_op, optional_yield y, rgw_obj* target_obj)
   {
-    read_op.params.attrs = &attrs;
+    read_op.params.attrs = &state.attrset;
     read_op.params.target_obj = target_obj;
     read_op.params.obj_size = &state.size;
     read_op.params.lastmod = &state.mtime;
@@ -662,8 +662,8 @@ namespace rgw::sal {
       return r;
     }
     set_atomic();
-    attrs[attr_name] = attr_val;
-    return set_obj_attrs(dpp, &attrs, nullptr, y);
+    state.attrset[attr_name] = attr_val;
+    return set_obj_attrs(dpp, &state.attrset, nullptr, y);
   }
 
   int DBObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y)
index c7c5f5ae61194389ff80029f76691420a17935fc..55b43e3d90bda1c795c5534c3bf0bc307b3287e9 100644 (file)
@@ -169,36 +169,17 @@ class StoreBucket : public Bucket {
 class StoreObject : public Object {
   protected:
     RGWObjState state;
-    Bucket* bucket;
-    Attrs attrs;
+    Bucket* bucket = nullptr;
     bool delete_marker{false};
 
   public:
-
-    struct StoreReadOp : ReadOp {
-      virtual ~StoreReadOp() = default;
-    };
-
-    struct StoreDeleteOp : DeleteOp {
-      virtual ~StoreDeleteOp() = default;
-    };
-
-    StoreObject()
-      : state(),
-      bucket(nullptr),
-      attrs()
-      {}
+    StoreObject() = default;
     StoreObject(const rgw_obj_key& _k)
-      : state(),
-      bucket(),
-      attrs()
-      { state.obj.key = _k; }
+    { state.obj.key = _k; }
     StoreObject(const rgw_obj_key& _k, Bucket* _b)
-      : state(),
-      bucket(_b),
-      attrs()
-      { state.obj.init(_b->get_key(), _k); }
-    StoreObject(StoreObject& _o) = default;
+      : bucket(_b)
+    { state.obj.init(_b->get_key(), _k); }
+    StoreObject(const StoreObject& _o) = default;
 
     virtual ~StoreObject() = default;