From 47956475dea8bb8e07331dd76344a60b776b5158 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 18 Jan 2017 17:02:54 -0600 Subject: [PATCH] mon/OSDMonitor: make 'osd crush move ...' work on osds Currently it only allows you to move buckets, which is annoying and much less useful. To move an OSD you need to use create-or-move, which is harder to use. Fixes: http://tracker.ceph.com/issues/18587 Signed-off-by: Sage Weil --- qa/workunits/mon/crush_ops.sh | 9 +++++++-- src/mon/OSDMonitor.cc | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/qa/workunits/mon/crush_ops.sh b/qa/workunits/mon/crush_ops.sh index adb3162038cb..80c58ca75226 100755 --- a/qa/workunits/mon/crush_ops.sh +++ b/qa/workunits/mon/crush_ops.sh @@ -74,11 +74,16 @@ ceph osd crush rm foo ceph osd crush rm osd.$o2 host2 ceph osd crush rm host2 +ceph osd crush add-bucket foo host +ceph osd crush move foo root=default rack=localrack + +ceph osd crush create-or-move osd.$o1 1.0 root=default +ceph osd crush move osd.$o1 host=foo +ceph osd find osd.$o1 | grep host | grep foo + ceph osd crush rm osd.$o1 ceph osd crush rm osd.$o2 -ceph osd crush add-bucket foo host -ceph osd crush move foo root=default rack=localrack ceph osd crush rm foo # test reweight diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 970e0cdb786f..c8d46f26ae9e 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -5933,7 +5933,11 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, int id = newcrush.get_item_id(name); if (!newcrush.check_item_loc(g_ceph_context, id, loc, (int *)NULL)) { - err = newcrush.move_bucket(g_ceph_context, id, loc); + if (id >= 0) { + err = newcrush.create_or_move_item(g_ceph_context, id, 0, name, loc); + } else { + err = newcrush.move_bucket(g_ceph_context, id, loc); + } if (err >= 0) { ss << "moved item id " << id << " name '" << name << "' to location " << loc << " in crush map"; pending_inc.crush.clear(); -- 2.47.3