From 05dac04ba07d7f2789d86cb7891f3ee26eb0591d Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 20 Mar 2013 07:02:20 -0700 Subject: [PATCH] mon: 'ceph osd crush add ...' to add a second link to an item Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 15 +++++++++++---- src/test/cli/ceph/help.t | 1 + src/tools/ceph.cc | 1 + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 8c4d1a43c7771..47c6c1d8f6922 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2256,7 +2256,8 @@ bool OSDMonitor::prepare_command(MMonCommand *m) wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_version())); return true; } - else if (m->cmd.size() >= 5 && m->cmd[1] == "crush" && m->cmd[2] == "set") { + else if (m->cmd.size() >= 5 && m->cmd[1] == "crush" && (m->cmd[2] == "set" || + m->cmd[2] == "add")) { do { // osd crush set [] [ ...] int id = parse_osd_id(m->cmd[3].c_str(), &ss); @@ -2297,16 +2298,22 @@ bool OSDMonitor::prepare_command(MMonCommand *m) bufferlist::iterator p = bl.begin(); newcrush.decode(p); - err = newcrush.update_item(g_ceph_context, id, weight, name, loc); + if (m->cmd[2] == "set") { + err = newcrush.update_item(g_ceph_context, id, weight, name, loc); + } else { + err = newcrush.insert_item(g_ceph_context, id, weight, name, loc); + if (err == 0) + err = 1; + } if (err == 0) { - ss << "updated item id " << id << " name '" << name << "' weight " << weight + ss << m->cmd[2] << " item id " << id << " name '" << name << "' weight " << weight << " at location " << loc << " to crush map"; break; } if (err > 0) { pending_inc.crush.clear(); newcrush.encode(pending_inc.crush); - ss << "updated item id " << id << " name '" << name << "' weight " << weight + ss << m->cmd[2] << " item id " << id << " name '" << name << "' weight " << weight << " at location " << loc << " to crush map"; getline(ss, rs); wait_for_finished_proposal(new Monitor::C_Command(mon, m, 0, rs, get_version())); diff --git a/src/test/cli/ceph/help.t b/src/test/cli/ceph/help.t index c2f9e2158bf96..ca93dba39c432 100644 --- a/src/test/cli/ceph/help.t +++ b/src/test/cli/ceph/help.t @@ -45,6 +45,7 @@ ceph osd getcrushmap -o ceph osd getmap -o ceph osd crush set [ ...] + ceph osd crush add [ ...] ceph osd crush move [ ...] ceph osd crush create-or-move [ ...] ceph osd crush reweight diff --git a/src/tools/ceph.cc b/src/tools/ceph.cc index d17c2426c94df..f93d445d61224 100644 --- a/src/tools/ceph.cc +++ b/src/tools/ceph.cc @@ -88,6 +88,7 @@ static void usage() cout << " ceph osd getcrushmap -o \n"; cout << " ceph osd getmap -o \n"; cout << " ceph osd crush set [ ...]\n"; + cout << " ceph osd crush add [ ...]\n"; cout << " ceph osd crush move [ ...]\n"; cout << " ceph osd crush create-or-move [ ...]\n"; cout << " ceph osd crush reweight \n"; -- 2.39.5