This is an automated email from the ASF dual-hosted git repository.
andor pushed a commit to branch branch-3.9
in repository https://gitbox.apache.org/repos/asf/zookeeper.git
The following commit(s) were added to refs/heads/branch-3.9 by this push:
new f5a017c6c ZOOKEEPER-4728: force to re-resolve hostname into IP when
binding. (#2040)
f5a017c6c is described below
commit f5a017c6c29e6b9e37b1e4a15dffd0baa752ba21
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 0cb4d50de..3b9c827c3 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
@@ -309,6 +309,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 {
@@ -318,7 +322,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 6a914fbc6..4d3c6fba7 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;
@@ -47,6 +48,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;
@@ -92,6 +94,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());