Skip to content

Commit

Permalink
NBS-4665, NBS-4262: checkpoints: small fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
gy2411 committed Jan 31, 2024
1 parent 0464a93 commit 15cb022
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 31 deletions.
15 changes: 11 additions & 4 deletions cloud/blockstore/libs/storage/volume/model/checkpoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,14 +297,21 @@ void TCheckpointStore::Apply(const TCheckpointRequest& checkpointRequest)
}
}

TSet<TString>& TCheckpointStore::GetCheckpoitsWithSavedRequest()
bool TCheckpointStore::HasSavedRequest(const TString& checkpointId) const
{
return CheckpointsWithSavedRequest;
return CheckpointsWithSavedRequest.contains(checkpointId);
}

void TCheckpointStore::MarkHasSavedRequest(TString checkpointId)
{
Y_DEBUG_ABORT_UNLESS(!CheckpointsWithSavedRequest.contains(checkpointId));
CheckpointsWithSavedRequest.insert(checkpointId);
}

const TSet<TString>& TCheckpointStore::GetCheckpoitsWithSavedRequest() const
void TCheckpointStore::MarkHasNoSavedRequest(TString checkpointId)
{
return CheckpointsWithSavedRequest;
Y_DEBUG_ABORT_UNLESS(CheckpointsWithSavedRequest.contains(checkpointId));
CheckpointsWithSavedRequest.erase(checkpointId);
}

////////////////////////////////////////////////////////////////////////////////
Expand Down
5 changes: 3 additions & 2 deletions cloud/blockstore/libs/storage/volume/model/checkpoint.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,9 @@ class TCheckpointStore

[[nodiscard]] TVector<TCheckpointRequest> GetCheckpointRequests() const;

TSet<TString>& GetCheckpoitsWithSavedRequest();
const TSet<TString>& GetCheckpoitsWithSavedRequest() const;
bool HasSavedRequest(const TString& checkpointId) const;
void MarkHasSavedRequest(TString checkpointId);
void MarkHasNoSavedRequest(TString checkpointId);

private:
[[nodiscard]] TCheckpointRequest& GetRequest(ui64 requestId);
Expand Down
13 changes: 6 additions & 7 deletions cloud/blockstore/libs/storage/volume/model/checkpoint_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -191,13 +191,12 @@ Y_UNIT_TEST_SUITE(TCheckpointStore)
UNIT_ASSERT_VALUES_EQUAL(true, store.IsCheckpointDeleted("checkpoint-4"));
UNIT_ASSERT_VALUES_EQUAL(false, store.IsCheckpointDeleted("checkpoint-5"));

const auto& checkpoitsWithSavedRequest = store.GetCheckpoitsWithSavedRequest();
UNIT_ASSERT_VALUES_EQUAL(false, checkpoitsWithSavedRequest.contains("checkpoint-1"));
UNIT_ASSERT_VALUES_EQUAL(false, checkpoitsWithSavedRequest.contains("checkpoint-2"));
UNIT_ASSERT_VALUES_EQUAL(true, checkpoitsWithSavedRequest.contains("checkpoint-3"));
UNIT_ASSERT_VALUES_EQUAL(false, checkpoitsWithSavedRequest.contains("checkpoint-4"));
UNIT_ASSERT_VALUES_EQUAL(false, checkpoitsWithSavedRequest.contains("checkpoint-5"));
UNIT_ASSERT_VALUES_EQUAL(false, checkpoitsWithSavedRequest.contains("checkpoint-6"));
UNIT_ASSERT_VALUES_EQUAL(false, store.HasSavedRequest("checkpoint-1"));
UNIT_ASSERT_VALUES_EQUAL(false, store.HasSavedRequest("checkpoint-2"));
UNIT_ASSERT_VALUES_EQUAL(true, store.HasSavedRequest("checkpoint-3"));
UNIT_ASSERT_VALUES_EQUAL(false, store.HasSavedRequest("checkpoint-4"));
UNIT_ASSERT_VALUES_EQUAL(false, store.HasSavedRequest("checkpoint-5"));
UNIT_ASSERT_VALUES_EQUAL(false, store.HasSavedRequest("checkpoint-6"));
}

Y_UNIT_TEST(CreateFail)
Expand Down
2 changes: 1 addition & 1 deletion cloud/blockstore/libs/storage/volume/volume_actor.h
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ class TVolumeActor final
const TCheckpointRequest& request,
const TCheckpointRequestInfo& info);

