@@ -1421,6 +1421,54 @@ private int getNumCoveredRegionsInWriteQuorum(List<BookieId> ensemble, int write
14211421 return numCoveredWriteQuorums ;
14221422 }
14231423
1424+ @ Test
1425+ public void testRecoveryOnNodeFailure () throws Exception {
1426+ repp .uninitalize ();
1427+ repp = new RegionAwareEnsemblePlacementPolicy ();
1428+ repp .initialize (conf , Optional .empty (), timer , DISABLE_ALL ,
1429+ NullStatsLogger .INSTANCE , BookieSocketAddress .LEGACY_BOOKIEID_RESOLVER );
1430+ BookieSocketAddress addr1 = new BookieSocketAddress ("127.0.0.2" , 3181 );
1431+ BookieSocketAddress addr2 = new BookieSocketAddress ("127.0.0.3" , 3181 );
1432+ BookieSocketAddress addr3 = new BookieSocketAddress ("127.0.0.4" , 3181 );
1433+ BookieSocketAddress addr4 = new BookieSocketAddress ("127.0.0.5" , 3181 );
1434+ BookieSocketAddress addr5 = new BookieSocketAddress ("127.0.0.6" , 3181 );
1435+ BookieSocketAddress addr6 = new BookieSocketAddress ("127.0.0.7" , 3181 );
1436+
1437+ // Update dns mapping
1438+ StaticDNSResolver .addNodeToRack (addr1 .getHostName (), "/region1/r1" );
1439+ StaticDNSResolver .addNodeToRack (addr2 .getHostName (), "/region1/r1" );
1440+ StaticDNSResolver .addNodeToRack (addr3 .getHostName (), "/region2/r2" );
1441+ StaticDNSResolver .addNodeToRack (addr4 .getHostName (), "/region2/r2" );
1442+ StaticDNSResolver .addNodeToRack (addr5 .getHostName (), "/region3/r3" );
1443+ StaticDNSResolver .addNodeToRack (addr6 .getHostName (), "/region3/r3" );
1444+
1445+ // Update cluster
1446+ Set <BookieId > addrs = new HashSet <>();
1447+ addrs .add (addr1 .toBookieId ());
1448+ addrs .add (addr2 .toBookieId ());
1449+ addrs .add (addr3 .toBookieId ());
1450+ addrs .add (addr4 .toBookieId ());
1451+ addrs .add (addr5 .toBookieId ());
1452+ addrs .add (addr6 .toBookieId ());
1453+
1454+ repp .onClusterChanged (addrs , new HashSet <>());
1455+
1456+ Set <BookieId > bookiesLeftSet = new HashSet <>();
1457+ bookiesLeftSet .add (addr1 .toBookieId ());
1458+ repp .handleBookiesThatLeft (bookiesLeftSet );
1459+
1460+ List <BookieId > currentEnsemble = new ArrayList <>();
1461+ currentEnsemble .add (addr1 .toBookieId ());
1462+ currentEnsemble .add (addr3 .toBookieId ());
1463+ currentEnsemble .add (addr6 .toBookieId ());
1464+
1465+ EnsemblePlacementPolicy .PlacementResult <BookieId > placementResult = repp .replaceBookie (3 ,
1466+ 3 , 2 , null ,
1467+ currentEnsemble , addr1 .toBookieId (), new HashSet <>());
1468+
1469+ assertEquals (placementResult .getResult (), addr2 .toBookieId ());
1470+ }
1471+
14241472 @ Test
14251473 public void testNodeWithFailures () throws Exception {
14261474 repp .uninitalize ();
0 commit comments