Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion ydb/core/blobstorage/pdisk/blobstorage_pdisk.h
Original file line number Diff line number Diff line change
Expand Up @@ -1319,16 +1319,19 @@ struct TEvCheckSpaceResult : public TEventLocal<TEvCheckSpaceResult, TEvBlobStor
ui32 NumSlots; // number of VSlots over PDisk
double Occupancy = 0;
TString ErrorReason;
TStatusFlags LogStatusFlags;

TEvCheckSpaceResult(NKikimrProto::EReplyStatus status, TStatusFlags statusFlags, ui32 freeChunks,
ui32 totalChunks, ui32 usedChunks, ui32 numSlots, const TString &errorReason)
ui32 totalChunks, ui32 usedChunks, ui32 numSlots, const TString &errorReason,
TStatusFlags logStatusFlags = {})
: Status(status)
, StatusFlags(statusFlags)
, FreeChunks(freeChunks)
, TotalChunks(totalChunks)
, UsedChunks(usedChunks)
, NumSlots(numSlots)
, ErrorReason(errorReason)
, LogStatusFlags(logStatusFlags)
{}

TString ToString() const {
Expand All @@ -1340,6 +1343,7 @@ struct TEvCheckSpaceResult : public TEventLocal<TEvCheckSpaceResult, TEvBlobStor
str << " UsedChunks# " << UsedChunks;
str << " NumSlots# " << NumSlots;
str << " ErrorReason# \"" << ErrorReason << "\"";
str << " LogStatusFlags# " << StatusFlagsToString(LogStatusFlags);
str << "}";
return str.Str();
}
Expand Down
3 changes: 2 additions & 1 deletion ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2026,7 +2026,8 @@ void TPDisk::CheckSpace(TCheckSpace &evCheckSpace) {
GetTotalChunks(evCheckSpace.Owner, evCheckSpace.OwnerGroupType),
GetUsedChunks(evCheckSpace.Owner, evCheckSpace.OwnerGroupType),
AtomicGet(TotalOwners),
TString());
TString(),
GetStatusFlags(OwnerSystem, evCheckSpace.OwnerGroupType));
result->Occupancy = occupancy;
ActorSystem->Send(evCheckSpace.Sender, result.release());
Mon.CheckSpace.CountResponse();
Expand Down
3 changes: 1 addition & 2 deletions ydb/core/blobstorage/pdisk/blobstorage_pdisk_impl_log.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -946,8 +946,7 @@ void TPDisk::LogWrite(TLogWrite &evLog, TVector<ui32> &logChunksToCommit) {
}
Y_ABORT_UNLESS(CommonLogger->NextChunks.empty());

