Track last_clean_pgs on a per-pool basis

rm-left-on-dead
Vitaliy Filippov 2023-01-03 02:17:47 +03:00
parent 02e7be7dc9
commit 41add50e4e
1 changed files with 8 additions and 4 deletions

View File

@ -663,12 +663,15 @@ class Mon
async save_last_clean() async save_last_clean()
{ {
// last_clean_pgs is used to avoid extra data move when observing a series of changes in the cluster // last_clean_pgs is used to avoid extra data move when observing a series of changes in the cluster
const new_clean_pgs = { items: {} };
next_pool:
for (const pool_id in this.state.config.pools) for (const pool_id in this.state.config.pools)
{ {
new_clean_pgs.items[pool_id] = (this.state.history.last_clean_pgs.items||{})[pool_id];
const pool_cfg = this.state.config.pools[pool_id]; const pool_cfg = this.state.config.pools[pool_id];
if (!this.validate_pool_cfg(pool_id, pool_cfg, false)) if (!this.validate_pool_cfg(pool_id, pool_cfg, false))
{ {
continue; continue next_pool;
} }
for (let pg_num = 1; pg_num <= pool_cfg.pg_count; pg_num++) for (let pg_num = 1; pg_num <= pool_cfg.pg_count; pg_num++)
{ {
@ -677,17 +680,18 @@ class Mon
!(this.state.pg.state[pool_id][pg_num].state instanceof Array)) !(this.state.pg.state[pool_id][pg_num].state instanceof Array))
{ {
// Unclean // Unclean
return; continue next_pool;
} }
let st = this.state.pg.state[pool_id][pg_num].state.join(','); let st = this.state.pg.state[pool_id][pg_num].state.join(',');
if (st != 'active' && st != 'active,left_on_dead' && st != 'left_on_dead,active') if (st != 'active' && st != 'active,left_on_dead' && st != 'left_on_dead,active')
{ {
// Unclean // Unclean
return; continue next_pool;
} }
} }
new_clean_pgs.items[pool_id] = this.state.config.pgs.items[pool_id];
} }
this.state.history.last_clean_pgs = JSON.parse(JSON.stringify(this.state.config.pgs)); this.state.history.last_clean_pgs = new_clean_pgs;
await this.etcd_call('/kv/txn', { await this.etcd_call('/kv/txn', {
success: [ { requestPut: { success: [ { requestPut: {
key: b64(this.etcd_prefix+'/history/last_clean_pgs'), key: b64(this.etcd_prefix+'/history/last_clean_pgs'),