"name=sure,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \
"set provided feature on mon map", \
"mon", "rw", "cli,rest")
+COMMAND("mon set-rank " \
+ "name=name,type=CephString " \
+ "name=rank,type=CephInt",
+ "set the rank for the specified mon",
+ "mon", "rw", "cli,rest")
/*
* OSD commands
calc_addr_mons();
}
+ int set_rank(const string& name, int rank) {
+ int oldrank = get_rank(name);
+ if (oldrank < 0) {
+ return -ENOENT;
+ }
+ if (rank < 0 || rank >= (int)ranks.size()) {
+ return -EINVAL;
+ }
+ if (oldrank != rank) {
+ ranks.erase(ranks.begin() + oldrank);
+ ranks.insert(ranks.begin() + rank, name);
+ }
+ return 0;
+ }
+
bool contains(const string& name) const {
return mon_info.count(name);
}
<< "persistent = " << pending_map.persistent_features
// output optional nevertheless, for auditing purposes.
<< ", optional = " << pending_map.optional_features << dendl;
-
+
+ } else if (prefix == "mon set-rank") {
+ string name;
+ int64_t rank;
+ if (!cmd_getval(g_ceph_context, cmdmap, "name", name) ||
+ !cmd_getval(g_ceph_context, cmdmap, "rank", rank)) {
+ err = -EINVAL;
+ goto reply;
+ }
+ int oldrank = pending_map.get_rank(name);
+ if (oldrank < 0) {
+ ss << "mon." << name << " does not exist in monmap";
+ err = -ENOENT;
+ goto reply;
+ }
+ err = 0;
+ pending_map.set_rank(name, rank);
+ pending_map.last_changed = ceph_clock_now();
+ propose = true;
} else {
ss << "unknown command " << prefix;
err = -EINVAL;