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 << " does not exist";
+ 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;
+ }
+ snapid_t sn = pp->snap_exists(snapname.c_str());
+ if (sn) {
+ pp->remove_snap(sn);
+ pp->set_snap_epoch(pending_inc.epoch);
+ ss << "removed pool " << poolstr << " snap " << snapname;
} 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 << " does not exist";
- err = 0;
- } else {
- if (!pp) {
- pp = &pending_inc.new_pools[pool];
- *pp = *p;
- }
- snapid_t sn = pp->snap_exists(snapname.c_str());
- pp->remove_snap(sn);
- pp->set_snap_epoch(pending_inc.epoch);
- ss << "removed pool " << poolstr << " snap " << snapname;
- getline(ss, rs);
- wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_last_committed()));
- return true;
- }
+ ss << "already removed 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 create") {
int64_t pg_num;
int64_t pgp_num;