diff --git a/src/cmd/cli.cpp b/src/cmd/cli.cpp index cb6a3abd..cad16f28 100644 --- a/src/cmd/cli.cpp +++ b/src/cmd/cli.cpp @@ -283,6 +283,7 @@ static json11::Json::object parse_args(int narg, const char *args[]) !strcmp(opt, "readonly") || !strcmp(opt, "readwrite") || !strcmp(opt, "force") || !strcmp(opt, "reverse") || !strcmp(opt, "allow-data-loss") || !strcmp(opt, "allow_data_loss") || + !strcmp(opt, "allow-up") || !strcmp(opt, "allow_up") || !strcmp(opt, "down-ok") || !strcmp(opt, "down_ok") || !strcmp(opt, "dry-run") || !strcmp(opt, "dry_run") || !strcmp(opt, "help") || !strcmp(opt, "all") || diff --git a/src/cmd/cli_rm_osd.cpp b/src/cmd/cli_rm_osd.cpp index b6dd257d..2a7612e4 100644 --- a/src/cmd/cli_rm_osd.cpp +++ b/src/cmd/cli_rm_osd.cpp @@ -15,7 +15,7 @@ struct rm_osd_t { cli_tool_t *parent; - bool dry_run, force_warning, force_dataloss; + bool dry_run, force_warning, force_dataloss, allow_up; uint64_t etcd_tx_retry_ms = 500; uint64_t etcd_tx_retries = 10000; std::vector osd_ids; @@ -168,7 +168,7 @@ struct rm_osd_t : strtoupper(e["effect"].string_value())+" PGs")) )+" after deleting OSD(s).\n"; } - if (still_up.size()) + if (still_up.size() && !allow_up) error += (still_up.size() == 1 ? "OSD " : "OSDs ") + implode(", ", still_up) + (still_up.size() == 1 ? "is" : "are") + " still up. Use `vitastor-disk purge` to delete them.\n"; if (is_dataloss && !force_dataloss && !dry_run) @@ -476,6 +476,7 @@ std::function cli_tool_t::start_rm_osd(json11::Json cfg) auto rm_osd = new rm_osd_t(); rm_osd->parent = this; rm_osd->dry_run = cfg["dry_run"].bool_value(); + rm_osd->allow_up = cfg["allow_up"].bool_value(); rm_osd->force_dataloss = cfg["allow_data_loss"].bool_value(); rm_osd->force_warning = rm_osd->force_dataloss || cfg["force"].bool_value(); if (!cfg["etcd_tx_retries"].is_null()) diff --git a/src/disk_tool/disk_tool_udev.cpp b/src/disk_tool/disk_tool_udev.cpp index 09e02367..a506518f 100644 --- a/src/disk_tool/disk_tool_udev.cpp +++ b/src/disk_tool/disk_tool_udev.cpp @@ -435,7 +435,7 @@ int disk_tool_t::purge_devices(const std::vector & devices) printf("%s\n", json11::Json(result).dump().c_str()); return 0; } - std::vector rm_osd_cli = { "vitastor-cli", "rm-osd" }; + std::vector rm_osd_cli = { "vitastor-cli", "rm-osd", "--allow-up" }; for (auto osd_num: osd_numbers) { rm_osd_cli.push_back(std::to_string(osd_num));