Skip to content

Commit 1596d25

Browse files
Mikhail MontsevSvartMetal
authored andcommitted
Add IsSystem flag to filestore config; support __filestore_space_limit_ssd_system limit in SchemeShard (ydb-platform#12693)
1 parent ac54f9f commit 1596d25

File tree

7 files changed

+36
-6
lines changed

7 files changed

+36
-6
lines changed

ydb/core/protos/filestore_config.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ message TConfig {
5252
optional uint32 PerformanceProfileMaxWriteCostMultiplier = 45;
5353
optional uint32 PerformanceProfileMaxPostponedTime = 46;
5454
optional uint32 PerformanceProfileMaxPostponedCount = 47;
55+
56+
// Indicates that filestore does not belong to user directly, but used for system needs
57+
optional bool IsSystem = 48;
5558
}
5659

5760
message TUpdateConfig {

ydb/core/tx/schemeshard/schemeshard_info_types.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2301,6 +2301,7 @@ struct TFileStoreInfo : public TSimpleRefCount<TFileStoreInfo> {
23012301
const auto alterSpace = GetFileStoreSpace(*AlterConfig);
23022302
space.SSD = Max(space.SSD, alterSpace.SSD);
23032303
space.HDD = Max(space.HDD, alterSpace.HDD);
2304+
space.SSDSystem = Max(space.SSDSystem, alterSpace.SSDSystem);
23042305
}
23052306

23062307
return space;
@@ -2314,7 +2315,11 @@ struct TFileStoreInfo : public TSimpleRefCount<TFileStoreInfo> {
23142315
TFileStoreSpace space;
23152316
switch (config.GetStorageMediaKind()) {
23162317
case 1: // STORAGE_MEDIA_SSD
2317-
space.SSD += blockCount * blockSize;
2318+
if (config.GetIsSystem()) {
2319+
space.SSDSystem += blockCount * blockSize;
2320+
} else {
2321+
space.SSD += blockCount * blockSize;
2322+
}
23182323
break;
23192324
case 2: // STORAGE_MEDIA_HYBRID
23202325
case 3: // STORAGE_MEDIA_HDD

ydb/core/tx/schemeshard/schemeshard_path_element.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ void TPathElement::ApplySpecialAttributes() {
312312
VolumeSpaceSSDSystem.Limit = Max<ui64>();
313313
FileStoreSpaceSSD.Limit = Max<ui64>();
314314
FileStoreSpaceHDD.Limit = Max<ui64>();
315+
FileStoreSpaceSSDSystem.Limit = Max<ui64>();
315316
ExtraPathSymbolsAllowed = TString();
316317
DocumentApiVersion = 0;
317318
AsyncReplication = NJson::TJsonValue();
@@ -339,6 +340,9 @@ void TPathElement::ApplySpecialAttributes() {
339340
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
340341
HandleAttributeValue(value, FileStoreSpaceHDD.Limit);
341342
break;
343+
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
344+
HandleAttributeValue(value, FileStoreSpaceSSDSystem.Limit);
345+
break;
342346
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
343347
HandleAttributeValue(value, ExtraPathSymbolsAllowed);
344348
break;
@@ -399,16 +403,19 @@ bool TPathElement::CheckVolumeSpaceChange(TVolumeSpace newSpace, TVolumeSpace ol
399403
void TPathElement::ChangeFileStoreSpaceBegin(TFileStoreSpace newSpace, TFileStoreSpace oldSpace) {
400404
UpdateSpaceBegin(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD);
401405
UpdateSpaceBegin(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD);
406+
UpdateSpaceBegin(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
402407
}
403408

404409
void TPathElement::ChangeFileStoreSpaceCommit(TFileStoreSpace newSpace, TFileStoreSpace oldSpace) {
405410
UpdateSpaceCommit(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD);
406411
UpdateSpaceCommit(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD);
412+
UpdateSpaceCommit(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
407413
}
408414

409415
bool TPathElement::CheckFileStoreSpaceChange(TFileStoreSpace newSpace, TFileStoreSpace oldSpace, TString& errStr) {
410416
return (CheckSpaceChanged(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD, errStr, "filestore", " (ssd)") &&
411-
CheckSpaceChanged(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD, errStr, "filestore", " (hdd)"));
417+
CheckSpaceChanged(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD, errStr, "filestore", " (hdd)") &&
418+
CheckSpaceChanged(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem, errStr, "filestore", " (ssd_system)"));
412419
}
413420

414421
void TPathElement::SetAsyncReplica(bool value) {
@@ -423,6 +430,7 @@ bool TPathElement::HasRuntimeAttrs() const {
423430
VolumeSpaceSSDSystem.Allocated > 0 ||
424431
FileStoreSpaceSSD.Allocated > 0 ||
425432
FileStoreSpaceHDD.Allocated > 0 ||
433+
FileStoreSpaceSSDSystem.Allocated > 0 ||
426434
IsAsyncReplica);
427435
}
428436

@@ -447,6 +455,7 @@ void TPathElement::SerializeRuntimeAttrs(
447455
// filestore
448456
process(FileStoreSpaceSSD, "__filestore_space_allocated_ssd");
449457
process(FileStoreSpaceHDD, "__filestore_space_allocated_hdd");
458+
process(FileStoreSpaceSSDSystem, "__filestore_space_allocated_ssd_system");
450459

451460
if (IsAsyncReplica) {
452461
auto* attr = userAttrs->Add();

ydb/core/tx/schemeshard/schemeshard_path_element.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ struct TVolumeSpace {
2626
struct TFileStoreSpace {
2727
ui64 SSD = 0;
2828
ui64 HDD = 0;
29+
ui64 SSDSystem = 0;
2930
};
3031

3132
struct TSpaceLimits {
@@ -78,6 +79,7 @@ struct TPathElement : TSimpleRefCount<TPathElement> {
7879
TSpaceLimits VolumeSpaceSSDSystem;
7980
TSpaceLimits FileStoreSpaceSSD;
8081
TSpaceLimits FileStoreSpaceHDD;
82+
TSpaceLimits FileStoreSpaceSSDSystem;
8183
ui64 DocumentApiVersion = 0;
8284
NJson::TJsonValue AsyncReplication;
8385
bool IsAsyncReplica = false;

ydb/core/tx/schemeshard/user_attributes.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
5353
HANDLE_ATTR(VOLUME_SPACE_LIMIT_SSD_SYSTEM);
5454
HANDLE_ATTR(FILESTORE_SPACE_LIMIT_SSD);
5555
HANDLE_ATTR(FILESTORE_SPACE_LIMIT_HDD);
56+
HANDLE_ATTR(FILESTORE_SPACE_LIMIT_SSD_SYSTEM);
5657
HANDLE_ATTR(EXTRA_PATH_SYMBOLS_ALLOWED);
5758
HANDLE_ATTR(DOCUMENT_API_VERSION);
5859
HANDLE_ATTR(ASYNC_REPLICATION);
@@ -129,6 +130,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
129130
case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
130131
case EAttribute::FILESTORE_SPACE_LIMIT_SSD:
131132
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
133+
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
132134
return CheckValueUint64(name, value, errStr);
133135
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
134136
return CheckValueStringWeak(name, value, errStr);
@@ -171,6 +173,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
171173
case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
172174
case EAttribute::FILESTORE_SPACE_LIMIT_SSD:
173175
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
176+
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
174177
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
175178
return true;
176179
case EAttribute::DOCUMENT_API_VERSION:

ydb/core/tx/schemeshard/user_attributes.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ constexpr TStringBuf ATTR_VOLUME_SPACE_LIMIT_SSD_NONREPL = "__volume_space_limit
1515
constexpr TStringBuf ATTR_VOLUME_SPACE_LIMIT_SSD_SYSTEM = "__volume_space_limit_ssd_system";
1616
constexpr TStringBuf ATTR_FILESTORE_SPACE_LIMIT_SSD = "__filestore_space_limit_ssd";
1717
constexpr TStringBuf ATTR_FILESTORE_SPACE_LIMIT_HDD = "__filestore_space_limit_hdd";
18+
constexpr TStringBuf ATTR_FILESTORE_SPACE_LIMIT_SSD_SYSTEM = "__filestore_space_limit_ssd_system";
1819
constexpr TStringBuf ATTR_EXTRA_PATH_SYMBOLS_ALLOWED = "__extra_path_symbols_allowed";
1920
constexpr TStringBuf ATTR_DOCUMENT_API_VERSION = "__document_api_version";
2021
constexpr TStringBuf ATTR_ASYNC_REPLICATION = "__async_replication";
@@ -34,6 +35,7 @@ enum class EAttribute {
3435
FILESTORE_SPACE_LIMIT_SSD,
3536
FILESTORE_SPACE_LIMIT_HDD,
3637
ASYNC_REPLICA,
38+
FILESTORE_SPACE_LIMIT_SSD_SYSTEM,
3739
};
3840

3941
enum class EUserAttributesOp {

ydb/core/tx/schemeshard/ut_filestore_reboots/ut_filestore_reboots.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,11 @@ void InitAlterFileStoreConfig(NKikimrFileStore::TConfig& vc, bool channels = fal
4747
}
4848
}
4949

50-
void CheckLimits(ui64 correctType, ui64 incorrectType) {
51-
const TString typeStr = correctType == 1 ? "ssd" : "hdd";
50+
void CheckLimits(ui64 correctType, ui64 incorrectType, bool isSystem = false) {
51+
const TString typeStr =
52+
correctType == 1 ?
53+
(isSystem ? "ssd_system" : "ssd") :
54+
"hdd";
5255

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

7680
vdescr.SetName("FSOther");
7781
TestCreateFileStore(runtime, ++txId, "/MyRoot", vdescr.DebugString());
@@ -352,8 +356,10 @@ Y_UNIT_TEST_SUITE(TFileStoreWithReboots) {
352356
}
353357

354358
Y_UNIT_TEST(CheckFileStoreSSDLimits) {
355-
CheckLimits(1, 3); // ssd, hdd
356-
CheckLimits(1, 2); // ssd, hybrid
359+
CheckLimits(1, 3, false); // ssd, hdd
360+
CheckLimits(1, 3, true); // ssd_system, hdd
361+
CheckLimits(1, 2, false); // ssd, hybrid
362+
CheckLimits(1, 2, true); // ssd_system, hybrid
357363
}
358364

359365
Y_UNIT_TEST(CheckFileStoreHDDLimits) {

0 commit comments

Comments
 (0)