AuroraTwinkle commented on code in PR #24387: URL: https://github.com/apache/pulsar/pull/24387#discussion_r2191657847
########## pulsar-client/src/test/java/org/apache/pulsar/client/impl/PulsarServiceNameResolverTest.java: ########## @@ -129,4 +130,54 @@ public void testMultipleHostsTlsUrl() throws Exception { assertTrue(expectedHostUrls.contains(resolver.resolveHostUri())); } } + + @Test + public void testRemoveUnavailableHost() throws InvalidServiceURL { + String serviceUrl = "pulsar+ssl://host1:6651,host2:6651,host3:6651"; + resolver.updateServiceUrl(serviceUrl); + assertEquals(serviceUrl, resolver.getServiceUrl()); + assertEquals(ServiceURI.create(serviceUrl), resolver.getServiceUri()); + + Set<InetSocketAddress> expectedAddresses = new HashSet<>(); + Set<URI> expectedHostUrls = new HashSet<>(); + expectedAddresses.add(InetSocketAddress.createUnresolved("host2", 6651)); + expectedAddresses.add(InetSocketAddress.createUnresolved("host3", 6651)); + expectedHostUrls.add(URI.create("pulsar+ssl://host2:6651")); + expectedHostUrls.add(URI.create("pulsar+ssl://host3:6651")); + Set<InetSocketAddress> allOriginAddresses = new HashSet<>(expectedAddresses); + allOriginAddresses.add(InetSocketAddress.createUnresolved("host1", 6651)); + + // Mark host1 as unavailable + resolver.markHostAvailability(InetSocketAddress.createUnresolved("host1", 6651), false); + // Now host1 should be removed from the available hosts + for (int i = 0; i < 10; i++) { + assertTrue(expectedAddresses.contains(resolver.resolveHost())); + assertTrue(expectedHostUrls.contains(resolver.resolveHostUri())); + } + + // After backoff time, host1 should be recovery from the unavailable hosts + Uninterruptibles.sleepUninterruptibly(INIT_QUARANTINE_TIME_MS, java.util.concurrent.TimeUnit.MILLISECONDS); + // trigger the recovery of host1 + resolver.markHostAvailability(InetSocketAddress.createUnresolved("host2", 6651), true); + + Set<InetSocketAddress> resolverAddresses = new HashSet<>(); + for (int i = 0; i < 10; i++) { + InetSocketAddress address = resolver.resolveHost(); + resolverAddresses.add(address); + } + assertEquals(resolverAddresses, allOriginAddresses); + + resolverAddresses.clear(); + // Mark all hosts as unavailable + resolver.markHostAvailability(InetSocketAddress.createUnresolved("host1", 6651), false); + resolver.markHostAvailability(InetSocketAddress.createUnresolved("host2", 6651), false); + resolver.markHostAvailability(InetSocketAddress.createUnresolved("host3", 6651), false); + + // After marking all hosts as unavailable, resolver should fall back to select from all origin host Review Comment: fixed -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@pulsar.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org