Skip to content

Commit

Permalink
stable-23-3 [Blockstore] Fix checkpoint without data creation (#777)
Browse files Browse the repository at this point in the history
* NBS-4773 [blockstore] Fix checkpoint without data creation (#738)

* write test ShouldNotReadFromCheckpointWithoutData

* create normal checkpoint and delete data

* pass CheckpointType when create checkpoint for network disk

* fix clang-format

* use NProto::ECheckpointType for checkpoint creation (#773)
  • Loading branch information
leftmain authored Mar 19, 2024
1 parent 5e86b0b commit 07b3ed9
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 44 deletions.
4 changes: 2 additions & 2 deletions cloud/blockstore/libs/storage/volume/testlib/test_env.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -369,11 +369,11 @@ std::unique_ptr<TEvVolume::TEvDescribeBlocksRequest> TVolumeClient::CreateDescri
std::unique_ptr<TEvService::TEvCreateCheckpointRequest>
TVolumeClient::CreateCreateCheckpointRequest(
const TString& checkpointId,
bool isLight)
NProto::ECheckpointType checkpointType)
{
auto request = std::make_unique<TEvService::TEvCreateCheckpointRequest>();
request->Record.SetCheckpointId(checkpointId);
request->Record.SetIsLight(isLight);
request->Record.SetCheckpointType(checkpointType);
return request;
}

Expand Down
2 changes: 1 addition & 1 deletion cloud/blockstore/libs/storage/volume/testlib/test_env.h
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ class TVolumeClient

std::unique_ptr<TEvService::TEvCreateCheckpointRequest> CreateCreateCheckpointRequest(
const TString& checkpointId,
bool isLight = false);
NProto::ECheckpointType checkpointType = NProto::ECheckpointType::NORMAL);

std::unique_ptr<TEvService::TEvDeleteCheckpointRequest> CreateDeleteCheckpointRequest(
const TString& checkpointId);
Expand Down
14 changes: 14 additions & 0 deletions cloud/blockstore/libs/storage/volume/volume_actor_checkpoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ class TCheckpointActor final
const TActorId VolumeActorId;
const TPartitionDescrs PartitionDescrs;
const TRequestTraceInfo TraceInfo;
const ECheckpointRequestType RequestType;
const bool CreateCheckpointShadowDisk;

ui32 DrainResponses = 0;
Expand All @@ -157,6 +158,7 @@ class TCheckpointActor final
TActorId volumeActorId,
TPartitionDescrs partitionDescrs,
TRequestTraceInfo traceInfo,
ECheckpointRequestType requestType,
bool createCheckpointShadowDisk);

void Bootstrap(const TActorContext& ctx);
Expand Down Expand Up @@ -229,6 +231,7 @@ TCheckpointActor<TMethod>::TCheckpointActor(
TActorId volumeActorId,
TPartitionDescrs partitionDescrs,
TRequestTraceInfo traceInfo,
ECheckpointRequestType requestType,
bool createCheckpointShadowDisk)
: RequestInfo(std::move(requestInfo))
, RequestId(requestId)
Expand All @@ -238,6 +241,7 @@ TCheckpointActor<TMethod>::TCheckpointActor(
, VolumeActorId(volumeActorId)
, PartitionDescrs(std::move(partitionDescrs))
, TraceInfo(std::move(traceInfo))
, RequestType(requestType)
, CreateCheckpointShadowDisk(createCheckpointShadowDisk)
, ChildCallContexts(Reserve(PartitionDescrs.size()))
{}
Expand Down Expand Up @@ -688,6 +692,13 @@ void TCheckpointActor<TMethod>::DoActionForBlobStorageBasedPartition(
const auto selfId = TBase::SelfId();
auto request = std::make_unique<typename TMethod::TRequest>();
request->Record.SetCheckpointId(CheckpointId);
if constexpr (std::is_same_v<TMethod, TCreateCheckpointMethod>) {
request->Record.SetCheckpointType(
RequestType == ECheckpointRequestType::CreateWithoutData
? NProto::ECheckpointType::WITHOUT_DATA
: NProto::ECheckpointType::NORMAL
);
}

ForkTraces(request->CallContext);

Expand Down Expand Up @@ -1156,6 +1167,7 @@ void TVolumeActor::ProcessNextCheckpointRequest(const TActorContext& ctx)
requestInfo->IsTraced,
requestInfo->TraceTs,
TraceSerializer),
request.ReqType,
Config->GetUseShadowDisksForNonreplDiskCheckpoints());
break;
}
Expand All @@ -1180,6 +1192,7 @@ void TVolumeActor::ProcessNextCheckpointRequest(const TActorContext& ctx)
requestInfo->IsTraced,
requestInfo->TraceTs,
TraceSerializer),
request.ReqType,
Config->GetUseShadowDisksForNonreplDiskCheckpoints());
break;
}
Expand All @@ -1198,6 +1211,7 @@ void TVolumeActor::ProcessNextCheckpointRequest(const TActorContext& ctx)
requestInfo->IsTraced,
requestInfo->TraceTs,
TraceSerializer),
request.ReqType,
Config->GetUseShadowDisksForNonreplDiskCheckpoints());
break;
}
Expand Down
Loading

0 comments on commit 07b3ed9

Please sign in to comment.