From bd147a912a77de08d01f81cdad945e76002ed683 Mon Sep 17 00:00:00 2001 From: Alexander Rutkovsky Date: Mon, 29 Jul 2024 13:20:51 +0300 Subject: [PATCH] Fix PDisk distconf metadata storage (#7175) --- .../nodewarden/distconf_invoke.cpp | 11 ++++++++ .../pdisk/blobstorage_pdisk_impl_metadata.cpp | 3 ++- .../blobstorage_distributed_config.proto | 26 +++++-------------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/ydb/core/blobstorage/nodewarden/distconf_invoke.cpp b/ydb/core/blobstorage/nodewarden/distconf_invoke.cpp index 7dc7fde733dd..23165f2d8842 100644 --- a/ydb/core/blobstorage/nodewarden/distconf_invoke.cpp +++ b/ydb/core/blobstorage/nodewarden/distconf_invoke.cpp @@ -144,6 +144,9 @@ namespace NKikimr::NStorage { case TQuery::kReassignStateStorageNode: return ReassignStateStorageNode(record.GetReassignStateStorageNode()); + case TQuery::kAdvanceGeneration: + return AdvanceGeneration(); + case TQuery::REQUEST_NOT_SET: return FinishWithError(TResult::ERROR, "Request field not set"); } @@ -598,6 +601,14 @@ namespace NKikimr::NStorage { //////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Configuration proposition + void AdvanceGeneration() { + if (RunCommonChecks()) { + NKikimrBlobStorage::TStorageConfig config = *Self->StorageConfig; + config.SetGeneration(config.GetGeneration() + 1); + StartProposition(&config); + } + } + void StartProposition(NKikimrBlobStorage::TStorageConfig *config) { config->MutablePrevConfig()->CopyFrom(*Self->StorageConfig); config->MutablePrevConfig()->ClearPrevConfig(); diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_metadata.cpp b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_metadata.cpp index 679abad962e9..53799269fc8a 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_metadata.cpp +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_metadata.cpp @@ -103,13 +103,14 @@ namespace NKikimr::NPDisk { << " ChunkIdx# " << key.ChunkIdx << " OffsetInSectors# " << key.OffsetInSectors); PDisk->BlockDevice->PwriteAsync(buffer.data(), buffer.size(), writeOffset, this, {}, nullptr); - WriteQueue.pop_front(); } void Exec(TActorSystem *actorSystem) override { LOG_DEBUG_S(*actorSystem, NKikimrServices::BS_PDISK, "PDiskId# " << PDisk->PDiskId << " TCompletionWriteMetadata::Exec" << " Result# " << Result); + Y_ABORT_UNLESS(!WriteQueue.empty()); + WriteQueue.pop_front(); if (Result != EIoResult::Ok) { PDisk->InputRequest(PDisk->ReqCreator.CreateFromArgs(false, Sender)); } else if (WriteQueue.empty()) { diff --git a/ydb/core/protos/blobstorage_distributed_config.proto b/ydb/core/protos/blobstorage_distributed_config.proto index c249519fa8e3..f57d63a3771c 100644 --- a/ydb/core/protos/blobstorage_distributed_config.proto +++ b/ydb/core/protos/blobstorage_distributed_config.proto @@ -181,6 +181,9 @@ message TEvNodeConfigInvokeOnRoot { bool SchemeBoard = 5; } + message TAdvanceGeneration + {} + oneof Request { TUpdateConfig UpdateConfig = 1; TQueryConfig QueryConfig = 2; @@ -188,6 +191,7 @@ message TEvNodeConfigInvokeOnRoot { TStaticVDiskSlain StaticVDiskSlain = 4; TDropDonor DropDonor = 5; TReassignStateStorageNode ReassignStateStorageNode = 6; + TAdvanceGeneration AdvanceGeneration = 7; } } @@ -205,37 +209,19 @@ message TEvNodeConfigInvokeOnRootResult { uint32 NodeId = 2; } - message TUpdateConfig { - } - message TQueryConfig { TStorageConfig Config = 1; TStorageConfig CurrentProposedStorageConfig = 2; } - message TReassignGroupDisk { - } - - message TStaticVDiskSlain { - } - - message TDropDonor { - } - - message TReassignStateStorageNode { - } - EStatus Status = 1; optional string ErrorReason = 2; TScepter Scepter = 3; + reserved 4, 6, 7, 8, 9; + oneof Response { - TUpdateConfig UpdateConfig = 4; TQueryConfig QueryConfig = 5; - TReassignGroupDisk ReassignGroupDisk = 6; - TStaticVDiskSlain StaticVDiskSlain = 7; - TDropDonor DropDonor = 8; - TReassignStateStorageNode ReassignStateStorageNode = 9; } }