@@ -277,14 +277,34 @@ namespace NKikimr::NBsController {
277
277
PendingYamlConfig.reset ();
278
278
}
279
279
280
- if (PendingYamlConfig && !NYamlConfig::IsMainConfig (*PendingYamlConfig)) {
281
- return IssueGRpcResponse (NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
282
- " cluster YAML config is not of MainConfig kind" );
280
+ if (PendingYamlConfig) {
281
+ const ui64 expected = Self.YamlConfig
282
+ ? GetVersion (*Self.YamlConfig ) + 1
283
+ : 0 ;
284
+
285
+ if (!NYamlConfig::IsMainConfig (*PendingYamlConfig)) {
286
+ return IssueGRpcResponse (NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
287
+ " cluster YAML config is not of MainConfig kind" );
288
+ } else if (const auto & meta = NYamlConfig::GetMainMetadata (*PendingYamlConfig); meta.Version != expected) {
289
+ return IssueGRpcResponse (NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
290
+ TStringBuilder () << " cluster YAML config version mismatch got# " << meta.Version
291
+ << " expected# " << expected);
292
+ }
283
293
}
284
294
285
- if (PendingStorageYamlConfig && *PendingStorageYamlConfig && !NYamlConfig::IsStorageConfig (**PendingStorageYamlConfig)) {
286
- return IssueGRpcResponse (NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
287
- " storage YAML config is not of StorageConfig kind" );
295
+ if (PendingStorageYamlConfig && *PendingStorageYamlConfig) {
296
+ const ui64 expected = Self.StorageYamlConfig
297
+ ? Self.StorageYamlConfigVersion + 1
298
+ : 0 ;
299
+
300
+ if (!NYamlConfig::IsStorageConfig (**PendingStorageYamlConfig)) {
301
+ return IssueGRpcResponse (NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
302
+ " storage YAML config is not of StorageConfig kind" );
303
+ } else if (const auto & meta = NYamlConfig::GetStorageMetadata (**PendingStorageYamlConfig); meta.Version != expected) {
304
+ return IssueGRpcResponse (NKikimrBlobStorage::TEvControllerReplaceConfigResponse::InvalidRequest,
305
+ TStringBuilder () << " storage YAML config version mismatch got# " << meta.Version
306
+ << " expected# " << expected);
307
+ }
288
308
}
289
309
290
310
if (record.GetSkipConsoleValidation () || !record.HasClusterYaml ()) {
0 commit comments