From: Casey Bodley Date: Sat, 18 Feb 2023 20:19:34 +0000 (-0500) Subject: rgw/sal: StoreObject doesn't store separate attrs X-Git-Tag: v18.1.0~7^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=14230ec244c27426fafca81bc356b8ebf9889835;p=ceph-ci.git rgw/sal: StoreObject doesn't store separate attrs use RGWObjState::attrset instead Signed-off-by: Casey Bodley (cherry picked from commit ad878f6c26424efa1017c8f861ece21b6b7d7704) --- diff --git a/src/rgw/driver/rados/rgw_sal_rados.cc b/src/rgw/driver/rados/rgw_sal_rados.cc index 49be08fcb49..67b600b472e 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.cc +++ b/src/rgw/driver/rados/rgw_sal_rados.cc @@ -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() diff --git a/src/rgw/rgw_sal_dbstore.cc b/src/rgw/rgw_sal_dbstore.cc index 1019b7ef817..ba7da28ca5a 100644 --- a/src/rgw/rgw_sal_dbstore.cc +++ b/src/rgw/rgw_sal_dbstore.cc @@ -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) diff --git a/src/rgw/rgw_sal_store.h b/src/rgw/rgw_sal_store.h index c7c5f5ae611..55b43e3d90b 100644 --- a/src/rgw/rgw_sal_store.h +++ b/src/rgw/rgw_sal_store.h @@ -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;