From: Gu Zhongyan Date: Mon, 12 Mar 2018 03:41:32 +0000 (+0800) Subject: mon/OSDMonitor: clean up cmd 'osd tree-from' X-Git-Tag: v13.1.0~583^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b7075f659fdd636d23f5d319c15ead010ce2d404;p=ceph.git mon/OSDMonitor: clean up cmd 'osd tree-from' Handle 'bucket not exist' and 'not a bucket' case Signed-off-by: Gu Zhongyan --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index a67f6064049e..6a39698498e9 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3709,8 +3709,20 @@ bool OSDMonitor::preprocess_command(MonOpRequestRef op) rdata.append(ds); } else if (prefix == "osd tree" || prefix == "osd tree-from") { string bucket; - if (prefix == "osd tree-from") - cmd_getval(cct, cmdmap, "bucket", bucket); + if (prefix == "osd tree-from") { + cmd_getval(cct, cmdmap, "bucket", bucket); + if (!osdmap.crush->name_exists(bucket)) { + ss << "bucket '" << bucket << "' does not exist"; + r = -ENOENT; + goto reply; + } + int id = osdmap.crush->get_item_id(bucket); + if (id >= 0) { + ss << "\"" << bucket << "\" is not a bucket"; + r = -EINVAL; + goto reply; + } + } vector states; cmd_getval(cct, cmdmap, "states", states);