Skip to content
Next Next commit
issue-2725: add direct acruire release disk sending
vladstepanyuk committed Jan 28, 2025
commit 3a055d0903dd4e95ed04fdb1f8678c45904bdf9a
3 changes: 3 additions & 0 deletions cloud/blockstore/config/storage.proto
Original file line number Diff line number Diff line change
@@ -1107,4 +1107,7 @@ message TStorageServiceConfig
// When enabled, tag "use-intermediate-write-buffer" will be added
// after scrubbing finds a mismatch
optional bool AutomaticallyEnableBufferCopyingAfterChecksumMismatch = 403;

// Enabling direct sending AcquireDevices to disk agent.
optional bool UseDirectAcquireReleaseDevicesSending = 404;
}
1 change: 1 addition & 0 deletions cloud/blockstore/libs/storage/core/config.cpp
Original file line number Diff line number Diff line change
@@ -494,6 +494,7 @@ TDuration MSeconds(ui32 value)
xxx(VolumeProxyCacheRetryDuration, TDuration, Seconds(15) )\
\
xxx(UseDirectCopyRange, bool, false )\
xxx(UseDirectAcqruireReleaseDiskSending, bool, false )\
xxx(MaxShadowDiskFillBandwidth, ui32, 512 )\
xxx(MaxShadowDiskFillIoDepth, ui32, 1 )\
xxx(BackgroundOperationsTotalBandwidth, ui32, 1024 )\
1 change: 1 addition & 0 deletions cloud/blockstore/libs/storage/core/config.h
Original file line number Diff line number Diff line change
@@ -572,6 +572,7 @@ class TStorageConfig
TString GetCachedDiskAgentSessionsPath() const;

bool GetUseDirectCopyRange() const;
[[nodiscard]] bool GetUseDirectAcquireReleaseDiskSending() const;
ui32 GetMaxShadowDiskFillBandwidth() const;
ui32 GetMaxShadowDiskFillIoDepth() const;
ui32 GetBackgroundOperationsTotalBandwidth() const;
25 changes: 24 additions & 1 deletion cloud/blockstore/libs/storage/testlib/disk_agent_mock.h
Original file line number Diff line number Diff line change
@@ -92,14 +92,17 @@ class TDiskAgentMock final
private:
STFUNC(StateWork)
{
switch (ev->GetTypeRewrite()) {
auto typeRewrite = ev->GetTypeRewrite();
switch (typeRewrite) {
HFunc(NActors::TEvents::TEvPoisonPill, HandlePoisonPill);

HFunc(TEvDiskAgent::TEvReadDeviceBlocksRequest, HandleReadDeviceBlocks);
HFunc(TEvDiskAgent::TEvWriteDeviceBlocksRequest, HandleWriteDeviceBlocks);
HFunc(TEvDiskAgent::TEvZeroDeviceBlocksRequest, HandleZeroDeviceBlocks);
HFunc(TEvDiskAgent::TEvChecksumDeviceBlocksRequest, HandleChecksumDeviceBlocks);
HFunc(TEvDiskAgent::TEvDirectCopyBlocksRequest, HandleDirectCopyBlocks);
HFunc(TEvDiskAgent::TEvAcquireDevicesRequest, HandleAcquireDevicesRequest);
HFunc(TEvDiskAgent::TEvReleaseDevicesRequest, HandleReleaseDevicesRequest);

default:
Y_ABORT("Unexpected event %x", ev->GetTypeRewrite());
@@ -315,6 +318,26 @@ class TDiskAgentMock final
{
State->CreateDirectCopyActorFunc(ev, ctx, SelfId());
}

void HandleAcquireDevicesRequest(
TEvDiskAgent::TEvAcquireDevicesRequest::TPtr& ev,
const NActors::TActorContext& ctx)
{
auto response =
std::make_unique<TEvDiskAgent::TEvAcquireDevicesResponse>();

Reply(ctx, *ev, std::move(response));
}

void HandleReleaseDevicesRequest(
TEvDiskAgent::TEvReleaseDevicesRequest::TPtr& ev,
const NActors::TActorContext& ctx)
{
auto response =
std::make_unique<TEvDiskAgent::TEvReleaseDevicesResponse>();

Reply(ctx, *ev, std::move(response));
}
};

} // namespace NCloud::NBlockStore::NStorage
18 changes: 18 additions & 0 deletions cloud/blockstore/libs/storage/volume/volume_actor.h
Original file line number Diff line number Diff line change
@@ -716,12 +716,20 @@ class TVolumeActor final
const TEvDiskRegistry::TEvAcquireDiskResponse::TPtr& ev,
const NActors::TActorContext& ctx);

void HandleAcquireDiskResponseImpl(
const NProto::TAcquireDiskResponse& record,
const NActors::TActorContext& ctx);

void AcquireDisk(
const NActors::TActorContext& ctx,
TString clientId,
NProto::EVolumeAccessMode accessMode,
ui64 mountSeqNumber);

void SendProxylessAcquireDisk(
std::unique_ptr<TEvDiskRegistry::TEvAcquireDiskRequest> ev,
const NActors::TActorContext& ctx);

void AcquireDiskIfNeeded(const NActors::TActorContext& ctx);

void ScheduleAcquireDiskIfNeeded(const NActors::TActorContext& ctx);
@@ -742,8 +750,16 @@ class TVolumeActor final
const TEvDiskRegistry::TEvReleaseDiskResponse::TPtr& ev,
const NActors::TActorContext& ctx);

void HandleReleaseDiskResponseImpl(
const NProto::TReleaseDiskResponse& record,
const NActors::TActorContext& ctx);

void ReleaseDisk(const NActors::TActorContext& ctx, const TString& clientId);

void SendProxylessReleaseDisk(
std::unique_ptr<TEvDiskRegistry::TEvReleaseDiskRequest> msg,
const NActors::TActorContext& ctx);

void HandleAllocateDiskResponse(
const TEvDiskRegistry::TEvAllocateDiskResponse::TPtr& ev,
const NActors::TActorContext& ctx);
@@ -1019,4 +1035,6 @@ class TVolumeActor final

TString DescribeAllocation(const NProto::TAllocateDiskResponse& record);

TString LogDevices(const TVector<NProto::TDeviceConfig>& devices);

} // namespace NCloud::NBlockStore::NStorage
Loading