@@ -178,12 +178,17 @@ ui64 TBlobState::GetPredictedDelayNs(const TBlobStorageGroupInfo &info, TGroupQu
178178}
179179
180180void TBlobState::GetWorstPredictedDelaysNs (const TBlobStorageGroupInfo &info, TGroupQueues &groupQueues,
181- NKikimrBlobStorage::EVDiskQueueId queueId, ui32 nWorst, TDiskDelayPredictions *outNWorst) const {
181+ NKikimrBlobStorage::EVDiskQueueId queueId, TDiskDelayPredictions *outNWorst,
182+ double multiplier) const {
182183 outNWorst->resize (Disks.size ());
183184 for (ui32 diskIdx = 0 ; diskIdx < Disks.size (); ++diskIdx) {
184- (*outNWorst)[diskIdx] = { GetPredictedDelayNs (info, groupQueues, diskIdx, queueId), diskIdx };
185+ (*outNWorst)[diskIdx] = {
186+ static_cast <ui64>(GetPredictedDelayNs (info, groupQueues, diskIdx, queueId) * multiplier),
187+ diskIdx
188+ };
185189 }
186- std::partial_sort (outNWorst->begin (), outNWorst->begin () + std::min (nWorst, (ui32)Disks.size ()), outNWorst->end ());
190+ ui32 sortedPrefixSize = std::min (3u , (ui32)Disks.size ());
191+ std::partial_sort (outNWorst->begin (), outNWorst->begin () + sortedPrefixSize, outNWorst->end ());
187192}
188193
189194bool TBlobState::HasWrittenQuorum (const TBlobStorageGroupInfo& info, const TBlobStorageGroupInfo::TGroupVDisks& expired) const {
@@ -361,7 +366,8 @@ void TBlackboard::AddErrorResponse(const TLogoBlobID &id, ui32 orderNumber) {
361366}
362367
363368EStrategyOutcome TBlackboard::RunStrategies (TLogContext &logCtx, const TStackVec<IStrategy*, 1 >& s,
364- TBatchedVec<TFinishedBlob> *finished, const TBlobStorageGroupInfo::TGroupVDisks *expired) {
369+ const TAccelerationParams& accelerationParams, TBatchedVec<TFinishedBlob> *finished,
370+ const TBlobStorageGroupInfo::TGroupVDisks *expired) {
365371 for (auto it = BlobStates.begin (); it != BlobStates.end (); ) {
366372 auto & blob = it->second ;
367373 if (!std::exchange (blob.IsChanged , false )) {
@@ -373,7 +379,7 @@ EStrategyOutcome TBlackboard::RunStrategies(TLogContext &logCtx, const TStackVec
373379 NKikimrProto::EReplyStatus status = NKikimrProto::OK;
374380 TString errorReason;
375381 for (IStrategy *strategy : s) {
376- switch (auto res = strategy->Process (logCtx, blob, *Info, *this , GroupDiskRequests)) {
382+ switch (auto res = strategy->Process (logCtx, blob, *Info, *this , GroupDiskRequests, accelerationParams )) {
377383 case EStrategyOutcome::IN_PROGRESS:
378384 status = NKikimrProto::UNKNOWN;
379385 break ;
@@ -415,8 +421,9 @@ EStrategyOutcome TBlackboard::RunStrategies(TLogContext &logCtx, const TStackVec
415421}
416422
417423EStrategyOutcome TBlackboard::RunStrategy (TLogContext &logCtx, const IStrategy& s,
418- TBatchedVec<TFinishedBlob> *finished, const TBlobStorageGroupInfo::TGroupVDisks *expired) {
419- return RunStrategies (logCtx, {const_cast <IStrategy*>(&s)}, finished, expired);
424+ const TAccelerationParams& accelerationParams, TBatchedVec<TFinishedBlob> *finished,
425+ const TBlobStorageGroupInfo::TGroupVDisks *expired) {
426+ return RunStrategies (logCtx, {const_cast <IStrategy*>(&s)}, accelerationParams, finished, expired);
420427}
421428
422429TBlobState& TBlackboard::GetState (const TLogoBlobID &id) {
@@ -458,13 +465,17 @@ void TBlackboard::ReportPartMapStatus(const TLogoBlobID &id, ssize_t partMapInde
458465}
459466
460467void TBlackboard::GetWorstPredictedDelaysNs (const TBlobStorageGroupInfo &info, TGroupQueues &groupQueues,
461- NKikimrBlobStorage::EVDiskQueueId queueId, ui32 nWorst, TDiskDelayPredictions *outNWorst) const {
468+ NKikimrBlobStorage::EVDiskQueueId queueId, TDiskDelayPredictions *outNWorst,
469+ double multiplier) const {
462470 ui32 totalVDisks = info.GetTotalVDisksNum ();
463471 outNWorst->resize (totalVDisks);
464472 for (ui32 orderNumber = 0 ; orderNumber < totalVDisks; ++orderNumber) {
465- (*outNWorst)[orderNumber] = { groupQueues.GetPredictedDelayNsByOrderNumber (orderNumber, queueId), orderNumber };
473+ (*outNWorst)[orderNumber] = {
474+ static_cast <ui64>(groupQueues.GetPredictedDelayNsByOrderNumber (orderNumber, queueId) * multiplier),
475+ orderNumber
476+ };
466477 }
467- std::partial_sort (outNWorst->begin (), outNWorst->begin () + std::min (nWorst , totalVDisks), outNWorst->end ());
478+ std::partial_sort (outNWorst->begin (), outNWorst->begin () + std::min (3u , totalVDisks), outNWorst->end ());
468479}
469480
470481void TBlackboard::RegisterBlobForPut (const TLogoBlobID& id, size_t blobIdx) {
0 commit comments