From 2e411d53707986188e615b7f260e1a5a05bd8854 Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Sat, 8 Apr 2023 17:53:24 +0530 Subject: [PATCH] rgw: Disable logging for datalog and bilog if zone doesn't export data Zones (such as archive zone) which do not export data should have sync logging disabled. Fixes# https://tracker.ceph.com/issues/59106 Signed-off-by: Soumya Koduri (cherry picked from commit 85f0cb592aa0d755c101d2e2845ad736a7697e3e) --- src/rgw/driver/rados/rgw_bucket_sync.cc | 4 ++++ src/rgw/driver/rados/rgw_rados.cc | 14 +++++++------- src/rgw/services/svc_zone.cc | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/rgw/driver/rados/rgw_bucket_sync.cc b/src/rgw/driver/rados/rgw_bucket_sync.cc index 5fd81c53b1e76..48cdebfcada04 100644 --- a/src/rgw/driver/rados/rgw_bucket_sync.cc +++ b/src/rgw/driver/rados/rgw_bucket_sync.cc @@ -926,6 +926,10 @@ bool RGWBucketSyncPolicyHandler::bucket_exports_data() const return false; } + if (!zone_svc->sync_module_exports_data()) { + return false; + } + if (bucket_is_sync_source()) { return true; } diff --git a/src/rgw/driver/rados/rgw_rados.cc b/src/rgw/driver/rados/rgw_rados.cc index ec8e56377b838..e7744a43ebe1c 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -7076,7 +7076,7 @@ int RGWRados::bucket_index_link_olh(const DoutPrefixProvider *dpp, RGWBucketInfo cls_rgw_bucket_link_olh(op, key, olh_state.olh_tag, delete_marker, op_tag, meta, olh_epoch, unmod_since, high_precision_time, - svc.zone->get_zone().log_data, zones_trace); + svc.zone->need_to_log_data(), zones_trace); return rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, null_yield); }); if (r < 0) { @@ -7123,7 +7123,7 @@ int RGWRados::bucket_index_unlink_instance(const DoutPrefixProvider *dpp, op.assert_exists(); // bucket index shard must exist cls_rgw_guard_bucket_resharding(op, -ERR_BUSY_RESHARDING); cls_rgw_bucket_unlink_instance(op, key, op_tag, - olh_tag, olh_epoch, svc.zone->get_zone().log_data, zones_trace); + olh_tag, olh_epoch, svc.zone->need_to_log_data(), zones_trace); return rgw_rados_operate(dpp, ref.pool.ioctx(), ref.obj.oid, &op, null_yield); }); if (r < 0) { @@ -8488,7 +8488,7 @@ int RGWRados::cls_obj_prepare_op(const DoutPrefixProvider *dpp, BucketShard& bs, cls_rgw_obj_key key(obj.key.get_index_key_name(), obj.key.instance); cls_rgw_guard_bucket_resharding(o, -ERR_BUSY_RESHARDING); - cls_rgw_bucket_prepare_op(o, op, tag, key, obj.key.get_loc(), svc.zone->get_zone().log_data, bilog_flags, zones_trace); + cls_rgw_bucket_prepare_op(o, op, tag, key, obj.key.get_loc(), svc.zone->need_to_log_data(), bilog_flags, zones_trace); int ret = bs.bucket_obj.operate(dpp, &o, y); ldout_bitx(bitx, dpp, 10) << "EXITING " << __func__ << ": ret=" << ret << dendl_bitx; return ret; @@ -8524,10 +8524,10 @@ int RGWRados::cls_obj_complete_op(BucketShard& bs, const rgw_obj& obj, RGWModify cls_rgw_obj_key key(ent.key.name, ent.key.instance); cls_rgw_guard_bucket_resharding(o, -ERR_BUSY_RESHARDING); cls_rgw_bucket_complete_op(o, op, tag, ver, key, dir_meta, remove_objs, - svc.zone->get_zone().log_data, bilog_flags, &zones_trace); + svc.zone->need_to_log_data(), bilog_flags, &zones_trace); complete_op_data *arg; index_completion_manager->create_completion(obj, op, tag, ver, key, dir_meta, remove_objs, - svc.zone->get_zone().log_data, bilog_flags, &zones_trace, &arg); + svc.zone->need_to_log_data(), bilog_flags, &zones_trace, &arg); librados::AioCompletion *completion = arg->rados_completion; int ret = bs.bucket_obj.aio_operate(arg->rados_completion, &o); completion->release(); /* can't reference arg here, as it might have already been released */ @@ -9336,7 +9336,7 @@ int RGWRados::check_disk_state(const DoutPrefixProvider *dpp, std::unique_ptr bucket; driver->get_bucket(nullptr, bucket_info, &bucket); - uint8_t suggest_flag = (svc.zone->get_zone().log_data ? CEPH_RGW_DIR_SUGGEST_LOG_OP : 0); + uint8_t suggest_flag = (svc.zone->need_to_log_data() ? CEPH_RGW_DIR_SUGGEST_LOG_OP : 0); std::string loc; @@ -9551,7 +9551,7 @@ int RGWRados::check_bucket_shards(const RGWBucketInfo& bucket_info, cct->_conf.get_val("rgw_max_objs_per_shard"); // TODO: consider per-bucket sync policy here? - const bool is_multisite = svc.zone->get_zone().log_data; + const bool is_multisite = svc.zone->need_to_log_data(); quota_handler->check_bucket_shards(dpp, max_objs_per_shard, num_source_shards, num_objs, is_multisite, need_resharding, diff --git a/src/rgw/services/svc_zone.cc b/src/rgw/services/svc_zone.cc index 0476bc8f7081c..3f810d7acd245 100644 --- a/src/rgw/services/svc_zone.cc +++ b/src/rgw/services/svc_zone.cc @@ -720,7 +720,7 @@ bool RGWSI_Zone::need_to_sync() const bool RGWSI_Zone::need_to_log_data() const { - return zone_public_config->log_data; + return (zone_public_config->log_data && sync_module_exports_data()); } bool RGWSI_Zone::is_meta_master() const