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
3 changes: 3 additions & 0 deletions ydb/core/protos/filestore_config.proto
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ message TConfig {
optional uint32 PerformanceProfileMaxWriteCostMultiplier = 45;
optional uint32 PerformanceProfileMaxPostponedTime = 46;
optional uint32 PerformanceProfileMaxPostponedCount = 47;

// Indicates that filestore does not belong to user directly, but used for system needs
optional bool IsSystem = 48;
}

message TUpdateConfig {
Expand Down
7 changes: 6 additions & 1 deletion ydb/core/tx/schemeshard/schemeshard_info_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -2313,6 +2313,7 @@ struct TFileStoreInfo : public TSimpleRefCount<TFileStoreInfo> {
const auto alterSpace = GetFileStoreSpace(*AlterConfig);
space.SSD = Max(space.SSD, alterSpace.SSD);
space.HDD = Max(space.HDD, alterSpace.HDD);
space.SSDSystem = Max(space.SSDSystem, alterSpace.SSDSystem);
}

return space;
Expand All @@ -2326,7 +2327,11 @@ struct TFileStoreInfo : public TSimpleRefCount<TFileStoreInfo> {
TFileStoreSpace space;
switch (config.GetStorageMediaKind()) {
case 1: // STORAGE_MEDIA_SSD
space.SSD += blockCount * blockSize;
if (config.GetIsSystem()) {
space.SSDSystem += blockCount * blockSize;
} else {
space.SSD += blockCount * blockSize;
}
break;
case 2: // STORAGE_MEDIA_HYBRID
case 3: // STORAGE_MEDIA_HDD
Expand Down
11 changes: 10 additions & 1 deletion ydb/core/tx/schemeshard/schemeshard_path_element.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,7 @@ void TPathElement::ApplySpecialAttributes() {
VolumeSpaceSSDSystem.Limit = Max<ui64>();
FileStoreSpaceSSD.Limit = Max<ui64>();
FileStoreSpaceHDD.Limit = Max<ui64>();
FileStoreSpaceSSDSystem.Limit = Max<ui64>();
ExtraPathSymbolsAllowed = TString();
DocumentApiVersion = 0;
AsyncReplication = NJson::TJsonValue();
Expand Down Expand Up @@ -351,6 +352,9 @@ void TPathElement::ApplySpecialAttributes() {
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
HandleAttributeValue(value, FileStoreSpaceHDD.Limit);
break;
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
HandleAttributeValue(value, FileStoreSpaceSSDSystem.Limit);
break;
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
HandleAttributeValue(value, ExtraPathSymbolsAllowed);
break;
Expand Down Expand Up @@ -411,16 +415,19 @@ bool TPathElement::CheckVolumeSpaceChange(TVolumeSpace newSpace, TVolumeSpace ol
void TPathElement::ChangeFileStoreSpaceBegin(TFileStoreSpace newSpace, TFileStoreSpace oldSpace) {
UpdateSpaceBegin(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD);
UpdateSpaceBegin(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD);
UpdateSpaceBegin(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
}

void TPathElement::ChangeFileStoreSpaceCommit(TFileStoreSpace newSpace, TFileStoreSpace oldSpace) {
UpdateSpaceCommit(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD);
UpdateSpaceCommit(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD);
UpdateSpaceCommit(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
}

bool TPathElement::CheckFileStoreSpaceChange(TFileStoreSpace newSpace, TFileStoreSpace oldSpace, TString& errStr) {
return (CheckSpaceChanged(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD, errStr, "filestore", " (ssd)") &&
CheckSpaceChanged(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD, errStr, "filestore", " (hdd)"));
CheckSpaceChanged(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD, errStr, "filestore", " (hdd)") &&
CheckSpaceChanged(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem, errStr, "filestore", " (ssd_system)"));
}

void TPathElement::SetAsyncReplica(bool value) {
Expand All @@ -439,6 +446,7 @@ bool TPathElement::HasRuntimeAttrs() const {
VolumeSpaceSSDSystem.Allocated > 0 ||
FileStoreSpaceSSD.Allocated > 0 ||
FileStoreSpaceHDD.Allocated > 0 ||
FileStoreSpaceSSDSystem.Allocated > 0 ||
IsAsyncReplica);
}

Expand All @@ -463,6 +471,7 @@ void TPathElement::SerializeRuntimeAttrs(
// filestore
process(FileStoreSpaceSSD, "__filestore_space_allocated_ssd");
process(FileStoreSpaceHDD, "__filestore_space_allocated_hdd");
process(FileStoreSpaceSSDSystem, "__filestore_space_allocated_ssd_system");

if (IsAsyncReplica) {
auto* attr = userAttrs->Add();
Expand Down
2 changes: 2 additions & 0 deletions ydb/core/tx/schemeshard/schemeshard_path_element.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ struct TVolumeSpace {
struct TFileStoreSpace {
ui64 SSD = 0;
ui64 HDD = 0;
ui64 SSDSystem = 0;
};

struct TSpaceLimits {
Expand Down Expand Up @@ -78,6 +79,7 @@ struct TPathElement : TSimpleRefCount<TPathElement> {
TSpaceLimits VolumeSpaceSSDSystem;
TSpaceLimits FileStoreSpaceSSD;
TSpaceLimits FileStoreSpaceHDD;
TSpaceLimits FileStoreSpaceSSDSystem;
ui64 DocumentApiVersion = 0;
NJson::TJsonValue AsyncReplication;
bool IsAsyncReplica = false;
Expand Down
3 changes: 3 additions & 0 deletions ydb/core/tx/schemeshard/user_attributes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
HANDLE_ATTR(VOLUME_SPACE_LIMIT_SSD_SYSTEM);
HANDLE_ATTR(FILESTORE_SPACE_LIMIT_SSD);
HANDLE_ATTR(FILESTORE_SPACE_LIMIT_HDD);
HANDLE_ATTR(FILESTORE_SPACE_LIMIT_SSD_SYSTEM);
HANDLE_ATTR(EXTRA_PATH_SYMBOLS_ALLOWED);
HANDLE_ATTR(DOCUMENT_API_VERSION);
HANDLE_ATTR(ASYNC_REPLICATION);
Expand Down Expand Up @@ -130,6 +131,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
case EAttribute::FILESTORE_SPACE_LIMIT_SSD:
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
return CheckValueUint64(name, value, errStr);
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
return CheckValueStringWeak(name, value, errStr);
Expand Down Expand Up @@ -175,6 +177,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
case EAttribute::FILESTORE_SPACE_LIMIT_SSD:
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
return true;
case EAttribute::DOCUMENT_API_VERSION:
Expand Down
2 changes: 2 additions & 0 deletions ydb/core/tx/schemeshard/user_attributes.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ constexpr TStringBuf ATTR_VOLUME_SPACE_LIMIT_SSD_NONREPL = "__volume_space_limit
constexpr TStringBuf ATTR_VOLUME_SPACE_LIMIT_SSD_SYSTEM = "__volume_space_limit_ssd_system";
constexpr TStringBuf ATTR_FILESTORE_SPACE_LIMIT_SSD = "__filestore_space_limit_ssd";
constexpr TStringBuf ATTR_FILESTORE_SPACE_LIMIT_HDD = "__filestore_space_limit_hdd";
constexpr TStringBuf ATTR_FILESTORE_SPACE_LIMIT_SSD_SYSTEM = "__filestore_space_limit_ssd_system";
constexpr TStringBuf ATTR_EXTRA_PATH_SYMBOLS_ALLOWED = "__extra_path_symbols_allowed";
constexpr TStringBuf ATTR_DOCUMENT_API_VERSION = "__document_api_version";
constexpr TStringBuf ATTR_ASYNC_REPLICATION = "__async_replication";
Expand All @@ -36,6 +37,7 @@ enum class EAttribute {
FILESTORE_SPACE_LIMIT_HDD,
ASYNC_REPLICA,
INCREMENTAL_BACKUP,
FILESTORE_SPACE_LIMIT_SSD_SYSTEM,
};

enum class EUserAttributesOp {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,11 @@ void InitAlterFileStoreConfig(NKikimrFileStore::TConfig& vc, bool channels = fal
}
}

void CheckLimits(ui64 correctType, ui64 incorrectType) {
const TString typeStr = correctType == 1 ? "ssd" : "hdd";
void CheckLimits(ui64 correctType, ui64 incorrectType, bool isSystem = false) {
const TString typeStr =
correctType == 1 ?
(isSystem ? "ssd_system" : "ssd") :
"hdd";

TTestBasicRuntime runtime;
TTestEnv env(runtime);
Expand All @@ -72,6 +75,7 @@ void CheckLimits(ui64 correctType, ui64 incorrectType) {
vc.SetBlockSize(4_KB);
vc.SetBlocksCount(100500);
vc.AddExplicitChannelProfiles()->SetPoolKind("pool-kind-1");
vc.SetIsSystem(isSystem);

vdescr.SetName("FSOther");
TestCreateFileStore(runtime, ++txId, "/MyRoot", vdescr.DebugString());
Expand Down Expand Up @@ -352,8 +356,10 @@ Y_UNIT_TEST_SUITE(TFileStoreWithReboots) {
}

Y_UNIT_TEST(CheckFileStoreSSDLimits) {
CheckLimits(1, 3); // ssd, hdd
CheckLimits(1, 2); // ssd, hybrid
CheckLimits(1, 3, false); // ssd, hdd
CheckLimits(1, 3, true); // ssd_system, hdd
CheckLimits(1, 2, false); // ssd, hybrid
CheckLimits(1, 2, true); // ssd_system, hybrid
}

Y_UNIT_TEST(CheckFileStoreHDDLimits) {
Expand Down
Loading