@@ -313,6 +313,9 @@ public void testPipeAfterDataRegionLeaderStop() {
313313 TableModelUtils .insertData ("test" , "test" , 100 , 200 , senderEnv );
314314
315315 TableModelUtils .insertData ("test1" , "test1" , 100 , 200 , senderEnv );
316+ // Avoid electing a stale follower after stopping the current test1 leader.
317+ flushTableDataRegionReplicasAfterReplicationComplete (
318+ senderEnv , Collections .singletonList ("test1" ));
316319
317320 final int leaderIndex = restartTableDataRegionLeader (client , "test1" );
318321 if (leaderIndex == -1 ) { // ensure the leader is stopped
@@ -324,7 +327,10 @@ public void testPipeAfterDataRegionLeaderStop() {
324327 TableModelUtils .insertData ("test1" , "test1" , 200 , 300 , senderEnv );
325328
326329 TableModelUtils .assertData ("test" , "test" , 0 , 300 , receiverEnv , handleFailure );
327- waitForTableDataRegionReplicationComplete (Arrays .asList ("test" , "test1" ));
330+ flushTableDataRegionReplicasAfterReplicationComplete (
331+ senderEnv , Arrays .asList ("test" , "test1" ));
332+ flushTableDataRegionReplicasAfterReplicationComplete (
333+ receiverEnv , Collections .singletonList ("test" ));
328334 }
329335
330336 try {
@@ -428,14 +434,22 @@ private int restartTableDataRegionLeader(
428434 return -1 ;
429435 }
430436
431- private void waitForTableDataRegionReplicationComplete (final List <String > databases ) {
437+ private void flushTableDataRegionReplicasAfterReplicationComplete (
438+ final BaseEnv env , final List <String > databases ) {
439+ waitForTableDataRegionReplicationComplete (env , databases );
440+ TestUtils .executeNonQueryWithRetry (env , "flush" );
441+ waitForTableDataRegionReplicationComplete (env , databases );
442+ }
443+
444+ private void waitForTableDataRegionReplicationComplete (
445+ final BaseEnv env , final List <String > databases ) {
432446 await ()
433447 .pollInterval (500 , TimeUnit .MILLISECONDS )
434448 .atMost (2 , TimeUnit .MINUTES )
435449 .untilAsserted (
436450 () -> {
437451 try (final SyncConfigNodeIServiceClient client =
438- (SyncConfigNodeIServiceClient ) senderEnv .getLeaderConfigNodeConnection ()) {
452+ (SyncConfigNodeIServiceClient ) env .getLeaderConfigNodeConnection ()) {
439453 final List <TRegionInfo > leaderRegionInfoList =
440454 showTableDataRegionLeaders (databases , client );
441455 Assert .assertFalse (
@@ -444,14 +458,14 @@ private void waitForTableDataRegionReplicationComplete(final List<String> databa
444458
445459 for (final TRegionInfo regionInfo : leaderRegionInfoList ) {
446460 final DataNodeWrapper leaderNode =
447- findDataNodeWrapperByPort (regionInfo .getClientRpcPort ());
461+ findDataNodeWrapperByPort (env , regionInfo .getClientRpcPort ());
448462 final String metricsUrl =
449463 "http://"
450464 + leaderNode .getIp ()
451465 + ":"
452466 + leaderNode .getMetricPort ()
453467 + "/metrics" ;
454- final String metricsContent = senderEnv .getUrlContent (metricsUrl , null );
468+ final String metricsContent = env .getUrlContent (metricsUrl , null );
455469 Assert .assertNotNull (
456470 "Failed to fetch metrics from leader DataNode at " + metricsUrl ,
457471 metricsContent );
@@ -480,8 +494,8 @@ private List<TRegionInfo> showTableDataRegionLeaders(
480494 return result ;
481495 }
482496
483- private DataNodeWrapper findDataNodeWrapperByPort (final int port ) {
484- for (final DataNodeWrapper dataNodeWrapper : senderEnv .getDataNodeWrapperList ()) {
497+ private DataNodeWrapper findDataNodeWrapperByPort (final BaseEnv env , final int port ) {
498+ for (final DataNodeWrapper dataNodeWrapper : env .getDataNodeWrapperList ()) {
485499 if (dataNodeWrapper .getPort () == port ) {
486500 return dataNodeWrapper ;
487501 }
0 commit comments