Skip to content

Commit a54897f

Browse files
committed
Move balancing settings to blobstorage config
1 parent 844d30b commit a54897f

File tree

11 files changed

+134
-66
lines changed

11 files changed

+134
-66
lines changed

ydb/core/blobstorage/nodewarden/node_warden_vdisk.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,19 @@ namespace NKikimr::NStorage {
210210
}
211211
}
212212

213+
vdiskConfig->BalancingEnableSend = Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetEnableSend();
214+
vdiskConfig->BalancingEnableDelete = Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetEnableDelete();
215+
vdiskConfig->BalancingBalanceOnlyHugeBlobs = Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetBalanceOnlyHugeBlobs();
216+
vdiskConfig->BalancingJobGranularity = TDuration::MicroSeconds(Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetJobGranularityUs());
217+
vdiskConfig->BalancingBatchSize = Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetBatchSize();
218+
vdiskConfig->BalancingMaxToSendPerEpoch = Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetMaxToSendPerEpoch();
219+
vdiskConfig->BalancingMaxToDeletePerEpoch = Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetMaxToDeletePerEpoch();
220+
vdiskConfig->BalancingReadBatchTimeout = TDuration::MilliSeconds(Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetReadBatchTimeoutMs());
221+
vdiskConfig->BalancingSendBatchTimeout = TDuration::MilliSeconds(Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetSendBatchTimeoutMs());
222+
vdiskConfig->BalancingRequestBlobsOnMainTimeout = TDuration::MilliSeconds(Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetRequestBlobsOnMainTimeoutMs());
223+
vdiskConfig->BalancingDeleteBatchTimeout = TDuration::MilliSeconds(Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetDeleteBatchTimeoutMs());
224+
vdiskConfig->BalancingEpochTimeout = TDuration::MilliSeconds(Cfg->BlobStorageConfig.GetVDiskBalancingConfig().GetEpochTimeoutMs());
225+
213226
// issue initial report to whiteboard before creating actor to avoid races
214227
Send(WhiteboardId, new NNodeWhiteboard::TEvWhiteboard::TEvVDiskStateUpdate(vdiskId, groupInfo->GetStoragePoolName(),
215228
vslotId.PDiskId, vslotId.VDiskSlotId, pdiskGuid, kind, donorMode, whiteboardInstanceGuid, std::move(donors)));

ydb/core/blobstorage/ut_blobstorage/balancing.cpp

+6-7
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,12 @@ struct TTestEnv {
3131
.NodeCount = nodeCount,
3232
.VDiskReplPausedAtStart = false,
3333
.Erasure = erasure,
34-
.FeatureFlags = MakeFeatureFlags(),
34+
.ConfigPreprocessor = [](ui32, TNodeWardenConfig& conf) {
35+
auto* balancingConf = conf.BlobStorageConfig.MutableVDiskBalancingConfig();
36+
balancingConf->SetEnableSend(true);
37+
balancingConf->SetEnableDelete(true);
38+
balancingConf->SetBalanceOnlyHugeBlobs(false);
39+
},
3540
})
3641
{
3742
Env.CreateBoxAndPool(1, 1);
@@ -46,12 +51,6 @@ struct TTestEnv {
4651
}
4752
}
4853

