aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Rutkovsky <alexvru@ydb.tech>2025-03-05 19:33:00 +0300
committerGitHub <noreply@github.com>2025-03-05 16:33:00 +0000
commit1067562f8c5dd59c0dd98f22a731454f28a7ef39 (patch)
tree5b49abcd40f36910d12de1bf91a5f2a564f2a19e
parent796e7a6782a5eafe54b530c5244aa07c7aff1870 (diff)
downloadydb-1067562f8c5dd59c0dd98f22a731454f28a7ef39.tar.gz
Check yaml version in BSC mode (#15366)
-rw-r--r--ydb/core/mind/bscontroller/console_interaction.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/ydb/core/mind/bscontroller/console_interaction.cpp b/ydb/core/mind/bscontroller/console_interaction.cpp
index 1a8d739cf3..06c58c2e55 100644
--- a/ydb/core/mind/bscontroller/console_interaction.cpp
+++ b/ydb/core/mind/bscontroller/console_interaction.cpp
@@ -277,14 +277,34 @@ namespace NKikimr::NBsController {
PendingYamlConfig.reset();
}
- if (PendingYamlConfig && !NYamlConfig::IsMainConfig(*PendingYamlConfig)) {
- return IssueGRpcResponse(NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
- "cluster YAML config is not of MainConfig kind");
+ if (PendingYamlConfig) {
+ const ui64 expected = Self.YamlConfig
+ ? GetVersion(*Self.YamlConfig) + 1
+ : 0;
+
+ if (!NYamlConfig::IsMainConfig(*PendingYamlConfig)) {
+ return IssueGRpcResponse(NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
+ "cluster YAML config is not of MainConfig kind");
+ } else if (const auto& meta = NYamlConfig::GetMainMetadata(*PendingYamlConfig); meta.Version != expected) {
+ return IssueGRpcResponse(NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
+ TStringBuilder() << "cluster YAML config version mismatch got# " << meta.Version
+ << " expected# " << expected);
+ }
}
- if (PendingStorageYamlConfig && *PendingStorageYamlConfig && !NYamlConfig::IsStorageConfig(**PendingStorageYamlConfig)) {
- return IssueGRpcResponse(NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
- "storage YAML config is not of StorageConfig kind");
+ if (PendingStorageYamlConfig && *PendingStorageYamlConfig) {
+ const ui64 expected = Self.StorageYamlConfig
+ ? Self.StorageYamlConfigVersion + 1
+ : 0;
+
+ if (!NYamlConfig::IsStorageConfig(**PendingStorageYamlConfig)) {
+ return IssueGRpcResponse(NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
+ "storage YAML config is not of StorageConfig kind");
+ } else if (const auto& meta = NYamlConfig::GetStorageMetadata(**PendingStorageYamlConfig); meta.Version != expected) {
+ return IssueGRpcResponse(NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
+ TStringBuilder() << "storage YAML config version mismatch got# " << meta.Version
+ << " expected# " << expected);
+ }
}
if (record.GetSkipConsoleValidation() || !record.HasClusterYaml()) {