From 8d2a1f02976e7308637fef7b7ffa3eea65b8b427 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Thu, 5 Jun 2025 02:06:05 +0300 Subject: [PATCH] Fix PG lock auto-enabling/auto-disabling in the default configuration --- src/osd/osd_cluster.cpp | 8 ++++---- src/osd/osd_secondary.cpp | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/osd/osd_cluster.cpp b/src/osd/osd_cluster.cpp index 56ce3efa..fe59b2b7 100644 --- a/src/osd/osd_cluster.cpp +++ b/src/osd/osd_cluster.cpp @@ -434,8 +434,8 @@ void osd_t::apply_pg_locks_localize_only() auto & pg = pp.second; auto old_disable_pg_locks = pg.disable_pg_locks; pg.disable_pg_locks = pg_locks_localize_only && - pool_cfg.scheme == POOL_SCHEME_REPLICATED && - pool_cfg.local_reads == POOL_LOCAL_READ_PRIMARY; + (pool_cfg.scheme != POOL_SCHEME_REPLICATED || + pool_cfg.local_reads == POOL_LOCAL_READ_PRIMARY); if (!pg.disable_pg_locks && old_disable_pg_locks) { // Relock PG @@ -884,8 +884,8 @@ void osd_t::apply_pg_config() pg.next_scrub = pg_cfg.next_scrub; pg.target_set = pg_cfg.target_set; pg.disable_pg_locks = pg_locks_localize_only && - pool_item.second.scheme == POOL_SCHEME_REPLICATED && - pool_item.second.local_reads == POOL_LOCAL_READ_PRIMARY; + (pool_item.second.scheme != POOL_SCHEME_REPLICATED || + pool_item.second.local_reads == POOL_LOCAL_READ_PRIMARY); if (pg.scheme == POOL_SCHEME_EC) { use_ec(pg.pg_size, pg.pg_data_size, true); diff --git a/src/osd/osd_secondary.cpp b/src/osd/osd_secondary.cpp index 5fcb5638..4aef7cb3 100644 --- a/src/osd/osd_secondary.cpp +++ b/src/osd/osd_secondary.cpp @@ -91,16 +91,17 @@ bool osd_t::sec_check_pg_lock(osd_num_t primary_osd, const object_id &oid) { return false; } + auto & pool_cfg = pool_cfg_it->second; + if (pg_locks_localize_only && (pool_cfg.scheme != POOL_SCHEME_REPLICATED || pool_cfg.local_reads == POOL_LOCAL_READ_PRIMARY)) + { + return true; + } auto ppg = (pool_pg_num_t){ .pool_id = pool_id, .pg_num = map_to_pg(oid, pool_cfg_it->second.pg_stripe_size) }; auto pg_it = pgs.find(ppg); if (pg_it != pgs.end() && pg_it->second.state != PG_OFFLINE) { return false; } - if (pg_it->second.disable_pg_locks) - { - return true; - } auto lock_it = pg_locks.find(ppg); return lock_it != pg_locks.end() && lock_it->second.primary_osd == primary_osd; }