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

Reply via email to