summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralexvru <[email protected]>2022-10-12 11:30:45 +0300
committeralexvru <[email protected]>2022-10-12 11:30:45 +0300
commit96d04f634b2f08e77a8e450789769d109fbb3c6f (patch)
tree71601bbbe7d84eb0cac09e3a0a7f90a10081f87f
parent7650b5f2c69fecde07b39ac32e7f8f549daa0d55 (diff)
Support ApproximateFreeSpaceShare in TEv(V)StatusResult
-rw-r--r--ydb/core/base/blobstorage.h1
-rw-r--r--ydb/core/blobstorage/dsproxy/dsproxy_status.cpp8
-rw-r--r--ydb/core/blobstorage/vdisk/common/blobstorage_status.cpp5
-rw-r--r--ydb/core/protos/blobstorage.proto1
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
}