From: Sage Weil Date: Wed, 17 Jul 2013 00:08:23 +0000 (-0700) Subject: mon/OSDMonitor: make 'osd pool mksnap ...' not expose uncommitted state X-Git-Tag: v0.67-rc1~44 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d1501938f5d07c067d908501fc5cfe3c857d7281;p=ceph.git mon/OSDMonitor: make 'osd pool mksnap ...' not expose uncommitted state We were returning success without waiting if the pending pool state had the snap. Signed-off-by: Sage Weil Reviewed-by: Joao Eduardo Luis --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index dbd3db6240a3..c8baac58c83b 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3316,30 +3316,33 @@ done: if (pool < 0) { ss << "unrecognized pool '" << poolstr << "'"; err = -ENOENT; + goto reply; + } + string snapname; + cmd_getval(g_ceph_context, cmdmap, "snap", snapname); + const pg_pool_t *p = osdmap.get_pg_pool(pool); + if (p->snap_exists(snapname.c_str())) { + ss << "pool " << poolstr << " snap " << snapname << " already exists"; + err = 0; + goto reply; + } + pg_pool_t *pp = 0; + if (pending_inc.new_pools.count(pool)) + pp = &pending_inc.new_pools[pool]; + if (!pp) { + pp = &pending_inc.new_pools[pool]; + *pp = *p; + } + if (pp->snap_exists(snapname.c_str())) { + ss << "pool " << poolstr << " snap " << snapname << " already exists"; } else { - const pg_pool_t *p = osdmap.get_pg_pool(pool); - pg_pool_t *pp = 0; - if (pending_inc.new_pools.count(pool)) - pp = &pending_inc.new_pools[pool]; - string snapname; - cmd_getval(g_ceph_context, cmdmap, "snap", snapname); - if (p->snap_exists(snapname.c_str()) || - (pp && pp->snap_exists(snapname.c_str()))) { - ss << "pool " << poolstr << " snap " << snapname << " already exists"; - err = 0; - } else { - if (!pp) { - pp = &pending_inc.new_pools[pool]; - *pp = *p; - } - pp->add_snap(snapname.c_str(), ceph_clock_now(g_ceph_context)); - pp->set_snap_epoch(pending_inc.epoch); - ss << "created pool " << poolstr << " snap " << snapname; - getline(ss, rs); - wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed())); - return true; - } + pp->add_snap(snapname.c_str(), ceph_clock_now(g_ceph_context)); + pp->set_snap_epoch(pending_inc.epoch); + ss << "created pool " << poolstr << " snap " << snapname; } + getline(ss, rs); + wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed())); + return true; } else if (prefix == "osd pool rmsnap") { string poolstr; cmd_getval(g_ceph_context, cmdmap, "pool", poolstr);