From: Soumya Koduri Date: Sat, 8 Apr 2023 12:23:24 +0000 (+0530) Subject: rgw: Disable logging for datalog and bilog if zone doesn't export data X-Git-Tag: v19.0.0~1283^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=85f0cb592aa0d755c101d2e2845ad736a7697e3e;p=ceph.git 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 --- diff --git a/src/rgw/driver/rados/rgw_bucket_sync.cc b/src/rgw/driver/rados/rgw_bucket_sync.cc index dc375b2aa7fb..6ff76c16a907 100644 --- a/src/rgw/driver/rados/rgw_bucket_sync.cc +++ b/src/rgw/driver/rados/rgw_bucket_sync.cc @@ -999,6 +999,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 bd487989370b..1f4f3693d07e 100644 --- a/src/rgw/driver/rados/rgw_rados.cc +++ b/src/rgw/driver/rados/rgw_rados.cc @@ -7072,7 +7072,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) { @@ -7119,7 +7119,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) { @@ -8486,7 +8486,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; @@ -8522,10 +8522,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 */ @@ -9332,7 +9332,7 @@ int RGWRados::check_disk_state(const DoutPrefixProvider *dpp, ldout_bitx(bitx, dpp, 10) << "ENTERING " << __func__ << ": bucket=" << bucket_info.bucket << " dir_entry=" << list_state.key << dendl_bitx; - 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; @@ -9548,7 +9548,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 0476bc8f7081..3f810d7acd24 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