Skip to content

Commit

Permalink
mon/OSDMonitor: make 'osd crush move ...' work on osds
Browse files Browse the repository at this point in the history
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 <sage@redhat.com>
(cherry picked from commit 4795647)
  • Loading branch information
liewegas authored and shinobu-x committed Feb 17, 2017
1 parent ce8edcf commit 177141f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
9 changes: 7 additions & 2 deletions qa/workunits/mon/crush_ops.sh
Expand Up @@ -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
Expand Down
6 changes: 5 additions & 1 deletion src/mon/OSDMonitor.cc
Expand Up @@ -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();
Expand Down

0 comments on commit 177141f

Please sign in to comment.