diff options
| author | alexvru <[email protected]> | 2022-10-12 11:30:45 +0300 |
|---|---|---|
| committer | alexvru <[email protected]> | 2022-10-12 11:30:45 +0300 |
| commit | 96d04f634b2f08e77a8e450789769d109fbb3c6f (patch) | |
| tree | 71601bbbe7d84eb0cac09e3a0a7f90a10081f87f | |
| parent | 7650b5f2c69fecde07b39ac32e7f8f549daa0d55 (diff) | |
Support ApproximateFreeSpaceShare in TEv(V)StatusResult
| -rw-r--r-- | ydb/core/base/blobstorage.h | 1 | ||||
| -rw-r--r-- | ydb/core/blobstorage/dsproxy/dsproxy_status.cpp | 8 | ||||
| -rw-r--r-- | ydb/core/blobstorage/vdisk/common/blobstorage_status.cpp | 5 | ||||
| -rw-r--r-- | ydb/core/protos/blobstorage.proto | 1 |
4 files changed, 13 insertions, 2 deletions
diff --git a/ydb/core/base/blobstorage.h b/ydb/core/base/blobstorage.h index 9ccdf5d4e4e..7a4392b7d3d 100644 --- a/ydb/core/base/blobstorage.h +++ b/ydb/core/base/blobstorage.h @@ -2023,6 +2023,7 @@ struct TEvBlobStorage { struct TEvStatusResult : public TEventLocal<TEvStatusResult, EvStatusResult> { NKikimrProto::EReplyStatus Status; TStorageStatusFlags StatusFlags; + float ApproximateFreeSpaceShare = 0.0f; // zero means absence of correct data TString ErrorReason; TEvStatusResult(NKikimrProto::EReplyStatus status, TStorageStatusFlags statusFlags) diff --git a/ydb/core/blobstorage/dsproxy/dsproxy_status.cpp b/ydb/core/blobstorage/dsproxy/dsproxy_status.cpp index 979cd287674..dfbe247be85 100644 --- a/ydb/core/blobstorage/dsproxy/dsproxy_status.cpp +++ b/ydb/core/blobstorage/dsproxy/dsproxy_status.cpp @@ -16,6 +16,7 @@ class TBlobStorageGroupStatusRequest : public TBlobStorageGroupRequestActor<TBlo ui64 Requests; ui64 Responses; TGroupQuorumTracker QuorumTracker; + std::optional<float> ApproximateFreeSpaceShare; void Handle(TEvBlobStorage::TEvVStatusResult::TPtr &ev) { ProcessReplyFromQueue(ev); @@ -34,6 +35,10 @@ class TBlobStorageGroupStatusRequest : public TBlobStorageGroupRequestActor<TBlo if (record.HasStatusFlags()) { StatusFlags.Merge(record.GetStatusFlags()); } + if (record.HasApproximateFreeSpaceShare()) { + const float value = record.GetApproximateFreeSpaceShare(); + ApproximateFreeSpaceShare = Min(ApproximateFreeSpaceShare.value_or(value), value); + } ++Responses; switch (const NKikimrProto::EReplyStatus overallStatus = QuorumTracker.ProcessReply(vdisk, status)) { @@ -55,6 +60,9 @@ class TBlobStorageGroupStatusRequest : public TBlobStorageGroupRequestActor<TBlo friend class TBlobStorageGroupRequestActor<TBlobStorageGroupStatusRequest>; void ReplyAndDie(NKikimrProto::EReplyStatus status) { auto result = std::make_unique<TEvBlobStorage::TEvStatusResult>(status, StatusFlags.Raw); + if (ApproximateFreeSpaceShare) { + result->ApproximateFreeSpaceShare = *ApproximateFreeSpaceShare; + } result->ErrorReason = ErrorReason; A_LOG_DEBUG_S("DSPS03", "ReplyAndDie Result# " << result->Print(false)); SendResponseAndDie(std::move(result)); diff --git a/ydb/core/blobstorage/vdisk/common/blobstorage_status.cpp b/ydb/core/blobstorage/vdisk/common/blobstorage_status.cpp index f26ac7bc319..6a931b26d43 100644 --- a/ydb/core/blobstorage/vdisk/common/blobstorage_status.cpp +++ b/ydb/core/blobstorage/vdisk/common/blobstorage_status.cpp @@ -44,8 +44,9 @@ namespace NKikimr { Result = std::make_unique<TEvBlobStorage::TEvVStatusResult>(NKikimrProto::OK, SelfVDiskId, true, ReplDone, IncarnationGuid); - NPDisk::TStatusFlags statusFlags = VCtx->GetOutOfSpaceState().GetGlobalStatusFlags().Flags; - Result->Record.SetStatusFlags(statusFlags); + const auto& oos = VCtx->GetOutOfSpaceState(); + Result->Record.SetStatusFlags(oos.GetGlobalStatusFlags().Flags); + Result->Record.SetApproximateFreeSpaceShare(oos.GetFreeSpaceShare()); // send requests to all actors SendLocalStatusRequest(ctx, SkeletonId); diff --git a/ydb/core/protos/blobstorage.proto b/ydb/core/protos/blobstorage.proto index 2697d3e8986..9355c93de07 100644 --- a/ydb/core/protos/blobstorage.proto +++ b/ydb/core/protos/blobstorage.proto @@ -933,6 +933,7 @@ message TEvVStatusResult { optional uint32 StatusFlags = 9; // flags from EStatusFlags optional bool JoinedGroup = 10; optional bool Replicated = 11 [default = false]; + optional float ApproximateFreeSpaceShare = 12; // must contain valid value if set optional fixed64 IncarnationGuid = 30; optional TGroupInfo RecentGroup = 100; // filled in by VDisk on RACE when VDisk has newer generation } |
