Fix PG lock auto-enabling/auto-disabling in the default configuration
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user