diff --git a/ydb/core/blobstorage/ut_blobstorage/balancing.cpp b/ydb/core/blobstorage/ut_blobstorage/balancing.cpp index b83dfd4bd81e..cba5903c69e2 100644 --- a/ydb/core/blobstorage/ut_blobstorage/balancing.cpp +++ b/ydb/core/blobstorage/ut_blobstorage/balancing.cpp @@ -231,19 +231,12 @@ struct TStopOneNodeTest { Env.StartNode(nodeIdWithBlob); Env->Sim(TDuration::Seconds(30)); - Cerr << "Start compaction 1" << Endl; + Cerr << "Start compaction" << Endl; for (ui32 pos = 0; pos < Env->Settings.NodeCount; ++pos) { Env->CompactVDisk(Env.GroupInfo->GetActorId(pos)); } Env->Sim(TDuration::Seconds(30)); - Cerr << "Finish compaction 1" << Endl; - - Cerr << "Start compaction 2" << Endl; - for (ui32 pos = 0; pos < Env->Settings.NodeCount; ++pos) { - Env->CompactVDisk(Env.GroupInfo->GetActorId(pos)); - } - Env->Sim(TDuration::Seconds(30)); - Cerr << "Finish compaction 2" << Endl; + Cerr << "Finish compaction" << Endl; Env.CheckPartsLocations(MakeLogoBlobId(step, data.size())); UNIT_ASSERT_VALUES_EQUAL(Env.SendGet(step, data.size())->Get()->Responses[0].Buffer.ConvertToString(), data); @@ -327,12 +320,6 @@ struct TRandomTest { } Env->Sim(TDuration::Seconds(60)); - Cerr << "Start compaction 2" << Endl; - for (ui32 pos = 0; pos < Env->Settings.NodeCount; ++pos) { - Env->CompactVDisk(Env.GroupInfo->GetActorId(pos)); - } - Env->Sim(TDuration::Seconds(60)); - Cerr << "Start checking" << Endl; for (ui32 step: successfulSteps) { Env.CheckPartsLocations(MakeLogoBlobId(step, data[step].size())); @@ -408,13 +395,6 @@ struct TTwoPartsOnOneNodeTest { Env->Sim(TDuration::Seconds(30)); Cerr << "Finish compaction 1" << Endl; - Cerr << "Start compaction 2" << Endl; - for (ui32 pos = 0; pos < Env->Settings.NodeCount; ++pos) { - Env->CompactVDisk(Env.GroupInfo->GetActorId(pos)); - } - Env->Sim(TDuration::Seconds(30)); - Cerr << "Finish compaction 2" << Endl; - Env.CheckPartsLocations(MakeLogoBlobId(step, data.size())); UNIT_ASSERT_VALUES_EQUAL(Env.SendGet(step, data.size())->Get()->Responses[0].Buffer.ConvertToString(), data); } diff --git a/ydb/core/blobstorage/vdisk/balance/balancing_actor.cpp b/ydb/core/blobstorage/vdisk/balance/balancing_actor.cpp index 885adbc6f9ba..c4990b306643 100644 --- a/ydb/core/blobstorage/vdisk/balance/balancing_actor.cpp +++ b/ydb/core/blobstorage/vdisk/balance/balancing_actor.cpp @@ -111,6 +111,15 @@ namespace NBalancing { } void CollectKeys() { + if (ConnectedVDisks.size() + 1 != GInfo->GetTotalVDisksNum()) { + // not all vdisks are connected + STLOG(PRI_INFO, BS_VDISK_BALANCING, BSVB11, VDISKP(Ctx->VCtx, "Not all vdisks are connected, balancing should work only for full groups"), + (ConnectedVDisks, ConnectedVDisks.size()), (TotalVDisksInGroup, GInfo->GetTotalVDisksNum())); + Send(Ctx->SkeletonId, new TEvStartBalancing()); + PassAway(); + return; + } + THPTimer timer; for (ui32 cnt = 0; It.Valid(); It.Next(), ++cnt) { diff --git a/ydb/core/blobstorage/vdisk/balance/utils.cpp b/ydb/core/blobstorage/vdisk/balance/utils.cpp index 8c88b3955525..0a99ad83dd20 100644 --- a/ydb/core/blobstorage/vdisk/balance/utils.cpp +++ b/ydb/core/blobstorage/vdisk/balance/utils.cpp @@ -53,10 +53,11 @@ namespace NBalancing { } void TPartsCollectorMerger::AddFromFresh(const TMemRecLogoBlob& memRec, const TRope* data, const TKeyLogoBlob& key, ui64 /*lsn*/) { + Ingress.Merge(memRec.GetIngress()); + if (!memRec.HasData()) { return; } - Ingress.Merge(memRec.GetIngress()); const NMatrix::TVectorType local = memRec.GetLocalParts(GType);