2929import org .apache .helix .ConfigAccessor ;
3030import org .apache .helix .HelixDataAccessor ;
3131import org .apache .helix .NotificationContext ;
32+ import org .apache .helix .TestHelper ;
3233import org .apache .helix .common .ZkTestBase ;
3334import org .apache .helix .controller .rebalancer .strategy .CrushEdRebalanceStrategy ;
3435import org .apache .helix .controller .rebalancer .strategy .CrushRebalanceStrategy ;
@@ -69,7 +70,6 @@ public class TestMixedModeAutoRebalance extends ZkTestBase {
6970 private int _replica = 3 ;
7071 private ZkHelixClusterVerifier _clusterVerifier ;
7172 private ConfigAccessor _configAccessor ;
72- private HelixDataAccessor _dataAccessor ;
7373
7474 @ BeforeClass
7575 public void beforeClass () throws Exception {
@@ -98,7 +98,6 @@ public void beforeClass() throws Exception {
9898 enablePersistBestPossibleAssignment (_gZkClient , CLUSTER_NAME , true );
9999
100100 _configAccessor = new ConfigAccessor (_gZkClient );
101- _dataAccessor = new ZKHelixDataAccessor (CLUSTER_NAME , _baseAccessor );
102101 }
103102
104103 @ DataProvider (name = "stateModels" )
@@ -152,7 +151,7 @@ public void testUserDefinedPreferenceListsInFullAuto(String stateModel, boolean
152151 new ResourceConfig .Builder (_db ).setPreferenceLists (userDefinedPreferenceLists ).build ();
153152 _configAccessor .setResourceConfig (CLUSTER_NAME , _db , resourceConfig );
154153
155- Assert .assertTrue (_clusterVerifier .verify (1000 ));
154+ Assert .assertTrue (_clusterVerifier .verify (3000 ));
156155 verifyUserDefinedPreferenceLists (_db , userDefinedPreferenceLists , userDefinedPartitions );
157156
158157 while (userDefinedPartitions .size () > 0 ) {
@@ -161,7 +160,9 @@ public void testUserDefinedPreferenceListsInFullAuto(String stateModel, boolean
161160 nonUserDefinedPartitions .removeAll (userDefinedPartitions );
162161
163162 removePartitionFromUserDefinedList (_db , userDefinedPartitions );
164- Assert .assertTrue (_clusterVerifier .verify (1000 ));
163+ // TODO: Remove wait once we enable the BestPossibleExternalViewVerifier for the WAGED rebalancer.
164+ Thread .sleep (1000 );
165+ Assert .assertTrue (_clusterVerifier .verify (3000 ));
165166 verifyUserDefinedPreferenceLists (_db , userDefinedPreferenceLists , userDefinedPartitions );
166167 verifyNonUserDefinedAssignment (_db , originIS , nonUserDefinedPartitions );
167168 }
@@ -199,7 +200,19 @@ public void testUserDefinedPreferenceListsInFullAutoWithErrors() throws Exceptio
199200 new ResourceConfig .Builder (_db ).setPreferenceLists (userDefinedPreferenceLists ).build ();
200201 _configAccessor .setResourceConfig (CLUSTER_NAME , _db , resourceConfig );
201202
202- Thread .sleep (1000 );
203+ TestHelper .verify (() -> {
204+ ExternalView ev =
205+ _gSetupTool .getClusterManagementTool ().getResourceExternalView (CLUSTER_NAME , _db );
206+ if (ev != null ) {
207+ for (String partition : ev .getPartitionSet ()) {
208+ Map <String , String > stateMap = ev .getStateMap (partition );
209+ if (stateMap .values ().contains ("ERROR" )) {
210+ return true ;
211+ }
212+ }
213+ }
214+ return false ;
215+ }, 3000 );
203216 ExternalView ev =
204217 _gSetupTool .getClusterManagementTool ().getResourceExternalView (CLUSTER_NAME , _db );
205218 IdealState is = _gSetupTool .getClusterManagementTool ().getResourceIdealState (CLUSTER_NAME , _db );
@@ -245,14 +258,12 @@ private void removePartitionFromUserDefinedList(String db, List<String> userDefi
245258 resourceConfig .setPreferenceLists (lists );
246259 userDefinedPartitions .remove (0 );
247260 _configAccessor .setResourceConfig (CLUSTER_NAME , db , resourceConfig );
248-
249- //TODO: Touch IS, remove this once Helix controller is listening on resource config changes.
250- RebalanceScheduler .invokeRebalance (_dataAccessor , db );
251261 }
252262
253263 @ AfterMethod
254264 public void afterMethod () {
255265 _gSetupTool .getClusterManagementTool ().dropResource (CLUSTER_NAME , _db );
266+ getClusterVerifier ().verify (5000 );
256267 }
257268
258269 @ AfterClass
0 commit comments