evLog.Result.Reset(new NPDisk::TEvLogResult(NKikimrProto::OK,
GetStatusFlags(evLog.Owner, evLog.OwnerGroupType), nullptr));
evLog.Result.Reset(new NPDisk::TEvLogResult(NKikimrProto::OK, GetStatusFlags(OwnerSystem, evLog.OwnerGroupType), nullptr));
Y_ABORT_UNLESS(evLog.Result.Get());
evLog.Result->Results.push_back(NPDisk::TEvLogResult::TRecord(evLog.Lsn, evLog.Cookie));
}
Expand Down
19 changes: 9 additions & 10 deletions ydb/core/blobstorage/pdisk/blobstorage_pdisk_ut_actions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2758,14 +2758,7 @@ void TTestRedZoneSurvivability::TestFSM(const TActorContext &ctx) {
case 30:
{
//TEST_RESPONSE(EvLogResult, ERROR);
TEST_PDISK_STATUS(ui32(NKikimrBlobStorage::StatusIsValid)
| ui32(NKikimrBlobStorage::StatusDiskSpaceCyan)
| ui32(NKikimrBlobStorage::StatusDiskSpaceRed)
| ui32(NKikimrBlobStorage::StatusDiskSpaceOrange)
| ui32(NKikimrBlobStorage::StatusDiskSpacePreOrange)
| ui32(NKikimrBlobStorage::StatusDiskSpaceLightOrange)
| ui32(NKikimrBlobStorage::StatusDiskSpaceYellowStop)
| ui32(NKikimrBlobStorage::StatusDiskSpaceLightYellowMove));
TEST_PDISK_STATUS(ui32(NKikimrBlobStorage::StatusIsValid));
VERBOSE_COUT(" Sending TEvLog to delete a chunk");
NPDisk::TCommitRecord commitRecord;
TRcBuf commitData = TRcBuf(TString("hello"));
Expand All @@ -2790,7 +2783,10 @@ void TTestRedZoneSurvivability::TestFSM(const TActorContext &ctx) {
case 50:
{
TEST_RESPONSE(EvLogResult, OK);
TEST_PDISK_STATUS(ui32(NKikimrBlobStorage::StatusIsValid));
TEST_PDISK_STATUS(ui32(NKikimrBlobStorage::StatusIsValid)
| ui32(NKikimrBlobStorage::StatusDiskSpaceCyan)
| ui32(NKikimrBlobStorage::StatusDiskSpaceLightYellowMove)
| ui32(NKikimrBlobStorage::StatusDiskSpaceYellowStop));

VERBOSE_COUT(" Sending TEvLog to log 3 * ChunkSize bytes");
TRcBuf largeData = TRcBuf(PrepareData(ChunkSize * 3));
Expand All @@ -2800,7 +2796,10 @@ void TTestRedZoneSurvivability::TestFSM(const TActorContext &ctx) {
case 60:
{
TEST_RESPONSE(EvLogResult, OK);
TEST_PDISK_STATUS(ui32(NKikimrBlobStorage::StatusIsValid));
TEST_PDISK_STATUS(ui32(NKikimrBlobStorage::StatusIsValid)
| ui32(NKikimrBlobStorage::StatusDiskSpaceCyan)
| ui32(NKikimrBlobStorage::StatusDiskSpaceLightYellowMove)
| ui32(NKikimrBlobStorage::StatusDiskSpaceYellowStop));

VERBOSE_COUT(" Sending TEvLog to cut log");
NPDisk::TCommitRecord commitRecord;
Expand Down
2 changes: 1 addition & 1 deletion ydb/core/blobstorage/vdisk/common/vdisk_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ namespace NKikimr {
case NKikimrProto::OK:
if constexpr (T::EventType != TEvBlobStorage::EvLogResult) {
// we have different semantics for TEvLogResult StatusFlags
OutOfSpaceState.UpdateLocal(ev.StatusFlags);
OutOfSpaceState.UpdateLocalChunk(ev.StatusFlags);
} else {
// update log space flags
OutOfSpaceState.UpdateLocalLog(ev.StatusFlags);
Expand Down
22 changes: 15 additions & 7 deletions ydb/core/blobstorage/vdisk/common/vdisk_outofspace.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,19 @@ namespace NKikimr {
return StatusFlagToSpaceColor(GetLocalStatusFlags());
}

ESpaceColor GetLocalLogColor() const {
return StatusFlagToSpaceColor(GetLocalLogStatusFlags());
}

// update state with flags received from local PDisk
void UpdateLocal(NPDisk::TStatusFlags flags) {
Update(SelfOrderNum, flags);
void UpdateLocalChunk(NPDisk::TStatusFlags flags) {
if (flags & NKikimrBlobStorage::StatusIsValid && flags != AtomicGet(ChunkFlags)) {
AtomicSet(ChunkFlags, flags);
Update(SelfOrderNum, flags | AtomicGet(LogFlags));
}
}

void UpdateLocalLog(NPDisk::TStatusFlags flags) {
AtomicSet(LogFlags, flags);
if (flags & NKikimrBlobStorage::StatusIsValid && flags != AtomicGet(LogFlags)) {
AtomicSet(LogFlags, flags);
Update(SelfOrderNum, flags | AtomicGet(ChunkFlags));
}
}

void UpdateLocalFreeSpaceShare(ui64 freeSpaceShare24bit) {
Expand All @@ -64,6 +66,10 @@ namespace NKikimr {
return static_cast<NPDisk::TStatusFlags>(AtomicGet(AllVDiskFlags[SelfOrderNum]));
}

NPDisk::TStatusFlags GetLocalChunkStatusFlags() const {
return static_cast<NPDisk::TStatusFlags>(AtomicGet(ChunkFlags));
}

NPDisk::TStatusFlags GetLocalLogStatusFlags() const {
return static_cast<NPDisk::TStatusFlags>(AtomicGet(LogFlags));
}
Expand All @@ -84,6 +90,8 @@ namespace NKikimr {
private:
// Log space flags.
TAtomic LogFlags = 0;
// Chunk space flags.
TAtomic ChunkFlags = 0;
// Flag for every VDisk in the BlobStorage group
TAtomic AllVDiskFlags[MaxVDisksInGroup];
// Cached global flags (obtained by merging AllVDiskFlags)
Expand Down
2 changes: 1 addition & 1 deletion ydb/core/blobstorage/vdisk/common/vdisk_outofspace_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ namespace NKikimr {
UNIT_ASSERT_EQUAL(state.GetGlobalColor(), TSpaceColor::GREEN);

NPDisk::TStatusFlags flags = NKikimrBlobStorage::StatusIsValid;
state.UpdateLocal(flags);
state.UpdateLocalChunk(flags);
UNIT_ASSERT_EQUAL(state.GetGlobalColor(), TSpaceColor::GREEN);
UNIT_ASSERT_EQUAL(state.GetLocalStatusFlags(), flags);
UNIT_ASSERT_EQUAL(state.GetGlobalStatusFlags().Flags, flags);
Expand Down
3 changes: 1 addition & 2 deletions ydb/core/blobstorage/vdisk/skeleton/skeleton_oos_logic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,7 @@ namespace NKikimr {
ESpaceColor TOutOfSpaceLogic::GetSpaceColor() const {
auto& oos = VCtx->GetOutOfSpaceState();
const ESpaceColor global = oos.GetGlobalColor();
const ESpaceColor log = oos.GetLocalLogColor();
return Max(log, global >= TSpaceColor::ORANGE ? global : oos.GetLocalColor());
return global >= TSpaceColor::ORANGE ? global : oos.GetLocalColor();
}

} // NKikimr
Expand Down
13 changes: 12 additions & 1 deletion ydb/core/blobstorage/vdisk/skeleton/skeleton_oos_tracker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ namespace NKikimr {

TotalChunks = msg->TotalChunks;
FreeChunks = msg->FreeChunks;
VCtx->OutOfSpaceState.UpdateLocal(msg->StatusFlags);
VCtx->OutOfSpaceState.UpdateLocalChunk(msg->StatusFlags);
VCtx->OutOfSpaceState.UpdateLocalLog(msg->LogStatusFlags);
VCtx->OutOfSpaceState.UpdateLocalFreeSpaceShare(ui64(1 << 24) * (1.0 - msg->Occupancy));
VCtx->OutOfSpaceState.UpdateLocalUsedChunks(msg->UsedChunks);
MonGroup.DskTotalBytes() = msg->TotalChunks * PDiskCtx->Dsk->ChunkSize;
Expand Down Expand Up @@ -126,6 +127,16 @@ namespace NKikimr {
TABLED() {str << "Local Disk State";}
TABLED() {str << StatusFlagToSpaceColor(flags);}
}
TABLER() {
auto flags = VCtx->OutOfSpaceState.GetLocalChunkStatusFlags();
TABLED() {str << "Local Disk State (chunks)";}
TABLED() {str << StatusFlagToSpaceColor(flags);}
}
TABLER() {
auto flags = VCtx->OutOfSpaceState.GetLocalLogStatusFlags();
TABLED() {str << "Local Disk State (log)";}
TABLED() {str << StatusFlagToSpaceColor(flags);}
}
TABLER() {
TABLED() {str << "Global BlobStorage Group State";}
TABLED() {str << StatusFlagToSpaceColor(oosStatus.Flags);}
Expand Down