bool TryReplyToCheckpointRequestWithoutSaving(
bool TryReplyToCheckpointRequest(
const NActors::TActorContext& ctx,
const TCheckpointRequest& request,
const TCheckpointRequestInfo& info);
Expand Down
29 changes: 12 additions & 17 deletions cloud/blockstore/libs/storage/volume/volume_actor_checkpoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -954,7 +954,7 @@ void TVolumeActor::AddCheckpointRequest(
const TCheckpointRequest& request,
const TCheckpointRequestInfo& info)
{
if (TryReplyToCheckpointRequestWithoutSaving(ctx, request, info)) {
if (TryReplyToCheckpointRequest(ctx, request, info)) {
return;
}

Expand All @@ -971,8 +971,7 @@ void TVolumeActor::AddCheckpointRequest(
return;
}

if (!State->GetCheckpointStore().GetCheckpoitsWithSavedRequest().contains(
request.CheckpointId)) {
if (!State->GetCheckpointStore().HasSavedRequest(request.CheckpointId)) {
SaveCheckpointRequest(ctx, request, info);
return;
}
Expand All @@ -989,15 +988,15 @@ void TVolumeActor::AddCheckpointRequest(
info});
}

bool TVolumeActor::TryReplyToCheckpointRequestWithoutSaving(
bool TVolumeActor::TryReplyToCheckpointRequest(
const TActorContext& ctx,
const TCheckpointRequest& request,
const TCheckpointRequestInfo& info)
{
std::optional<NProto::TError> error =
std::optional<NProto::TError> validationResult =
ValidateCheckpointRequest(ctx, request);

if (!error) {
if (!validationResult) {
return false;
}

Expand All @@ -1006,15 +1005,15 @@ bool TVolumeActor::TryReplyToCheckpointRequestWithoutSaving(
switch (request.ReqType) {
case ECheckpointRequestType::Create:
case ECheckpointRequestType::CreateWithoutData: {
response = std::make_unique<TCreateCheckpointMethod::TResponse>(*error);
response = std::make_unique<TCreateCheckpointMethod::TResponse>(*validationResult);
break;
}
case ECheckpointRequestType::Delete: {
response = std::make_unique<TDeleteCheckpointMethod::TResponse>(*error);
response = std::make_unique<TDeleteCheckpointMethod::TResponse>(*validationResult);
break;
}
case ECheckpointRequestType::DeleteData: {
response = std::make_unique<TDeleteCheckpointDataMethod::TResponse>(*error);
response = std::make_unique<TDeleteCheckpointDataMethod::TResponse>(*validationResult);
break;
}
}
Expand All @@ -1041,9 +1040,8 @@ void TVolumeActor::ProcessPostponedCheckpointRequests(
const auto& request = State->GetCheckpointStore().GetRequestById(
ponstponedRequestInfo->RequestId);

if (!TryReplyToCheckpointRequestWithoutSaving(ctx, request, ponstponedRequestInfo->Info)) {
if (!State->GetCheckpointStore().GetCheckpoitsWithSavedRequest().contains(
request.CheckpointId)) {
if (!TryReplyToCheckpointRequest(ctx, request, ponstponedRequestInfo->Info)) {
if (!State->GetCheckpointStore().HasSavedRequest(request.CheckpointId)) {
PostponedCheckpointRequests.RemovePostponedRequest(checkpointId);
SaveCheckpointRequest(ctx, request, ponstponedRequestInfo->Info);
}
Expand All @@ -1068,8 +1066,7 @@ void TVolumeActor::SaveCheckpointRequest(
const TCheckpointRequest& request,
const TCheckpointRequestInfo& info)
{
State->GetCheckpointStore().GetCheckpoitsWithSavedRequest().insert(
request.CheckpointId);
State->GetCheckpointStore().MarkHasSavedRequest(request.CheckpointId);

AddTransaction(*info.RequestInfo);

Expand Down Expand Up @@ -1394,9 +1391,7 @@ void TVolumeActor::ExecuteUpdateCheckpointRequest(
auto checkpointRequestCopy =
State->GetCheckpointStore().GetRequestById(args.RequestId);

auto& checkpointsWithSavedRequest =
State->GetCheckpointStore().GetCheckpoitsWithSavedRequest();
checkpointsWithSavedRequest.erase(checkpointRequestCopy.CheckpointId);
State->GetCheckpointStore().MarkHasNoSavedRequest(checkpointRequestCopy.CheckpointId);

TVolumeDatabase db(tx.DB);
db.UpdateCheckpointRequest(
Expand Down

0 comments on commit 15cb022

Please sign in to comment.