From: Sage Weil Date: Thu, 26 May 2011 20:17:12 +0000 (-0700) Subject: mon: remove pg_temp mappings when we delete pools X-Git-Tag: v0.29~28 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=22082c4f7c9c5dabe92dffe9ce5f10044dab31af;p=ceph.git mon: remove pg_temp mappings when we delete pools Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index fcb90311b3b9..6ccaeefe4acd 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1695,7 +1695,7 @@ bool OSDMonitor::prepare_command(MMonCommand *m) ss << "unrecognized pool '" << m->cmd[3] << "'"; err = -ENOENT; } else { - pending_inc.old_pools.insert(pool); + _prepare_remove_pool(pool); ss << "pool '" << m->cmd[3] << "' deleted"; getline(ss, rs); paxos->wait_for_commit(new Monitor::C_Command(mon, m, 0, rs, paxos->get_version())); @@ -1983,9 +1983,24 @@ bool OSDMonitor::prepare_pool_op_create(MPoolOp *m) return true; } +void OSDMonitor::_prepare_remove_pool(int pool) +{ + dout(10) << "_prepare_remove_pool " << pool << dendl; + pending_inc.old_pools.insert(pool); + // remove any pg_temp mappings for this pool too + for (map >::iterator p = osdmap.pg_temp.begin(); + p != osdmap.pg_temp.end(); + ++p) + if (p->first.pool() == pool) { + dout(10) << "_prepare_remove_pool " << pool << " removing obsolete pg_temp " + << p->first << dendl; + pending_inc.new_pg_temp[p->first].clear(); + } +} + bool OSDMonitor::prepare_pool_op_delete(MPoolOp *m) { - pending_inc.old_pools.insert(m->pool); + _prepare_remove_pool(m->pool); paxos->wait_for_commit(new OSDMonitor::C_PoolOp(this, m, 0, pending_inc.epoch)); return true; } diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 1016fab37338..126b50132cb3 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -89,6 +89,8 @@ private: bool preprocess_pgtemp(class MOSDPGTemp *m); bool prepare_pgtemp(class MOSDPGTemp *m); + void _prepare_remove_pool(int pool); + bool preprocess_pool_op ( class MPoolOp *m); bool preprocess_pool_op_create ( class MPoolOp *m); bool prepare_pool_op (MPoolOp *m);