}
}
else if (m->cmd.size() >= 5 && m->cmd[2] == "rmsnap") {
- int64_t pool = osdmap.lookup_pg_pool_name(m->cmd[3].c_str());
+ const string& poolstr = m->cmd[3].c_str();
+ int64_t pool = osdmap.lookup_pg_pool_name(poolstr);
if (pool < 0) {
- ss << "unrecognized pool '" << m->cmd[3] << "'";
+ ss << "unrecognized pool '" << poolstr << "'";
err = -ENOENT;
+ goto out;
+ }
+ const string& snapname = m->cmd[4];
+ 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 out;
+ }
+ 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];
- const string& snapname = m->cmd[4];
- if (!p->snap_exists(snapname.c_str()) &&
- (!pp || !pp->snap_exists(snapname.c_str()))) {
- ss << "pool " << m->cmd[3] << " snap " << snapname << " does not exists";
- 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 " << m->cmd[3] << " snap " << snapname;
- getline(ss, rs);
- wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_version()));
- 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 (m->cmd[2] == "create" && m->cmd.size() >= 3) {
if (m->cmd.size() < 5) {