if (pool < 0) {
ss << "unrecognized pool '" << m->cmd[3] << "'";
err = -ENOENT;
+ } else if (osdmap.lookup_pg_pool_name(m->cmd[4].c_str()) >= 0) {
+ ss << "pool '" << m->cmd[4] << "' already exists";
+ err = -EEXIST;
} else {
int ret = _prepare_rename_pool(pool, m->cmd[4]);
if (ret == 0) {
ss << "pool '" << m->cmd[3] << "' renamed to '" << m->cmd[4] << "'";
- getline(ss, rs);
- paxos->wait_for_commit(new Monitor::C_Command(mon, m, ret, rs, paxos->get_version()));
- return true;
+ } else {
+ ss << "failed to rename pool '" << m->cmd[3] << "' to '" << m->cmd[4] << "': "
+ << cpp_strerror(ret);
}
+ getline(ss, rs);
+ paxos->wait_for_commit(new Monitor::C_Command(mon, m, ret, rs, paxos->get_version()));
+ return true;
}
} else if (m->cmd[2] == "set") {
if (m->cmd.size() != 6) {
dout(10) << "_prepare_rename_pool " << pool << " pending removal" << dendl;
return -ENOENT;
}
+ for (map<int64_t,string>::iterator p = pending_inc.new_pool_names.begin();
+ p != pending_inc.new_pool_names.end();
+ ++p) {
+ if (p->second == newname) {
+ return -EEXIST;
+ }
+ }
pending_inc.new_pool_names[pool] = newname;
return 0;