@@ -25,8 +25,8 @@ Y_UNIT_TEST_SUITE(GroupLayoutSanitizer) {
2525 }
2626 }
2727
28- void CreateEnv (std::unique_ptr<TEnvironmentSetup>& env, std::vector<TNodeLocation>& locations) {
29- TBlobStorageGroupType groupType = TBlobStorageGroupType::ErasureMirror3dc;
28+ void CreateEnv (std::unique_ptr<TEnvironmentSetup>& env, std::vector<TNodeLocation>& locations,
29+ TBlobStorageGroupType groupType) {
3030 const ui32 numNodes = locations.size ();
3131
3232 env.reset (new TEnvironmentSetup ({
@@ -37,27 +37,30 @@ Y_UNIT_TEST_SUITE(GroupLayoutSanitizer) {
3737
3838 const ui32 disksPerNode = 1 ;
3939 const ui32 slotsPerDisk = 3 ;
40+
41+ // Assure that sanitizer doesn't send request to initially allocated groups
42+ env->Runtime ->FilterFunction = CatchSanitizeRequests;
4043 env->CreateBoxAndPool (disksPerNode, numNodes * disksPerNode * slotsPerDisk / 9 );
4144 }
4245
43- Y_UNIT_TEST (Test3dc) {
46+ NActorsInterconnect::TNodeLocation LocationGenerator (ui32 dc, ui32 rack, ui32 unit) {
47+ NActorsInterconnect::TNodeLocation proto;
48+ proto.SetDataCenter (ToString (dc));
49+ proto.SetRack (ToString (rack));
50+ proto.SetUnit (ToString (unit));
51+ return proto;
52+ }
53+
54+ void Test (TBlobStorageGroupType groupType, ui32 dcs, ui32 racks) {
4455 std::vector<TNodeLocation> locations;
45- TLocationGenerator locationGenerator = [](ui32 dc, ui32 rack, ui32 unit) {
46- NActorsInterconnect::TNodeLocation proto;
47- proto.SetDataCenter (ToString (dc));
48- proto.SetRack (ToString (rack));
49- proto.SetUnit (ToString (unit));
50- return proto;
51- };
5256
53- MakeLocations (locations, 3 , 5 , 1 , locationGenerator );
57+ MakeLocations (locations, dcs, racks , 1 , LocationGenerator );
5458 std::unique_ptr<TEnvironmentSetup> env;
55- CreateEnv (env, locations);
5659
57- TBlobStorageGroupType groupType = TBlobStorageGroupType::ErasureMirror3dc ;
58- TGroupGeometryInfo geom = CreateGroupGeometry (groupType );
60+ CreateEnv (env, locations, groupType) ;
61+ env-> Sim ( TDuration::Minutes ( 3 ) );
5962
60- env-> Runtime -> FilterFunction = CatchSanitizeRequests ;
63+ TGroupGeometryInfo geom = CreateGroupGeometry (groupType) ;
6164
6265 TString error;
6366 auto cfg = env->FetchBaseConfig ();
@@ -86,6 +89,18 @@ Y_UNIT_TEST_SUITE(GroupLayoutSanitizer) {
8689 UNIT_ASSERT_C (CheckBaseConfigLayout (geom, cfg, true , error), error);
8790 }
8891
92+ Y_UNIT_TEST (Test3dc) {
93+ Test (TBlobStorageGroupType::ErasureMirror3dc, 3 , 5 );
94+ }
95+
96+ Y_UNIT_TEST (TestBlock4Plus2) {
97+ Test (TBlobStorageGroupType::Erasure4Plus2Block, 1 , 12 );
98+ }
99+
100+ Y_UNIT_TEST (TestMirror3of4) {
101+ Test (TBlobStorageGroupType::ErasureMirror3of4, 1 , 12 );
102+ }
103+
89104 TString PrintGroups (TBlobStorageGroupType groupType, const NKikimrBlobStorage::TBaseConfig& cfg,
90105 std::vector<TNodeLocation> locations) {
91106 TGroupGeometryInfo geom = CreateGroupGeometry (groupType);
@@ -137,6 +152,7 @@ Y_UNIT_TEST_SUITE(GroupLayoutSanitizer) {
137152 }
138153
139154 void TestMultipleRealmsOccupation (bool allowMultipleRealmsOccupation) {
155+ TBlobStorageGroupType groupType = TBlobStorageGroupType::ErasureMirror3dc;
140156 std::vector<TNodeLocation> locations;
141157 TLocationGenerator locationGenerator = [](ui32 dc, ui32 rack, ui32 unit) {
142158 NActorsInterconnect::TNodeLocation proto;
@@ -152,9 +168,8 @@ Y_UNIT_TEST_SUITE(GroupLayoutSanitizer) {
152168 };
153169 MakeLocations (locations, 4 , 5 , 1 , locationGenerator);
154170 std::unique_ptr<TEnvironmentSetup> env;
155- CreateEnv (env, locations);
171+ CreateEnv (env, locations, groupType );
156172
157- TBlobStorageGroupType groupType = TBlobStorageGroupType::ErasureMirror3dc;
158173 TGroupGeometryInfo geom = CreateGroupGeometry (groupType);
159174
160175 env->Runtime ->FilterFunction = CatchSanitizeRequests;
0 commit comments