Skip to content

Commit ab00ae5

Browse files
Mikhail MontsevMikhail Montsev
andauthored
Add IsSystem flag to filestore config; support __filestore_space_limit_ssd_system limit in SchemeShard (#12693)
Co-authored-by: Mikhail Montsev <svartmetal@github.com>
1 parent 22f4d0c commit ab00ae5

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
@@ -2316,6 +2316,7 @@ struct TFileStoreInfo : public TSimpleRefCount<TFileStoreInfo> {
23162316
const auto alterSpace = GetFileStoreSpace(*AlterConfig);
23172317
space.SSD = Max(space.SSD, alterSpace.SSD);
23182318
space.HDD = Max(space.HDD, alterSpace.HDD);
2319+
space.SSDSystem = Max(space.SSDSystem, alterSpace.SSDSystem);
23192320
}
23202321

23212322
return space;
@@ -2329,7 +2330,11 @@ struct TFileStoreInfo : public TSimpleRefCount<TFileStoreInfo> {
23292330
TFileStoreSpace space;
23302331
switch (config.GetStorageMediaKind()) {
23312332
case 1: // STORAGE_MEDIA_SSD
2332-
space.SSD += blockCount * blockSize;
2333+
if (config.GetIsSystem()) {
2334+
space.SSDSystem += blockCount * blockSize;
2335+
} else {
2336+
space.SSD += blockCount * blockSize;
2337+
}
23332338
break;
23342339
case 2: // STORAGE_MEDIA_HYBRID
23352340
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
@@ -328,6 +328,7 @@ void TPathElement::ApplySpecialAttributes() {
328328
VolumeSpaceSSDSystem.Limit = Max<ui64>();
329329
FileStoreSpaceSSD.Limit = Max<ui64>();
330330
FileStoreSpaceHDD.Limit = Max<ui64>();
331+
FileStoreSpaceSSDSystem.Limit = Max<ui64>();
331332
ExtraPathSymbolsAllowed = TString();
332333
DocumentApiVersion = 0;
333334
AsyncReplication = NJson::TJsonValue();
@@ -355,6 +356,9 @@ void TPathElement::ApplySpecialAttributes() {
355356
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
356357
HandleAttributeValue(value, FileStoreSpaceHDD.Limit);
357358
break;
359+
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
360+
HandleAttributeValue(value, FileStoreSpaceSSDSystem.Limit);
361+
break;
358362
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
359363
HandleAttributeValue(value, ExtraPathSymbolsAllowed);
360364
break;
@@ -415,16 +419,19 @@ bool TPathElement::CheckVolumeSpaceChange(TVolumeSpace newSpace, TVolumeSpace ol
415419
void TPathElement::ChangeFileStoreSpaceBegin(TFileStoreSpace newSpace, TFileStoreSpace oldSpace) {
416420
UpdateSpaceBegin(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD);
417421
UpdateSpaceBegin(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD);
422+
UpdateSpaceBegin(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
418423
}
419424

420425
void TPathElement::ChangeFileStoreSpaceCommit(TFileStoreSpace newSpace, TFileStoreSpace oldSpace) {
421426
UpdateSpaceCommit(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD);
422427
UpdateSpaceCommit(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD);
428+
UpdateSpaceCommit(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem);
423429
}
424430

425431
bool TPathElement::CheckFileStoreSpaceChange(TFileStoreSpace newSpace, TFileStoreSpace oldSpace, TString& errStr) {
426432
return (CheckSpaceChanged(FileStoreSpaceSSD, newSpace.SSD, oldSpace.SSD, errStr, "filestore", " (ssd)") &&
427-
CheckSpaceChanged(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD, errStr, "filestore", " (hdd)"));
433+
CheckSpaceChanged(FileStoreSpaceHDD, newSpace.HDD, oldSpace.HDD, errStr, "filestore", " (hdd)") &&
434+
CheckSpaceChanged(FileStoreSpaceSSDSystem, newSpace.SSDSystem, oldSpace.SSDSystem, errStr, "filestore", " (ssd_system)"));
428435
}
429436

430437
void TPathElement::SetAsyncReplica(bool value) {
@@ -443,6 +450,7 @@ bool TPathElement::HasRuntimeAttrs() const {
443450
VolumeSpaceSSDSystem.Allocated > 0 ||
444451
FileStoreSpaceSSD.Allocated > 0 ||
445452
FileStoreSpaceHDD.Allocated > 0 ||
453+
FileStoreSpaceSSDSystem.Allocated > 0 ||
446454
IsAsyncReplica);
447455
}
448456

@@ -467,6 +475,7 @@ void TPathElement::SerializeRuntimeAttrs(
467475
// filestore
468476
process(FileStoreSpaceSSD, "__filestore_space_allocated_ssd");
469477
process(FileStoreSpaceHDD, "__filestore_space_allocated_hdd");
478+
process(FileStoreSpaceSSDSystem, "__filestore_space_allocated_ssd_system");
470479

471480
if (IsAsyncReplica) {
472481
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);
@@ -130,6 +131,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
130131
case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
131132
case EAttribute::FILESTORE_SPACE_LIMIT_SSD:
132133
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
134+
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
133135
return CheckValueUint64(name, value, errStr);
134136
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
135137
return CheckValueStringWeak(name, value, errStr);
@@ -175,6 +177,7 @@ inline bool IsValidPathName_WeakCheck(const TString& name) {
175177
case EAttribute::VOLUME_SPACE_LIMIT_SSD_SYSTEM:
176178
case EAttribute::FILESTORE_SPACE_LIMIT_SSD:
177179
case EAttribute::FILESTORE_SPACE_LIMIT_HDD:
180+
case EAttribute::FILESTORE_SPACE_LIMIT_SSD_SYSTEM:
178181
case EAttribute::EXTRA_PATH_SYMBOLS_ALLOWED:
179182
return true;
180183
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";
@@ -36,6 +37,7 @@ enum class EAttribute {
3637
FILESTORE_SPACE_LIMIT_HDD,
3738
ASYNC_REPLICA,
3839
INCREMENTAL_BACKUP,
40+
FILESTORE_SPACE_LIMIT_SSD_SYSTEM,
3941
};
4042

4143
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)