From 166e16102ee7004e0c7f7df21709f7974cfd02b6 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 14 Dec 2025 17:30:15 +0300 Subject: [PATCH] Allow to specify tags and weights during prepare --- docs/usage/disk.en.md | 2 ++ docs/usage/disk.ru.md | 2 ++ src/disk_tool/disk_tool.cpp | 2 ++ src/disk_tool/disk_tool_prepare.cpp | 28 ++++++++++++++++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/docs/usage/disk.en.md b/docs/usage/disk.en.md index 8a047415..a98900aa 100644 --- a/docs/usage/disk.en.md +++ b/docs/usage/disk.en.md @@ -95,6 +95,8 @@ Options (single-device mode): Options (both modes): ``` +--tags tag1,tag2 Set new OSD tag(s) +--weight Set new OSD weight (between 0 to 1) --journal_size 1G/32M Set journal size (area or partition size) --block_size 1M/128k Set blockstore object size --bitmap_granularity 4k Set bitmap granularity diff --git a/docs/usage/disk.ru.md b/docs/usage/disk.ru.md index c9010a0c..493d5d88 100644 --- a/docs/usage/disk.ru.md +++ b/docs/usage/disk.ru.md @@ -96,6 +96,8 @@ vitastor-disk - инструмент командной строки для уп Опции для обоих режимов: ``` +--tags tag1,tag2 Задать теги для новых OSD +--weight Задать вес для новых OSD (от 0 до 1) --journal_size 1G/32M Задать размер журнала (области или раздела журнала) --block_size 1M/128k Задать размер объекта хранилища --bitmap_granularity 4k Задать гранулярность битовых карт diff --git a/src/disk_tool/disk_tool.cpp b/src/disk_tool/disk_tool.cpp index 61e1f280..4ba654fe 100644 --- a/src/disk_tool/disk_tool.cpp +++ b/src/disk_tool/disk_tool.cpp @@ -65,6 +65,8 @@ static const char *help_text = " --force Bypass partition safety checks (for emptiness and so on)\n" " \n" " Options (both modes):\n" + " --tags tag1,tag2 Set new OSD tag(s)\n" + " --weight Set new OSD weight (between 0 and 1)\n" " --journal_size 32M/1G Set journal size (area or partition size)\n" " --block_size 128k/1M Set blockstore object size\n" " --bitmap_granularity 4k Set bitmap granularity\n" diff --git a/src/disk_tool/disk_tool_prepare.cpp b/src/disk_tool/disk_tool_prepare.cpp index 70d9fd65..d9ab7359 100644 --- a/src/disk_tool/disk_tool_prepare.cpp +++ b/src/disk_tool/disk_tool_prepare.cpp @@ -78,6 +78,15 @@ int disk_tool_t::prepare_one(std::map options, int is_ if (check_existing_partition(dev) != 0) return 1; } + if (options.find("weight") != options.end()) + { + double reweight = json11::Json(options["weight"]).number_value(); + if (reweight < 0 || reweight > 1) + { + fprintf(stderr, "OSD weight must be between 0 and 1\n"); + return 1; + } + } } if (options.find("atomic_write_size") == options.end()) { @@ -238,6 +247,25 @@ int disk_tool_t::prepare_one(std::map options, int is_ return 1; } sb["osd_num"] = osd_num; + if (options.find("weight") != options.end() || options.find("tags") != options.end()) + { + std::vector cmd = { "vitastor-cli", "modify-osd", std::to_string(osd_num) }; + if (options.find("weight") != options.end()) + { + cmd.push_back("--reweight"); + cmd.push_back(options["weight"]); + } + if (options.find("tags") != options.end()) + { + cmd.push_back("--tags"); + cmd.push_back(options["tags"]); + } + if (shell_exec(cmd, "", NULL, NULL) != 0) + { + fprintf(stderr, "Failed to modify OSD %ju tags and/or reweight\n", osd_num); + return 1; + } + } // Zero out metadata and journal if (write_zero(dsk.meta_fd, sb["meta_offset"].uint64_value(), dsk.meta_area_size) != 0 || write_zero(dsk.journal_fd, sb["journal_offset"].uint64_value(), dsk.journal_len) != 0)