49-
static TFeatureFlags MakeFeatureFlags() {
50-
TFeatureFlags res;
51-
res.SetUseVDisksBalancing(true);
52-
return res;
53-
}
54-
5554
static TString PrepareData(const ui32 dataLen, const ui32 start) {
5655
TString data(Reserve(dataLen));
5756
for (ui32 i = 0; i < dataLen; ++i) {

ydb/core/blobstorage/vdisk/balance/balancing_actor.cpp

+33-29
Original file line numberDiff line numberDiff line change
@@ -126,62 +126,66 @@ namespace NBalancing {
126126
return;
127127
}
128128

129+
const auto& top = GInfo->GetTopology();
130+
TPartsCollectorMerger merger(top.GType);
129131
THPTimer timer;
130132

131133
for (ui32 cnt = 0; It.Valid(); It.Next(), ++cnt) {
132-
if (cnt % 128 == 127 && TDuration::Seconds(timer.Passed()) > JOB_GRANULARITY) {
134+
if (cnt % 128 == 127 && TDuration::Seconds(timer.Passed()) > Ctx->Cfg.JobGranularity) {
133135
// actor should not block the thread for a long time, so we should yield
134136
STLOG(PRI_DEBUG, BS_VDISK_BALANCING, BSVB04, VDISKP(Ctx->VCtx, "Collect keys"), (collected, cnt), (passed, timer.Passed()));
135137
Send(SelfId(), new NActors::TEvents::TEvWakeup());
136138
return;
137139
}
138140

139-
const auto& top = GInfo->GetTopology();
140141
const auto& key = It.GetCurKey().LogoBlobID();
141142

142-
if (BALANCE_ONLY_HUGE_BLOBS && !Ctx->HugeBlobCtx->IsHugeBlob(GInfo->Type, key, Ctx->MinREALHugeBlobInBytes)) {
143+
if (Ctx->Cfg.BalanceOnlyHugeBlobs && !Ctx->HugeBlobCtx->IsHugeBlob(GInfo->Type, key, Ctx->MinREALHugeBlobInBytes)) {
143144
// skip non huge blobs
144145
continue;
145146
}
146147

147-
TPartsCollectorMerger merger(top.GType);
148148
It.PutToMerger(&merger);
149149

150150
auto [moveMask, delMask] = merger.Ingress.HandoffParts(&top, Ctx->VCtx->ShortSelfVDisk, key);
151151

152-
if (auto partsToSend = merger.Ingress.LocalParts(top.GType) & moveMask; !partsToSend.Empty() && SendOnMainParts.Size() < MAX_TO_SEND_PER_EPOCH) {
153-
// collect parts to send on main
154-
for (const auto& [parts, data]: merger.Parts) {
155-
if (!(partsToSend & parts).Empty()) {
156-
SendOnMainParts.Data.emplace_back(TPartInfo{
157-
.Key=It.GetCurKey().LogoBlobID(),
158-
.PartsMask=parts,
159-
.PartData=data
160-
});
152+
// collect parts to send on main
153+
if (Ctx->Cfg.EnableSend && SendOnMainParts.Size() < Ctx->Cfg.MaxToSendPerEpoch) {
154+
if (auto partsToSend = merger.Ingress.LocalParts(top.GType) & moveMask; !partsToSend.Empty()) {
155+
for (const auto& [parts, data]: merger.Parts) {
156+
if (!(partsToSend & parts).Empty()) {
157+
SendOnMainParts.Data.emplace_back(TPartInfo{
158+
.Key=It.GetCurKey().LogoBlobID(),
159+
.PartsMask=parts,
160+
.PartData=data
161+
});
162+
}
161163
}
162164
}
163165
}
164166

165-
if (auto partsToDelete = merger.Ingress.LocalParts(top.GType) & delMask; !partsToDelete.Empty() && TryDeleteParts.Size() < MAX_TO_DELETE_PER_EPOCH) {
166-
// collect parts to delete
167-
auto key = It.GetCurKey().LogoBlobID();
168-
for (ui8 partIdx = partsToDelete.FirstPosition(); partIdx < partsToDelete.GetSize(); partIdx = partsToDelete.NextPosition(partIdx)) {
169-
TryDeleteParts.Data.emplace_back(TLogoBlobID(key, partIdx + 1));
170-
STLOG(PRI_DEBUG, BS_VDISK_BALANCING, BSVB10, VDISKP(Ctx->VCtx, "Delete"), (LogoBlobId, TryDeleteParts.Data.back().ToString()));
171-
}
167+
// collect parts to delete
168+
if (Ctx->Cfg.EnableDelete && TryDeleteParts.Size() < Ctx->Cfg.MaxToDeletePerEpoch) {
169+
if (auto partsToDelete = merger.Ingress.LocalParts(top.GType) & delMask; !partsToDelete.Empty()) {
170+
auto key = It.GetCurKey().LogoBlobID();
171+
for (ui8 partIdx = partsToDelete.FirstPosition(); partIdx < partsToDelete.GetSize(); partIdx = partsToDelete.NextPosition(partIdx)) {
172+
TryDeleteParts.Data.emplace_back(TLogoBlobID(key, partIdx + 1));
173+
STLOG(PRI_DEBUG, BS_VDISK_BALANCING, BSVB10, VDISKP(Ctx->VCtx, "Delete"), (LogoBlobId, TryDeleteParts.Data.back().ToString()));
174+
}
172175

173-
for (const auto& [parts, data]: merger.Parts) {
174-
if (!(partsToDelete & parts).Empty()) {
175-
TryDeletePartsFullData[key].emplace_back(TPartInfo{
176-
.Key=key, .PartsMask=parts, .PartData=data
177-
});
176+
for (const auto& [parts, data]: merger.Parts) {
177+
if (!(partsToDelete & parts).Empty()) {
178+
TryDeletePartsFullData[key].emplace_back(TPartInfo{
179+
.Key=key, .PartsMask=parts, .PartData=data
180+
});
181+
}
178182
}
179183
}
180184
}
181185

182186
merger.Clear();
183187

184-
if (SendOnMainParts.Size() >= MAX_TO_SEND_PER_EPOCH && TryDeleteParts.Size() >= MAX_TO_DELETE_PER_EPOCH) {
188+
if (SendOnMainParts.Size() >= Ctx->Cfg.MaxToSendPerEpoch && TryDeleteParts.Size() >= Ctx->Cfg.MaxToDeletePerEpoch) {
185189
// reached the limit of parts to send and delete
186190
break;
187191
}
@@ -198,7 +202,7 @@ namespace NBalancing {
198202
STLOG(PRI_INFO, BS_VDISK_BALANCING, BSVB04, VDISKP(Ctx->VCtx, "TEvCompleted"), (Type, ev->Type));
199203
BatchManager.Handle(ev);
200204

201-
if (StartTime + EPOCH_TIMEOUT < TlsActivationContext->Now()) {
205+
if (StartTime + Ctx->Cfg.EpochTimeout < TlsActivationContext->Now()) {
202206
Ctx->MonGroup.EpochTimeouts()++;
203207
Send(MakeBlobStorageReplBrokerID(), new TEvReleaseReplToken);
204208
STLOG(PRI_INFO, BS_VDISK_BALANCING, BSVB04, VDISKP(Ctx->VCtx, "Epoch timeout"));
@@ -309,8 +313,8 @@ namespace NBalancing {
309313
, Ctx(ctx)
310314
, GInfo(ctx->GInfo)
311315
, It(Ctx->Snap.HullCtx, &Ctx->Snap.LogoBlobsSnap)
312-
, SendOnMainParts(BATCH_SIZE)
313-
, TryDeleteParts(BATCH_SIZE)
316+
, SendOnMainParts(Ctx->Cfg.BatchSize)
317+
, TryDeleteParts(Ctx->Cfg.BatchSize)
314318
, StartTime(TlsActivationContext->Now())
315319
{
316320
}

ydb/core/blobstorage/vdisk/balance/defs.h

+23-20
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,27 @@
88

99

1010
namespace NKikimr {
11+
12+
struct TBalancingCfg {
13+
bool EnableSend;
14+
bool EnableDelete;
15+
16+
bool BalanceOnlyHugeBlobs;
17+
TDuration JobGranularity;
18+
19+
ui64 BatchSize;
20+
ui64 MaxToSendPerEpoch;
21+
ui64 MaxToDeletePerEpoch;
22+
23+
TDuration ReadBatchTimeout;
24+
TDuration SendBatchTimeout;
25+
TDuration RequestBlobsOnMainTimeout;
26+
TDuration DeleteBatchTimeout;
27+
TDuration EpochTimeout;
28+
};
29+
1130
struct TBalancingCtx {
31+
const TBalancingCfg Cfg;
1232
TIntrusivePtr<TVDiskContext> VCtx;
1333
TPDiskCtxPtr PDiskCtx;
1434
THugeBlobCtxPtr HugeBlobCtx;
@@ -23,6 +43,7 @@ namespace NKikimr {
2343
ui32 MinREALHugeBlobInBytes;
2444

2545
TBalancingCtx(
46+
const TBalancingCfg& cfg,
2647
TIntrusivePtr<TVDiskContext> vCtx,
2748
TPDiskCtxPtr pDiskCtx,
2849
THugeBlobCtxPtr hugeBlobCtx,
@@ -32,7 +53,8 @@ namespace NKikimr {
3253
TIntrusivePtr<TBlobStorageGroupInfo> gInfo,
3354
ui32 minREALHugeBlobInBytes
3455
)
35-
: VCtx(std::move(vCtx))
56+
: Cfg(cfg)
57+
, VCtx(std::move(vCtx))
3658
, PDiskCtx(std::move(pDiskCtx))
3759
, HugeBlobCtx(std::move(hugeBlobCtx))
3860
, SkeletonId(skeletonId)
@@ -55,30 +77,11 @@ namespace NBalancing {
5577
std::variant<TDiskPart, TRope> PartData;
5678
};
5779

58-
static constexpr ui32 SENDER_ID = 0;
59-
static constexpr ui32 DELETER_ID = 1;
60-
61-
static constexpr TDuration JOB_GRANULARITY = TDuration::MilliSeconds(1);
62-
63-
static constexpr TDuration READ_BATCH_TIMEOUT = TDuration::Seconds(10);
64-
static constexpr TDuration SEND_BATCH_TIMEOUT = TDuration::Seconds(10);
65-
static constexpr TDuration REQUEST_BLOBS_ON_MAIN_BATCH_TIMEOUT = TDuration::Seconds(10);
66-
static constexpr TDuration DELETE_BATCH_TIMEOUT = TDuration::Seconds(10);
67-
6880
static constexpr ui64 READ_TIMEOUT_TAG = 0;
6981
static constexpr ui64 SEND_TIMEOUT_TAG = 1;
7082
static constexpr ui64 REQUEST_TIMEOUT_TAG = 2;
7183
static constexpr ui64 DELETE_TIMEOUT_TAG = 3;
7284

73-
static constexpr ui32 BATCH_SIZE = 32;
74-
75-
static constexpr ui32 MAX_TO_SEND_PER_EPOCH = 1000;
76-
static constexpr ui32 MAX_TO_DELETE_PER_EPOCH = 1000;
77-
static constexpr TDuration EPOCH_TIMEOUT = TDuration::Minutes(1);
78-
79-
static constexpr bool BALANCE_ONLY_HUGE_BLOBS = true;
80-
81-
8285
struct TEvBalancingSendPartsOnMain : TEventLocal<TEvBalancingSendPartsOnMain, TEvBlobStorage::EvBalancingSendPartsOnMain> {
8386
TEvBalancingSendPartsOnMain(const TVector<TLogoBlobID>& ids)
8487
: Ids(ids)

ydb/core/blobstorage/vdisk/balance/deleter.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ namespace {
186186

187187
PartsRequester.SendRequestsToCheckPartsOnMain(SelfId());
188188

189-
Schedule(TDuration::Seconds(15), new NActors::TEvents::TEvWakeup(REQUEST_TIMEOUT_TAG)); // read timeout
189+
Schedule(Ctx->Cfg.RequestBlobsOnMainTimeout, new NActors::TEvents::TEvWakeup(REQUEST_TIMEOUT_TAG)); // read timeout
190190
}
191191

192192
void Handle(TEvBlobStorage::TEvVGetResult::TPtr ev) {
@@ -248,7 +248,7 @@ namespace {
248248

249249
PartsDeleter.DeleteParts(SelfId(), PartsRequester.GetResult());
250250

251-
Schedule(TDuration::Seconds(15), new NActors::TEvents::TEvWakeup(DELETE_TIMEOUT_TAG)); // delete timeout
251+
Schedule(Ctx->Cfg.DeleteBatchTimeout, new NActors::TEvents::TEvWakeup(DELETE_TIMEOUT_TAG)); // delete timeout
252252
}
253253

254254
void HandleDelLogoBlobResult(TEvDelLogoBlobDataSyncLogResult::TPtr ev) {
@@ -269,7 +269,7 @@ namespace {
269269
}
270270

271271
void PassAway() override {
272-
Send(NotifyId, new NActors::TEvents::TEvCompleted(DELETER_ID));
272+
Send(NotifyId, new NActors::TEvents::TEvCompleted());
273273
STLOG(PRI_INFO, BS_VDISK_BALANCING, BSVB32, VDISKP(Ctx->VCtx, "TDeleter::PassAway"));
274274
TActorBootstrapped::PassAway();
275275
}

ydb/core/blobstorage/vdisk/balance/sender.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ namespace {
249249
return;
250250
}
251251

252-
Schedule(TDuration::Seconds(15), new NActors::TEvents::TEvWakeup(READ_TIMEOUT_TAG)); // read timeout
252+
Schedule(Ctx->Cfg.ReadBatchTimeout, new NActors::TEvents::TEvWakeup(READ_TIMEOUT_TAG)); // read timeout
253253
}
254254

255255
void Handle(NPDisk::TEvChunkReadResult::TPtr ev) {
@@ -293,7 +293,7 @@ namespace {
293293

294294
Sender.SendPartsOnMain(SelfId(), Reader.GetResult());
295295

296-
Schedule(TDuration::Seconds(15), new NActors::TEvents::TEvWakeup(SEND_TIMEOUT_TAG)); // send timeout
296+
Schedule(Ctx->Cfg.SendBatchTimeout, new NActors::TEvents::TEvWakeup(SEND_TIMEOUT_TAG)); // send timeout
297297
}
298298

299299
template<class TEvPutResult>
@@ -314,7 +314,7 @@ namespace {
314314
}
315315

316316
void PassAway() override {
317-
Send(NotifyId, new NActors::TEvents::TEvCompleted(SENDER_ID));
317+
Send(NotifyId, new NActors::TEvents::TEvCompleted());
318318
STLOG(PRI_INFO, BS_VDISK_BALANCING, BSVB28, VDISKP(Ctx->VCtx, "TSender::PassAway"));
319319
TActorBootstrapped::PassAway();
320320
}

ydb/core/blobstorage/vdisk/balance/utils.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ namespace NBalancing {
7676
}
7777

7878
void TPartsCollectorMerger::Clear() {
79+
Ingress = TIngress();
7980
Parts.clear();
8081
Parts.resize(GType.TotalPartCount());
8182
}

ydb/core/blobstorage/vdisk/common/vdisk_config.h

+14
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,20 @@ namespace NKikimr {
221221
TControlWrapper DefaultHugeGarbagePerMille;
222222
bool UseActorSystemTimeInBSQueue = false;
223223

224+
///////////// BALANCING SETTINGS ////////////////////
225+
bool BalancingEnableSend;
226+
bool BalancingEnableDelete;
227+
TDuration BalancingJobGranularity;
228+
bool BalancingBalanceOnlyHugeBlobs;
229+
ui64 BalancingBatchSize;
230+
ui64 BalancingMaxToSendPerEpoch;
231+
ui64 BalancingMaxToDeletePerEpoch;
232+
TDuration BalancingReadBatchTimeout;
233+
TDuration BalancingSendBatchTimeout;
234+
TDuration BalancingRequestBlobsOnMainTimeout;
235+
TDuration BalancingDeleteBatchTimeout;
236+
TDuration BalancingEpochTimeout;
237+
224238
///////////// COST METRICS SETTINGS ////////////////
225239
bool UseCostTracker = true;
226240
TCostMetricsParametersByMedia CostMetricsParametersByMedia;

ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeleton.cpp

+18-3
Original file line numberDiff line numberDiff line change
@@ -1930,7 +1930,7 @@ namespace NKikimr {
19301930

19311931
// create Hull
19321932
Hull = std::make_shared<THull>(Db->LsnMngr, PDiskCtx, Db->SkeletonID,
1933-
Config->FeatureFlags.GetUseVDisksBalancing(), std::move(*ev->Get()->Uncond),
1933+
Config->BalancingEnableDelete, std::move(*ev->Get()->Uncond),
19341934
ctx.ExecutorThread.ActorSystem, Config->BarrierValidation);
19351935
ActiveActors.Insert(Hull->RunHullServices(Config, HullLogCtx, Db->SyncLogFirstLsnToKeep,
19361936
Db->LoggerID, Db->LogCutterID, ctx), ctx, NKikimrServices::BLOBSTORAGE);
@@ -2556,15 +2556,30 @@ namespace NKikimr {
25562556
// don't run balancing for the static group
25572557
return;
25582558
}
2559-
if (!Config->FeatureFlags.GetUseVDisksBalancing() || VCtx->Top->GType.GetErasure() == TErasureType::ErasureMirror3of4) {
2559+
bool balancingEnabled = Config->BalancingEnableSend || Config->BalancingEnableDelete;
2560+
if (!balancingEnabled || VCtx->Top->GType.GetErasure() == TErasureType::ErasureMirror3of4) {
25602561
return;
25612562
}
25622563
if (BalancingId) {
25632564
Send(BalancingId, new NActors::TEvents::TEvPoison());
25642565
ActiveActors.Erase(BalancingId);
25652566
}
2567+
TBalancingCfg balancingCfg{
2568+
.EnableSend=Config->BalancingEnableSend,
2569+
.EnableDelete=Config->BalancingEnableDelete,
2570+
.BalanceOnlyHugeBlobs=Config->BalancingBalanceOnlyHugeBlobs,
2571+
.JobGranularity=Config->BalancingJobGranularity,
2572+
.BatchSize=Config->BalancingBatchSize,
2573+
.MaxToSendPerEpoch=Config->BalancingMaxToSendPerEpoch,
2574+
.MaxToDeletePerEpoch=Config->BalancingMaxToDeletePerEpoch,
2575+
.ReadBatchTimeout=Config->BalancingReadBatchTimeout,
2576+
.SendBatchTimeout=Config->BalancingSendBatchTimeout,
2577+
.RequestBlobsOnMainTimeout=Config->BalancingRequestBlobsOnMainTimeout,
2578+
.DeleteBatchTimeout=Config->BalancingDeleteBatchTimeout,
2579+
.EpochTimeout=Config->BalancingEpochTimeout,
2580+
};
25662581
auto balancingCtx = std::make_shared<TBalancingCtx>(
2567-
VCtx, PDiskCtx, HugeBlobCtx, SelfId(), Hull->GetSnapshot(), Config, GInfo, MinREALHugeBlobInBytes);
2582+
balancingCfg, VCtx, PDiskCtx, HugeBlobCtx, SelfId(), Hull->GetSnapshot(), Config, GInfo, MinREALHugeBlobInBytes);
25682583
BalancingId = ctx.Register(CreateBalancingActor(balancingCtx));
25692584
ActiveActors.Insert(BalancingId, __FILE__, __LINE__, ctx, NKikimrServices::BLOBSTORAGE);
25702585
}

ydb/core/protos/config.proto

+19
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,27 @@ message TBlobStorageConfig {
306306
repeated TVDiskPerformanceConfig VDiskTypes = 1;
307307
};
308308

309+
message TVDiskBalancingConfig {
310+
optional bool EnableSend = 1 [default=false];
311+
optional bool EnableDelete = 2 [default=false];
312+
313+
optional bool BalanceOnlyHugeBlobs = 3 [default=true];
314+
optional uint64 JobGranularityUs = 4 [default=1000];
315+
316+
optional uint64 BatchSize = 5 [default=32];
317+
optional uint64 MaxToSendPerEpoch = 6 [default=1000];
318+
optional uint64 MaxToDeletePerEpoch = 7 [default=1000];
319+
320+
optional uint64 ReadBatchTimeoutMs = 8 [default=10000];
321+
optional uint64 SendBatchTimeoutMs = 9 [default=10000];
322+
optional uint64 RequestBlobsOnMainTimeoutMs = 10 [default=10000];
323+
optional uint64 DeleteBatchTimeoutMs = 11 [default=10000];
324+
optional uint64 EpochTimeoutMs = 12 [default=60000];
325+
}
326+
309327
reserved 7; // TCostMetricsSettings, moved to ICB
310328
optional TVDiskPerformanceSettings VDiskPerformanceSettings = 8;
329+
optional TVDiskBalancingConfig VDiskBalancingConfig = 9;
311330
}
312331

313332
message TBlobStorageFormatConfig {

ydb/core/protos/feature_flags.proto

+1-1
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ message TFeatureFlags {
127127
optional bool EnableTablePgTypes = 108 [default = false];
128128
optional bool EnableLocalDBBtreeIndex = 109 [default = true];
129129
optional bool EnablePDiskHighHDDInFlight = 110 [default = false];
130-
optional bool UseVDisksBalancing = 111 [default = false];
130+
reserved 111; // UseVDisksBalancing
131131
optional bool EnableViews = 112 [default = false];
132132
optional bool EnableServerlessExclusiveDynamicNodes = 113 [default = false];
133133
optional bool EnableAccessServiceBulkAuthorization = 114 [default = false];

0 commit comments

Comments
 (0)