|
17 | 17 | */
|
18 | 18 | package org.apache.bookkeeper.client;
|
19 | 19 |
|
| 20 | +import static org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicyImpl.RACKNAME_DISTANCE_FROM_LEAVES; |
20 | 21 | import static org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicyImpl.REPP_DNS_RESOLVER_CLASS;
|
21 | 22 | import static org.apache.bookkeeper.client.RackawareEnsemblePlacementPolicyImpl.shuffleWithMask;
|
22 | 23 | import static org.apache.bookkeeper.client.RoundRobinDistributionSchedule.writeSetFromValues;
|
|
69 | 70 | import org.hamcrest.Matcher;
|
70 | 71 | import org.hamcrest.TypeSafeMatcher;
|
71 | 72 | import org.junit.Test;
|
| 73 | +import org.junit.jupiter.api.Timeout; |
72 | 74 | import org.slf4j.Logger;
|
73 | 75 | import org.slf4j.LoggerFactory;
|
74 | 76 |
|
@@ -790,6 +792,55 @@ public void testNewEnsembleWithSingleRack() throws Exception {
|
790 | 792 | }
|
791 | 793 | }
|
792 | 794 |
|
| 795 | + @Test(timeout = 30_000) |
| 796 | + public void testNewEnsembleWithExcludeBookies() throws Exception { |
| 797 | + repp.uninitalize(); |
| 798 | + updateMyRack(NetworkTopology.DEFAULT_REGION_AND_RACK); |
| 799 | + |
| 800 | + repp = new RackawareEnsemblePlacementPolicy(); |
| 801 | + conf.setDiskWeightBasedPlacementEnabled(true); |
| 802 | + repp.initialize(conf, Optional.<DNSToSwitchMapping>empty(), timer, |
| 803 | + DISABLE_ALL, NullStatsLogger.INSTANCE, BookieSocketAddress.LEGACY_BOOKIEID_RESOLVER); |
| 804 | + repp.withDefaultRack(NetworkTopology.DEFAULT_REGION_AND_RACK); |
| 805 | + |
| 806 | + BookieSocketAddress addr1 = new BookieSocketAddress("127.0.0.2", 3181); |
| 807 | + BookieSocketAddress addr2 = new BookieSocketAddress("127.0.0.3", 3181); |
| 808 | + BookieSocketAddress addr3 = new BookieSocketAddress("127.0.0.4", 3181); |
| 809 | + |
| 810 | + BookieNode addr1Node = new BookieNode(addr1.toBookieId(), repp.resolveNetworkLocation(addr1.toBookieId())); |
| 811 | + BookieNode addr2Node = new BookieNode(addr2.toBookieId(), repp.resolveNetworkLocation(addr2.toBookieId())); |
| 812 | + BookieNode addr3Node = new BookieNode(addr3.toBookieId(), repp.resolveNetworkLocation(addr3.toBookieId())); |
| 813 | + // update dns mapping |
| 814 | + StaticDNSResolver.addNodeToRack(addr1.getHostName(), "/default-region/r1"); |
| 815 | + StaticDNSResolver.addNodeToRack(addr2.getHostName(), "/default-region/r2"); |
| 816 | + StaticDNSResolver.addNodeToRack(addr3.getHostName(), "/default-region/r1"); |
| 817 | + // Update cluster |
| 818 | + Set<BookieId> addrs = new HashSet<BookieId>(); |
| 819 | + addrs.add(addr1.toBookieId()); |
| 820 | + addrs.add(addr2.toBookieId()); |
| 821 | + addrs.add(addr3.toBookieId()); |
| 822 | + repp.onClusterChanged(addrs, new HashSet<BookieId>()); |
| 823 | + |
| 824 | + Set<Node> excludeBookies = new HashSet<>(); |
| 825 | + excludeBookies.add(addr2Node); |
| 826 | + excludeBookies.add(addr3Node); |
| 827 | + |
| 828 | + TopologyAwareEnsemblePlacementPolicy.RRTopologyAwareCoverageEnsemble ensemble = |
| 829 | + new TopologyAwareEnsemblePlacementPolicy.RRTopologyAwareCoverageEnsemble( |
| 830 | + 2, 2, 2, |
| 831 | + RACKNAME_DISTANCE_FROM_LEAVES, |
| 832 | + null, null, 1); |
| 833 | + ensemble.addNode(new BookieNode(addr1.toBookieId(), repp.resolveNetworkLocation(addr1.toBookieId()))); |
| 834 | + try { |
| 835 | + repp.selectRandomInternal(null, 1, excludeBookies, null, ensemble); |
| 836 | + fail("Should fail with not enough bookies exception"); |
| 837 | + } catch (BKNotEnoughBookiesException ex) { |
| 838 | + // |
| 839 | + } |
| 840 | + |
| 841 | + conf.setDiskWeightBasedPlacementEnabled(false); |
| 842 | + } |
| 843 | + |
793 | 844 | @Test
|
794 | 845 | public void testSingleRackWithEnforceMinNumRacks() throws Exception {
|
795 | 846 | repp.uninitalize();
|
|
0 commit comments