WIP Use random_hier_combinations
This commit is contained in:
+38
-2
@@ -159,6 +159,10 @@ const etcd_tree = {
|
||||
// number of parity chunks, required for EC
|
||||
parity_chunks?: 1,
|
||||
pg_count: 100,
|
||||
// failure_domain = string | { string: int }
|
||||
// the second case specifies multiple failure domains. example:
|
||||
// { datacenter: 3, host: 2 } - means 3 datacenters with 2 hosts each, for EC 4+2
|
||||
// guarantees availability on outage of either 1 datacenter or 2 hosts
|
||||
failure_domain: 'host',
|
||||
max_osd_combinations: 10000,
|
||||
// block_size, bitmap_granularity, immediate_commit must match all OSDs used in that pool
|
||||
@@ -1027,6 +1031,32 @@ class Mon
|
||||
pool_cfg.parity_chunks = Math.floor(pool_cfg.parity_chunks) || undefined;
|
||||
pool_cfg.pg_count = Math.floor(pool_cfg.pg_count);
|
||||
pool_cfg.failure_domain = pool_cfg.failure_domain || 'host';
|
||||
if (pool_cfg.failure_domain instanceof Object)
|
||||
{
|
||||
for (const key in pool_cfg.failure_domain)
|
||||
{
|
||||
const cnt = parseInt(pool_cfg.failure_domain[key]);
|
||||
if (!cnt || cnt <= 0)
|
||||
{
|
||||
if (warn)
|
||||
console.log('Pool '+pool_id+' specifies invalid item count for failure domain \"'+key+'\"');
|
||||
return false;
|
||||
}
|
||||
if (key !== 'host' && key != 'osd' && !(key in this.config.placement_levels||{}))
|
||||
{
|
||||
if (warn)
|
||||
console.log('Pool '+pool_id+' uses invalid failure domain \"'+key+'\"');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (pool_cfg.failure_domain !== 'host' && pool_cfg.failure_domain != 'osd' &&
|
||||
!(pool_cfg.failure_domain in this.config.placement_levels||{}))
|
||||
{
|
||||
if (warn)
|
||||
console.log('Pool '+pool_id+' uses invalid failure domain \"'+pool_cfg.failure_domain+'\"');
|
||||
return false;
|
||||
}
|
||||
pool_cfg.max_osd_combinations = Math.floor(pool_cfg.max_osd_combinations) || 10000;
|
||||
if (!/^[1-9]\d*$/.exec(''+pool_id))
|
||||
{
|
||||
@@ -1188,7 +1218,10 @@ class Mon
|
||||
continue;
|
||||
}
|
||||
let pool_tree = osd_tree[pool_cfg.root_node || ''] || {};
|
||||
pool_tree = LPOptimizer.extract_tree_levels(pool_tree, [ pool_cfg.failure_domain, 'osd' ], levels);
|
||||
const failure_domains = pool_cfg.failure_domain instanceof Object
|
||||
? [ ...Object.keys(pool_cfg.failure_domain), 'osd' ]
|
||||
: [ pool_cfg.failure_domain, 'osd' ];
|
||||
pool_tree = LPOptimizer.extract_tree_levels(pool_tree, failure_domains, levels);
|
||||
this.filter_osds_by_tags(osd_tree, pool_tree, pool_cfg.osd_tags);
|
||||
// These are for the purpose of building history.osd_sets
|
||||
const real_prev_pgs = [];
|
||||
@@ -1215,6 +1248,9 @@ class Mon
|
||||
pg_count: pool_cfg.pg_count,
|
||||
pg_size: pool_cfg.pg_size,
|
||||
pg_minsize: pool_cfg.pg_minsize,
|
||||
hier_sizes: pool_cfg.failure_domain instanceof Object
|
||||
? [ ...Object.values(pool_cfg.failure_domain), 1 ]
|
||||
: null,
|
||||
max_combinations: pool_cfg.max_osd_combinations,
|
||||
ordered: pool_cfg.scheme != 'replicated',
|
||||
};
|
||||
@@ -1270,7 +1306,7 @@ class Mon
|
||||
} });
|
||||
}
|
||||
LPOptimizer.print_change_stats(optimize_result);
|
||||
const pg_effsize = Math.min(pool_cfg.pg_size, Object.keys(pool_tree).length);
|
||||
const pg_effsize = Math.min(pool_cfg.pg_size, Object.keys(pool_tree).length); // FIXME requires hier support too
|
||||
this.state.pool.stats[pool_id] = {
|
||||
used_raw_tb: (this.state.pool.stats[pool_id]||{}).used_raw_tb || 0,
|
||||
total_raw_tb: optimize_result.space,
|
||||
|
||||
Reference in New Issue
Block a user