Fix PG lock auto-enabling/auto-disabling in the default configuration

This commit is contained in:
Vitaliy Filippov
2025-06-05 02:22:01 +03:00
parent 91cbc313c2
commit 8d2a1f0297
2 changed files with 9 additions and 8 deletions
+4 -4
View File
@@ -434,8 +434,8 @@ void osd_t::apply_pg_locks_localize_only()
auto & pg = pp.second; auto & pg = pp.second;
auto old_disable_pg_locks = pg.disable_pg_locks; auto old_disable_pg_locks = pg.disable_pg_locks;
pg.disable_pg_locks = pg_locks_localize_only && pg.disable_pg_locks = pg_locks_localize_only &&
pool_cfg.scheme == POOL_SCHEME_REPLICATED && (pool_cfg.scheme != POOL_SCHEME_REPLICATED ||
pool_cfg.local_reads == POOL_LOCAL_READ_PRIMARY; pool_cfg.local_reads == POOL_LOCAL_READ_PRIMARY);
if (!pg.disable_pg_locks && old_disable_pg_locks) if (!pg.disable_pg_locks && old_disable_pg_locks)
{ {
// Relock PG // Relock PG
@@ -884,8 +884,8 @@ void osd_t::apply_pg_config()
pg.next_scrub = pg_cfg.next_scrub; pg.next_scrub = pg_cfg.next_scrub;
pg.target_set = pg_cfg.target_set; pg.target_set = pg_cfg.target_set;
pg.disable_pg_locks = pg_locks_localize_only && pg.disable_pg_locks = pg_locks_localize_only &&
pool_item.second.scheme == POOL_SCHEME_REPLICATED && (pool_item.second.scheme != POOL_SCHEME_REPLICATED ||
pool_item.second.local_reads == POOL_LOCAL_READ_PRIMARY; pool_item.second.local_reads == POOL_LOCAL_READ_PRIMARY);
if (pg.scheme == POOL_SCHEME_EC) if (pg.scheme == POOL_SCHEME_EC)
{ {
use_ec(pg.pg_size, pg.pg_data_size, true); use_ec(pg.pg_size, pg.pg_data_size, true);
+5 -4
View File
@@ -91,16 +91,17 @@ bool osd_t::sec_check_pg_lock(osd_num_t primary_osd, const object_id &oid)
{ {
return false; 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 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); auto pg_it = pgs.find(ppg);
if (pg_it != pgs.end() && pg_it->second.state != PG_OFFLINE) if (pg_it != pgs.end() && pg_it->second.state != PG_OFFLINE)
{ {
return false; return false;
} }
if (pg_it->second.disable_pg_locks)
{
return true;
}
auto lock_it = pg_locks.find(ppg); auto lock_it = pg_locks.find(ppg);
return lock_it != pg_locks.end() && lock_it->second.primary_osd == primary_osd; return lock_it != pg_locks.end() && lock_it->second.primary_osd == primary_osd;
} }