From 6bf46083946bf795130e14754411529774ec380a Mon Sep 17 00:00:00 2001 From: Jiffin Tony Thottan Date: Wed, 30 Oct 2024 19:44:43 +0530 Subject: [PATCH] rgw/cloudtier : disable sync for cloud tier objects Also modified the modify_obj_attr api to include flags similar to set_obj_attrs Signed-off-by: Jiffin Tony Thottan --- src/rgw/driver/d4n/rgw_sal_d4n.cc | 4 ++-- src/rgw/driver/d4n/rgw_sal_d4n.h | 3 ++- src/rgw/driver/daos/rgw_sal_daos.cc | 2 +- src/rgw/driver/daos/rgw_sal_daos.h | 3 ++- src/rgw/driver/motr/rgw_sal_motr.cc | 4 ++-- src/rgw/driver/motr/rgw_sal_motr.h | 3 ++- src/rgw/driver/posix/rgw_sal_posix.cc | 2 +- src/rgw/driver/posix/rgw_sal_posix.h | 3 ++- src/rgw/driver/rados/rgw_rados.cc | 4 ++++ src/rgw/driver/rados/rgw_sal_rados.cc | 10 +++++----- src/rgw/driver/rados/rgw_sal_rados.h | 3 ++- src/rgw/rgw_sal.h | 3 ++- src/rgw/rgw_sal_dbstore.cc | 4 ++-- src/rgw/rgw_sal_dbstore.h | 3 ++- src/rgw/rgw_sal_filter.cc | 4 ++-- src/rgw/rgw_sal_filter.h | 3 ++- 16 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.cc b/src/rgw/driver/d4n/rgw_sal_d4n.cc index 712cebbfc051f..65145fb833bfb 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.cc +++ b/src/rgw/driver/d4n/rgw_sal_d4n.cc @@ -206,7 +206,7 @@ int D4NFilterObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* d } int D4NFilterObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, - optional_yield y, const DoutPrefixProvider* dpp) + optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags) { Attrs update; update[(std::string)attr_name] = attr_val; @@ -214,7 +214,7 @@ int D4NFilterObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_va if (driver->get_cache_driver()->update_attrs(dpp, this->get_key().get_oid(), update, y) < 0) ldpp_dout(dpp, 10) << "D4NFilterObject::" << __func__ << "(): CacheDriver update_attrs method failed." << dendl; - return next->modify_obj_attrs(attr_name, attr_val, y, dpp); + return next->modify_obj_attrs(attr_name, attr_val, y, dpp, flags); } int D4NFilterObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, diff --git a/src/rgw/driver/d4n/rgw_sal_d4n.h b/src/rgw/driver/d4n/rgw_sal_d4n.h index e7d041d2a195a..2d852b33ecc37 100644 --- a/src/rgw/driver/d4n/rgw_sal_d4n.h +++ b/src/rgw/driver/d4n/rgw_sal_d4n.h @@ -183,7 +183,8 @@ class D4NFilterObject : public FilterObject { virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override; virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, - optional_yield y, const DoutPrefixProvider* dpp) override; + optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; virtual ceph::real_time get_mtime(void) const override { return next->get_mtime(); }; diff --git a/src/rgw/driver/daos/rgw_sal_daos.cc b/src/rgw/driver/daos/rgw_sal_daos.cc index 9cd8c352267ff..c27cf19703c38 100644 --- a/src/rgw/driver/daos/rgw_sal_daos.cc +++ b/src/rgw/driver/daos/rgw_sal_daos.cc @@ -930,7 +930,7 @@ int DaosObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, int DaosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, - const DoutPrefixProvider* dpp) { + const DoutPrefixProvider* dpp, uint32_t flags) { // Get object's metadata (those stored in rgw_bucket_dir_entry) ldpp_dout(dpp, 20) << "DEBUG: modify_obj_attrs" << dendl; rgw_bucket_dir_entry ent; diff --git a/src/rgw/driver/daos/rgw_sal_daos.h b/src/rgw/driver/daos/rgw_sal_daos.h index f7ab8a4e40e9e..84aaf5a60f332 100644 --- a/src/rgw/driver/daos/rgw_sal_daos.h +++ b/src/rgw/driver/daos/rgw_sal_daos.h @@ -625,7 +625,8 @@ class DaosObject : public StoreObject { rgw_obj* target_obj = NULL) override; virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, - const DoutPrefixProvider* dpp) override; + const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; diff --git a/src/rgw/driver/motr/rgw_sal_motr.cc b/src/rgw/driver/motr/rgw_sal_motr.cc index 98ddaf9dcb9d1..8361ecff83fa3 100644 --- a/src/rgw/driver/motr/rgw_sal_motr.cc +++ b/src/rgw/driver/motr/rgw_sal_motr.cc @@ -1224,7 +1224,7 @@ int MotrObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, r return 0; } -int MotrObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) +int MotrObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags) { rgw_obj target = get_obj(); int r = get_obj_attrs(y, dpp, &target); @@ -1233,7 +1233,7 @@ int MotrObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, op } set_atomic(); state.attrset[attr_name] = attr_val; - return set_obj_attrs(dpp, &state.attrset, nullptr, y, rgw::sal::FLAG_LOG_OP); + return set_obj_attrs(dpp, &state.attrset, nullptr, y, flags); } int MotrObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) diff --git a/src/rgw/driver/motr/rgw_sal_motr.h b/src/rgw/driver/motr/rgw_sal_motr.h index 19f66bf198612..2071d827e9508 100644 --- a/src/rgw/driver/motr/rgw_sal_motr.h +++ b/src/rgw/driver/motr/rgw_sal_motr.h @@ -680,7 +680,8 @@ class MotrObject : public StoreObject { virtual int load_obj_state(const DoutPrefixProvider* dpp, optional_yield y, bool follow_olh = true) override; virtual int set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattrs, Attrs* delattrs, optional_yield y, uint32_t flags) override; virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override; - virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) override; + virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; virtual bool is_expired() override; virtual void gen_rand_obj_instance_name() override; diff --git a/src/rgw/driver/posix/rgw_sal_posix.cc b/src/rgw/driver/posix/rgw_sal_posix.cc index 129be22b63283..205f9fb6c63a1 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.cc +++ b/src/rgw/driver/posix/rgw_sal_posix.cc @@ -2962,7 +2962,7 @@ int POSIXObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, } int POSIXObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, - optional_yield y, const DoutPrefixProvider* dpp) + optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags) { state.attrset[attr_name] = attr_val; return write_attrs(dpp, y); diff --git a/src/rgw/driver/posix/rgw_sal_posix.h b/src/rgw/driver/posix/rgw_sal_posix.h index ac3e17ca93f5e..0694381457466 100644 --- a/src/rgw/driver/posix/rgw_sal_posix.h +++ b/src/rgw/driver/posix/rgw_sal_posix.h @@ -668,7 +668,8 @@ public: virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override; virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, - optional_yield y, const DoutPrefixProvider* dpp) override; + optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; virtual bool is_expired() override; diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index 1e3ada948fe2d..94e7b2e5350a9 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -5377,6 +5377,9 @@ int RGWRados::restore_obj_from_cloud(RGWLCCloudTierCtx& tier_ctx, attrs[RGW_ATTR_CLOUD_TIER_CONFIG] = t_tier; } + // The temporary cloud restore object should not sync to other site + log_op = false; + } else { // permanent restore { bufferlist bl; @@ -5386,6 +5389,7 @@ int RGWRados::restore_obj_from_cloud(RGWLCCloudTierCtx& tier_ctx, attrs[RGW_ATTR_RESTORE_TYPE] = std::move(bl); ldpp_dout(dpp, 20) << "Permanent restore, object:" << dest_obj << dendl; } + log_op = true; } { diff --git a/src/rgw/driver/rados/rgw_sal_rados.cc b/src/rgw/driver/rados/rgw_sal_rados.cc index b648741d6e79b..54ccb75747c76 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.cc +++ b/src/rgw/driver/rados/rgw_sal_rados.cc @@ -2679,7 +2679,7 @@ int RadosObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, return read_attrs(dpp, read_op, y, target_obj); } -int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) +int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags) { rgw_obj target = get_obj(); rgw_obj save = get_obj(); @@ -2692,7 +2692,7 @@ int RadosObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, o state.obj = target; set_atomic(); state.attrset[attr_name] = attr_val; - r = set_obj_attrs(dpp, &state.attrset, nullptr, y, rgw::sal::FLAG_LOG_OP); + r = set_obj_attrs(dpp, &state.attrset, nullptr, y, flags); /* Restore target */ state.obj = save; @@ -3073,8 +3073,7 @@ int RadosObject::set_cloud_restore_status(const DoutPrefixProvider* dpp, bufferlist bl; using ceph::encode; encode(restore_status, bl); - - ret = modify_obj_attrs(RGW_ATTR_RESTORE_STATUS, bl, y, dpp); + ret = modify_obj_attrs(RGW_ATTR_RESTORE_STATUS, bl, y, dpp, false); return ret; } @@ -3161,7 +3160,7 @@ int RadosObject::handle_obj_expiry(const DoutPrefixProvider* dpp, optional_yield attrs[RGW_ATTR_INTERNAL_MTIME] = std::move(bl); } const req_context rctx{dpp, y, nullptr}; - return obj_op.write_meta(0, 0, attrs, rctx, head_obj->get_trace()); + return obj_op.write_meta(0, 0, attrs, rctx, head_obj->get_trace(), false); } catch (const buffer::end_of_buffer&) { // ignore empty manifest; it's not cloud-tiered } catch (const std::exception& e) { @@ -3250,6 +3249,7 @@ int RadosObject::write_cloud_tier(const DoutPrefixProvider* dpp, // erase restore attrs attrs.erase(RGW_ATTR_RESTORE_STATUS); attrs.erase(RGW_ATTR_RESTORE_TYPE); + attrs.erase(RGW_ATTR_RESTORE_TIME); attrs.erase(RGW_ATTR_RESTORE_EXPIRY_DATE); attrs.erase(RGW_ATTR_CLOUDTIER_STORAGE_CLASS); diff --git a/src/rgw/driver/rados/rgw_sal_rados.h b/src/rgw/driver/rados/rgw_sal_rados.h index ab53c66d0cc0f..01ef1f142a2ba 100644 --- a/src/rgw/driver/rados/rgw_sal_rados.h +++ b/src/rgw/driver/rados/rgw_sal_rados.h @@ -607,7 +607,8 @@ class RadosObject : public StoreObject { virtual int set_obj_attrs(const DoutPrefixProvider* dpp, Attrs* setattrs, Attrs* delattrs, optional_yield y, uint32_t flags) override; virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override; - virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) override; + virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; virtual bool is_expired() override; virtual void gen_rand_obj_instance_name() override; diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index 9838516cd0968..c76c28b401a51 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -1221,7 +1221,8 @@ class Object { /** Get attributes for this object */ virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) = 0; /** Modify attributes for this object. */ - virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) = 0; + virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) = 0; /** Delete attributes for this object */ virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) = 0; /** Check to see if this object has expired */ diff --git a/src/rgw/rgw_sal_dbstore.cc b/src/rgw/rgw_sal_dbstore.cc index 28a3e1b4901ec..945d72fa40dd4 100644 --- a/src/rgw/rgw_sal_dbstore.cc +++ b/src/rgw/rgw_sal_dbstore.cc @@ -544,7 +544,7 @@ namespace rgw::sal { return read_attrs(dpp, read_op, y, target_obj); } - int DBObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) + int DBObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags) { rgw_obj target = get_obj(); int r = get_obj_attrs(y, dpp, &target); @@ -553,7 +553,7 @@ namespace rgw::sal { } set_atomic(); state.attrset[attr_name] = attr_val; - return set_obj_attrs(dpp, &state.attrset, nullptr, y, rgw::sal::FLAG_LOG_OP); + return set_obj_attrs(dpp, &state.attrset, nullptr, y, flags); } int DBObject::delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) diff --git a/src/rgw/rgw_sal_dbstore.h b/src/rgw/rgw_sal_dbstore.h index 2530f3e9ff7b9..66fa83b813d6f 100644 --- a/src/rgw/rgw_sal_dbstore.h +++ b/src/rgw/rgw_sal_dbstore.h @@ -563,7 +563,8 @@ protected: virtual int load_obj_state(const DoutPrefixProvider* dpp, optional_yield y, bool follow_olh = true) override; virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override; - virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp) override; + virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; virtual bool is_expired() override; virtual void gen_rand_obj_instance_name() override; diff --git a/src/rgw/rgw_sal_filter.cc b/src/rgw/rgw_sal_filter.cc index 60fa37d3c8433..d20af0dca608e 100644 --- a/src/rgw/rgw_sal_filter.cc +++ b/src/rgw/rgw_sal_filter.cc @@ -1080,9 +1080,9 @@ int FilterObject::get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, } int FilterObject::modify_obj_attrs(const char* attr_name, bufferlist& attr_val, - optional_yield y, const DoutPrefixProvider* dpp) + optional_yield y, const DoutPrefixProvider* dpp, uint32_t flags) { - return next->modify_obj_attrs(attr_name, attr_val, y, dpp); + return next->modify_obj_attrs(attr_name, attr_val, y, dpp, flags); } int FilterObject::delete_obj_attrs(const DoutPrefixProvider* dpp, diff --git a/src/rgw/rgw_sal_filter.h b/src/rgw/rgw_sal_filter.h index 20278a6a10cf1..c9e7cc21f14b7 100644 --- a/src/rgw/rgw_sal_filter.h +++ b/src/rgw/rgw_sal_filter.h @@ -801,7 +801,8 @@ public: virtual int get_obj_attrs(optional_yield y, const DoutPrefixProvider* dpp, rgw_obj* target_obj = NULL) override; virtual int modify_obj_attrs(const char* attr_name, bufferlist& attr_val, - optional_yield y, const DoutPrefixProvider* dpp) override; + optional_yield y, const DoutPrefixProvider* dpp, + uint32_t flags = rgw::sal::FLAG_LOG_OP) override; virtual int delete_obj_attrs(const DoutPrefixProvider* dpp, const char* attr_name, optional_yield y) override; virtual bool is_expired() override; -- 2.39.5