From 761f68dc0d261120d26a41d958e9688b3fed7057 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 15 Jun 2018 14:05:20 -0500 Subject: [PATCH] mon: destroy-new -> purge-new What we actually want is a purge, not a destroy. Destroy leaves the OSD ID in used and allows it to be recreated. What ceph-volume wants is to purge all trace of the failed OSD setup. Signed-off-by: Sage Weil --- qa/workunits/cephtool/test.sh | 6 +++--- src/mon/MonCap.cc | 2 +- src/mon/MonCommands.h | 7 +++---- src/mon/OSDMonitor.cc | 10 +++++----- 4 files changed, 12 insertions(+), 13 deletions(-) diff --git a/qa/workunits/cephtool/test.sh b/qa/workunits/cephtool/test.sh index e525df9452cb7..ac181ad3c3eb5 100755 --- a/qa/workunits/cephtool/test.sh +++ b/qa/workunits/cephtool/test.sh @@ -1334,7 +1334,7 @@ function test_mon_osd_create_destroy() expect_false ceph auth get-key client.osd-lockbox.$uuid2 expect_false ceph config-key exists dm-crypt/osd/$uuid2/luks - ceph osd destroy-new osd.$id2 --yes-i-really-mean-it + ceph osd destroy osd.$id2 --yes-i-really-mean-it ceph osd destroy $id2 --yes-i-really-mean-it ceph osd find $id2 expect_false ceph auth get-key osd.$id2 @@ -1348,13 +1348,13 @@ function test_mon_osd_create_destroy() ceph auth get-key osd.$id3 ceph config-key exists dm-crypt/osd/$uuid3/luks - ceph osd purge osd.$id3 --yes-i-really-mean-it + ceph osd purge-new osd.$id3 --yes-i-really-mean-it expect_false ceph osd find $id2 expect_false ceph auth get-key osd.$id2 expect_false ceph auth get-key client.osd-lockbox.$uuid3 expect_false ceph config-key exists dm-crypt/osd/$uuid3/luks ceph osd purge osd.$id3 --yes-i-really-mean-it - ceph osd purge osd.$id3 --yes-i-really-mean-it # idempotent + ceph osd purge-new osd.$id3 --yes-i-really-mean-it # idempotent ceph osd purge osd.$id --yes-i-really-mean-it ceph osd purge 123456 --yes-i-really-mean-it diff --git a/src/mon/MonCap.cc b/src/mon/MonCap.cc index bd813cfd61f00..05ceaaa97c497 100644 --- a/src/mon/MonCap.cc +++ b/src/mon/MonCap.cc @@ -217,7 +217,7 @@ void MonCapGrant::expand_profile_mon(const EntityName& name) const profile_grants.push_back(MonCapGrant("osd", MON_CAP_R)); // read osdmap profile_grants.push_back(MonCapGrant("mon getmap")); profile_grants.push_back(MonCapGrant("osd new")); - profile_grants.push_back(MonCapGrant("osd destroy-new")); + profile_grants.push_back(MonCapGrant("osd purge-new")); } if (profile == "bootstrap-mds") { profile_grants.push_back(MonCapGrant("mon", MON_CAP_R)); // read monmap diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 9739485bd715f..0f9d1c2cafe18 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -874,12 +874,11 @@ COMMAND("osd destroy " \ "but removes cephx keys, config-key data and lockbox keys, "\ "rendering data permanently unreadable.", \ "osd", "rw", "cli,rest") -COMMAND("osd destroy-new " \ +COMMAND("osd purge-new " \ "name=id,type=CephOsdName " \ "name=sure,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ - "mark osd as being destroyed. Keeps the ID intact (allowing reuse), " \ - "but removes cephx keys, config-key data and lockbox keys, "\ - "rendering data permanently unreadable. Only works on new, unbooted osd ids.", \ + "purge all traces of an OSD that was partially created but never " \ + "started", \ "osd", "rw", "cli,rest") COMMAND("osd purge " \ "name=id,type=CephOsdName " \ diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 4dc4119e8dbb9..683c4d59fcea6 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -10501,7 +10501,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, } else if (prefix == "osd destroy" || prefix == "osd purge" || - prefix == "osd destroy-new") { + prefix == "osd purge-new") { /* Destroying an OSD means that we don't expect to further make use of * the OSDs data (which may even become unreadable after this operation), * and that we are okay with scrubbing all its cephx keys and config-key @@ -10530,10 +10530,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, goto reply; } - bool is_destroy = (prefix == "osd destroy" || - prefix == "osd destroy-new"); + bool is_destroy = (prefix == "osd destroy"); if (!is_destroy) { - assert("osd purge" == prefix); + assert("osd purge" == prefix || + "osd purge-new" == prefix); } string sure; @@ -10558,7 +10558,7 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, goto reply; } - if (prefix == "osd destroy-new" && + if (prefix == "osd purge-new" && (osdmap.get_state(id) & CEPH_OSD_NEW) == 0) { ss << "osd." << id << " is not new"; err = -EPERM; -- 2.39.5