This is an automated email from the ASF dual-hosted git repository.

andor pushed a commit to branch branch-3.8
in repository https://gitbox.apache.org/repos/asf/zookeeper.git


The following commit(s) were added to refs/heads/branch-3.8 by this push:
     new 79f1f71a9 ZOOKEEPER-4728: force to re-resolve hostname into IP when 
binding. (#2040)
79f1f71a9 is described below

commit 79f1f71a9a76689065c14d0846a69d0d71d3586e
Author: Luke Chen <[email protected]>
AuthorDate: Tue Aug 29 18:45:37 2023 +0800

    ZOOKEEPER-4728: force to re-resolve hostname into IP when binding. (#2040)
    
    * ZOOKEEPER-4728: force to re-resolve hostname into IP when binding
    
    * ZOOKEEPER-4708: add test
    
    (cherry picked from commit 40aed41793e9bc4493d89e7c831d9da3258212fc)
    Signed-off-by: Andor Molnar <[email protected]>
---
 .../main/java/org/apache/zookeeper/server/quorum/Leader.java  |  6 +++++-
 .../org/apache/zookeeper/server/quorum/LeaderBeanTest.java    | 11 +++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/Leader.java 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/Leader.java
index aebde0524..8cb981237 100644
--- 
a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/Leader.java
+++ 
b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/Leader.java
@@ -310,6 +310,10 @@ public class Leader extends LearnerMaster {
         this.zk = zk;
     }
 
+    InetSocketAddress recreateInetSocketAddr(String hostString, int port) {
+        return new InetSocketAddress(hostString, port);
+    }
+
     Optional<ServerSocket> createServerSocket(InetSocketAddress address, 
boolean portUnification, boolean sslQuorum) {
         ServerSocket serverSocket;
         try {
@@ -319,7 +323,7 @@ public class Leader extends LearnerMaster {
                 serverSocket = new ServerSocket();
             }
             serverSocket.setReuseAddress(true);
-            serverSocket.bind(address);
+            serverSocket.bind(recreateInetSocketAddr(address.getHostString(), 
address.getPort()));
             return Optional.of(serverSocket);
         } catch (IOException e) {
             LOG.error("Couldn't bind to {}", address.toString(), e);
diff --git 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LeaderBeanTest.java
 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LeaderBeanTest.java
index dc537abbd..6316badb4 100644
--- 
a/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LeaderBeanTest.java
+++ 
b/zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/LeaderBeanTest.java
@@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.when;
 import java.io.File;
 import java.io.IOException;
@@ -48,6 +49,7 @@ import org.apache.zookeeper.txn.TxnHeader;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -93,6 +95,15 @@ public class LeaderBeanTest {
         fileTxnSnapLog.close();
     }
 
+    @Test
+    public void testCreateServerSocketWillRecreateInetSocketAddr() {
+        Leader spyLeader = Mockito.spy(leader);
+        InetSocketAddress addr = new InetSocketAddress("localhost", 
PortAssignment.unique());
+        spyLeader.createServerSocket(addr, false, false);
+        // make sure the address to be bound will be recreated with expected 
hostString and port
+        Mockito.verify(spyLeader, 
times(1)).recreateInetSocketAddr(addr.getHostString(), addr.getPort());
+    }
+
     @Test
     public void testGetName() {
         assertEquals("Leader", leaderBean.getName());

Reply via email to