From 177141ff1745e93996875b7d8d72af6f00307731 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 (cherry picked from commit 47956475dea8bb8e07331dd76344a60b776b5158) --- 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 22732e2ef265..d4fb864f3929 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -5937,7 +5937,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