Skip to content

Commit 04cc71e

Browse files
authored
stable-25-3: cherry-pick PR 25786, PR 25833 (#26003)
2 parents e41491e + 50e3ed7 commit 04cc71e

File tree

6 files changed

+57
-76
lines changed

6 files changed

+57
-76
lines changed

ydb/core/blobstorage/nodewarden/blobstorage_node_warden_ut.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,7 @@ Y_UNIT_TEST_SUITE(TBlobStorageWardenTest) {
944944
}
945945

946946
void TestInferPDiskSlotCount(ui64 driveSize, ui64 unitSizeInBytes, ui32 maxSlots,
947-
ui64 expectedSlotCount, ui32 expectedSlotSizeInUnits, double expectedRelativeError = 0) {
947+
ui32 expectedSlotCount, ui32 expectedSlotSizeInUnits, double expectedRelativeError = 0) {
948948
TIntrusivePtr<TPDiskConfig> pdiskConfig = new TPDiskConfig("fake_drive", 0, 0, 0);
949949

950950
NStorage::TNodeWarden::InferPDiskSlotCount(pdiskConfig, driveSize, unitSizeInBytes, maxSlots);

ydb/core/blobstorage/pdisk/blobstorage_pdisk.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,10 @@ struct TEvYardResizeResult : TEventLocal<TEvYardResizeResult, TEvBlobStorage::Ev
309309
};
310310

311311
struct TEvChangeExpectedSlotCount : TEventLocal<TEvChangeExpectedSlotCount, TEvBlobStorage::EvChangeExpectedSlotCount> {
312-
ui64 ExpectedSlotCount;
312+
ui32 ExpectedSlotCount;
313313
ui32 SlotSizeInUnits;
314314

315-
TEvChangeExpectedSlotCount(ui64 expectedSlotCount, ui32 slotSizeInUnits)
315+
TEvChangeExpectedSlotCount(ui32 expectedSlotCount, ui32 slotSizeInUnits)
316316
: ExpectedSlotCount(expectedSlotCount)
317317
, SlotSizeInUnits(slotSizeInUnits)
318318
{}

ydb/core/blobstorage/pdisk/blobstorage_pdisk_actor.cpp

Lines changed: 51 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include <util/generic/algorithm.h>
3333
#include <util/string/split.h>
3434
#include <util/system/sanitizers.h>
35+
#include <util/generic/variant.h>
3536

3637
namespace NKikimr {
3738
namespace NPDisk {
@@ -56,46 +57,12 @@ void CreatePDiskActor(TExecutorThread& executorThread,
5657
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
5758

5859
class TPDiskActor : public TActorBootstrapped<TPDiskActor> {
59-
struct TInitQueueItem {
60-
TOwnerRound OwnerRound = 0;
61-
TVDiskID VDisk = TVDiskID::InvalidId;
62-
ui32 SlotSizeInUnits = 0;
63-
ui64 PDiskGuid = 0;
64-
TActorId Sender;
65-
TActorId CutLogId;
66-
TActorId WhiteboardProxyId;
67-
ui32 SlotId = 0;
68-
bool IsShred = false;
69-
ui64 ShredGeneration = 0;
70-
ui64 Cookie;
71-
72-
TInitQueueItem(const TActorId sender, const ui64 shredGeneration, ui64 cookie)
73-
: Sender(sender)
74-
, IsShred(true)
75-
, ShredGeneration(shredGeneration)
76-
, Cookie(cookie)
77-
{}
78-
79-
TInitQueueItem(
80-
TOwnerRound ownerRound,
81-
TVDiskID vDisk,
82-
ui32 slotSizeInUnits,
83-
ui64 pDiskGuid,
84-
TActorId sender,
85-
TActorId cutLogId,
86-
TActorId whiteboardProxyId,
87-
ui32 slotId
88-
)
89-
: OwnerRound(ownerRound)
90-
, VDisk(vDisk)
91-
, SlotSizeInUnits(slotSizeInUnits)
92-
, PDiskGuid(pDiskGuid)
93-
, Sender(sender)
94-
, CutLogId(cutLogId)
95-
, WhiteboardProxyId(whiteboardProxyId)
96-
, SlotId(slotId)
97-
{}
98-
};
60+
using TInitQueueItem = std::variant<
61+
NPDisk::TEvYardInit::TPtr,
62+
NPDisk::TEvShredPDisk::TPtr,
63+
NPDisk::TEvYardResize::TPtr,
64+
NPDisk::TEvChangeExpectedSlotCount::TPtr
65+
>;
9966

10067
TString StateErrorReason;
10168
TIntrusivePtr<TPDiskConfig> Cfg;
@@ -313,17 +280,30 @@ class TPDiskActor : public TActorBootstrapped<TPDiskActor> {
313280
void InitError(const TString &errorReason, bool allowMetadataHandling = false) {
314281
Become(&TThis::StateError);
315282
for (TList<TInitQueueItem>::iterator it = InitQueue.begin(); it != InitQueue.end(); ++it) {
316-
if (it->IsShred) {
317-
Send(it->Sender, new NPDisk::TEvShredPDiskResult(NKikimrProto::CORRUPTED, it->ShredGeneration, errorReason), 0, it->Cookie);
318-
if (PDisk) {
319-
PDisk->Mon.ShredPDisk.CountResponse();
320-
}
321-
} else {
322-
Send(it->Sender, new NPDisk::TEvYardInitResult(NKikimrProto::CORRUPTED, errorReason));
323-
if (PDisk) {
324-
PDisk->Mon.YardInit.CountResponse();
283+
std::visit([this, &errorReason](const auto& ev) {
284+
using T = std::decay_t<decltype(ev)>;
285+
if constexpr (std::is_same_v<T, NPDisk::TEvShredPDisk::TPtr>) {
286+
Send(ev->Sender, new NPDisk::TEvShredPDiskResult(NKikimrProto::CORRUPTED, ev->Get()->ShredGeneration, errorReason), 0, ev->Cookie);
287+
if (PDisk) {
288+
PDisk->Mon.ShredPDisk.CountResponse();
289+
}
290+
} else if constexpr (std::is_same_v<T, NPDisk::TEvYardInit::TPtr>) {
291+
Send(ev->Sender, new NPDisk::TEvYardInitResult(NKikimrProto::CORRUPTED, errorReason));
292+
if (PDisk) {
293+
PDisk->Mon.YardInit.CountResponse();
294+
}
295+
} else if constexpr (std::is_same_v<T, NPDisk::TEvYardResize::TPtr>) {
296+
Send(ev->Sender, new NPDisk::TEvYardResizeResult(NKikimrProto::CORRUPTED, {}, errorReason));
297+
if (PDisk) {
298+
PDisk->Mon.YardResize.CountResponse();
299+
}
300+
} else if constexpr (std::is_same_v<T, NPDisk::TEvChangeExpectedSlotCount::TPtr>) {
301+
Send(ev->Sender, new NPDisk::TEvChangeExpectedSlotCountResult(NKikimrProto::CORRUPTED, errorReason));
302+
if (PDisk) {
303+
PDisk->Mon.ChangeExpectedSlotCount.CountResponse();
304+
}
325305
}
326-
}
306+
}, *it);
327307
}
328308
InitQueue.clear();
329309
TStringStream str;
@@ -633,17 +613,23 @@ class TPDiskActor : public TActorBootstrapped<TPDiskActor> {
633613
void InitSuccess() {
634614
Become(&TThis::StateOnline);
635615
for (TList<TInitQueueItem>::iterator it = InitQueue.begin(); it != InitQueue.end(); ++it) {
636-
if (it->IsShred) {
637-
NPDisk::TEvShredPDisk evShredPDisk(it->ShredGeneration);
638-
auto* request = PDisk->ReqCreator.CreateFromEv<NPDisk::TShredPDisk>(evShredPDisk, it->Sender);
639-
request->Cookie = it->Cookie;
640-
PDisk->InputRequest(request);
641-
} else {
642-
NPDisk::TEvYardInit evInit(it->OwnerRound, it->VDisk, it->PDiskGuid, it->CutLogId, it->WhiteboardProxyId,
643-
it->SlotId, it->SlotSizeInUnits);
644-
auto* request = PDisk->ReqCreator.CreateFromEv<TYardInit>(evInit, it->Sender);
645-
PDisk->InputRequest(request);
646-
}
616+
std::visit([this](const auto& ev) {
617+
using T = std::decay_t<decltype(ev)>;
618+
if constexpr (std::is_same_v<T, NPDisk::TEvShredPDisk::TPtr>) {
619+
auto* request = PDisk->ReqCreator.CreateFromEv<NPDisk::TShredPDisk>(*ev->Get(), ev->Sender);
620+
request->Cookie = ev->Cookie;
621+
PDisk->InputRequest(request);
622+
} else if constexpr (std::is_same_v<T, NPDisk::TEvYardInit::TPtr>) {
623+
auto* request = PDisk->ReqCreator.CreateFromEv<TYardInit>(*ev->Get(), ev->Sender);
624+
PDisk->InputRequest(request);
625+
} else if constexpr (std::is_same_v<T, NPDisk::TEvYardResize::TPtr>) {
626+
auto* request = PDisk->ReqCreator.CreateFromEv<TYardResize>(*ev->Get(), ev->Sender);
627+
PDisk->InputRequest(request);
628+
} else if constexpr (std::is_same_v<T, NPDisk::TEvChangeExpectedSlotCount::TPtr>) {
629+
auto* request = PDisk->ReqCreator.CreateFromEv<TChangeExpectedSlotCount>(*ev->Get(), ev->Sender);
630+
PDisk->InputRequest(request);
631+
}
632+
}, *it);
647633
}
648634
InitQueue.clear();
649635
if (ControledStartResult) {
@@ -653,9 +639,7 @@ class TPDiskActor : public TActorBootstrapped<TPDiskActor> {
653639
}
654640

655641
void InitHandle(NPDisk::TEvYardInit::TPtr &ev) {
656-
const NPDisk::TEvYardInit &evYardInit = *ev->Get();
657-
InitQueue.emplace_back(evYardInit.OwnerRound, evYardInit.VDisk, evYardInit.GroupSizeInUnits, evYardInit.PDiskGuid,
658-
ev->Sender, evYardInit.CutLogID, evYardInit.WhiteboardProxyId, evYardInit.SlotId);
642+
InitQueue.emplace_back(ev);
659643
}
660644

661645
void OnPDiskStop(TActorId &sender, void *cookie) {
@@ -700,19 +684,16 @@ class TPDiskActor : public TActorBootstrapped<TPDiskActor> {
700684

701685
void InitHandle(NPDisk::TEvYardResize::TPtr &ev) {
702686
PDisk->Mon.YardResize.CountRequest();
703-
Send(ev->Sender, new NPDisk::TEvYardResizeResult(NKikimrProto::CORRUPTED, {}, StateErrorReason));
704-
PDisk->Mon.YardResize.CountResponse();
687+
InitQueue.emplace_back(ev);
705688
}
706689

707690
void InitHandle(NPDisk::TEvChangeExpectedSlotCount::TPtr &ev) {
708691
PDisk->Mon.ChangeExpectedSlotCount.CountRequest();
709-
Send(ev->Sender, new NPDisk::TEvChangeExpectedSlotCountResult(NKikimrProto::CORRUPTED, StateErrorReason));
710-
PDisk->Mon.ChangeExpectedSlotCount.CountResponse();
692+
InitQueue.emplace_back(ev);
711693
}
712694

713695
void InitHandle(NPDisk::TEvShredPDisk::TPtr &ev) {
714-
const NPDisk::TEvShredPDisk &evShredPDisk = *ev->Get();
715-
InitQueue.emplace_back(ev->Sender, evShredPDisk.ShredGeneration, ev->Cookie);
696+
InitQueue.emplace_back(ev);
716697
}
717698

718699
void InitHandle(NPDisk::TEvPreShredCompactVDiskResult::TPtr &ev) {

ydb/core/blobstorage/pdisk/blobstorage_pdisk_config.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ struct TPDiskConfig : public TThrRefBase {
137137
bool UseSpdkNvmeDriver;
138138

139139
// Next 2 are either user-defined or inferred from drive size
140-
ui64 ExpectedSlotCount = 0;
140+
ui32 ExpectedSlotCount = 0;
141141
ui32 SlotSizeInUnits = 0;
142142

143143
// Free chunk permille that triggers Cyan color (e.g. 100 is 10%). Between 130 (default) and 13.

ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ class TPDisk : public IPDisk {
213213
ui32 LastInitialChunkIdx;
214214
ui64 LastInitialSectorIdx;
215215

216-
ui64 ExpectedSlotCount = 0; // Number of slots to use for space limit calculation.
216+
ui32 ExpectedSlotCount = 0; // Number of slots to use for space limit calculation.
217217

218218
TAtomic TotalOwners = 0; // number of registered owners
219219

ydb/core/blobstorage/pdisk/blobstorage_pdisk_requestimpl.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1272,7 +1272,7 @@ class TContinueShred : public TRequestBase {
12721272

12731273
class TChangeExpectedSlotCount : public TRequestBase {
12741274
public:
1275-
ui64 ExpectedSlotCount;
1275+
ui32 ExpectedSlotCount;
12761276
ui32 SlotSizeInUnits;
12771277

12781278
TChangeExpectedSlotCount(const NPDisk::TEvChangeExpectedSlotCount &ev, const TActorId &sender, TAtomicBase reqIdx)

0 commit comments

Comments
 (0)