1
1
#pragma once
2
2
3
3
#include " pdisk_state.h"
4
+ #include " pdisk_status.h"
4
5
5
6
#include < ydb/core/protos/cms.pb.h>
6
7
7
8
#include < util/datetime/base.h>
8
9
#include < util/generic/hash.h>
9
10
#include < util/generic/map.h>
11
+ #include < util/generic/maybe.h>
10
12
11
13
namespace NKikimr ::NCms {
12
14
@@ -30,6 +32,8 @@ struct TCmsSentinelConfig {
30
32
ui32 RoomRatio;
31
33
ui32 RackRatio;
32
34
35
+ TMaybeFail<EPDiskStatus> EvictVDisksStatus;
36
+
33
37
void Serialize (NKikimrCms::TCmsConfig::TSentinelConfig &config) const {
34
38
config.SetEnable (Enable);
35
39
config.SetDryRun (DryRun);
@@ -45,6 +49,7 @@ struct TCmsSentinelConfig {
45
49
config.SetRackRatio (RackRatio);
46
50
47
51
SaveStateLimits (config);
52
+ SaveEvictVDisksStatus (config);
48
53
}
49
54
50
55
void Deserialize (const NKikimrCms::TCmsConfig::TSentinelConfig &config) {
@@ -63,6 +68,8 @@ struct TCmsSentinelConfig {
63
68
64
69
auto newStateLimits = LoadStateLimits (config);
65
70
StateLimits.swap (newStateLimits);
71
+
72
+ EvictVDisksStatus = LoadEvictVDisksStatus (config);
66
73
}
67
74
68
75
void SaveStateLimits (NKikimrCms::TCmsConfig::TSentinelConfig &config) const {
@@ -129,6 +136,31 @@ struct TCmsSentinelConfig {
129
136
130
137
return stateLimits;
131
138
}
139
+
140
+ static TMaybeFail<EPDiskStatus> LoadEvictVDisksStatus (const NKikimrCms::TCmsConfig::TSentinelConfig &config) {
141
+ using EEvictVDisksStatus = NKikimrCms::TCmsConfig::TSentinelConfig;
142
+ switch (config.GetEvictVDisksStatus ()) {
143
+ case EEvictVDisksStatus::UNKNOWN:
144
+ case EEvictVDisksStatus::FAULTY:
145
+ return EPDiskStatus::FAULTY;
146
+ case EEvictVDisksStatus::DISABLED:
147
+ return Nothing ();
148
+ }
149
+ return EPDiskStatus::FAULTY;
150
+ }
151
+
152
+ void SaveEvictVDisksStatus (NKikimrCms::TCmsConfig::TSentinelConfig &config) const {
153
+ using EEvictVDisksStatus = NKikimrCms::TCmsConfig::TSentinelConfig;
154
+
155
+ if (EvictVDisksStatus.Empty ()) {
156
+ config.SetEvictVDisksStatus (EEvictVDisksStatus::DISABLED);
157
+ return ;
158
+ }
159
+
160
+ if (*EvictVDisksStatus == EPDiskStatus::FAULTY) {
161
+ config.SetEvictVDisksStatus (EEvictVDisksStatus::FAULTY);
162
+ }
163
+ }
132
164
};
133
165
134
166
struct TCmsLogConfig {
0 commit comments