diff options
author | Alexander Rutkovsky <alexvru@ydb.tech> | 2025-03-05 19:33:00 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-05 16:33:00 +0000 |
commit | 1067562f8c5dd59c0dd98f22a731454f28a7ef39 (patch) | |
tree | 5b49abcd40f36910d12de1bf91a5f2a564f2a19e | |
parent | 796e7a6782a5eafe54b530c5244aa07c7aff1870 (diff) | |
download | ydb-1067562f8c5dd59c0dd98f22a731454f28a7ef39.tar.gz |
Check yaml version in BSC mode (#15366)
-rw-r--r-- | ydb/core/mind/bscontroller/console_interaction.cpp | 32 |
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()) { |