szetszwo commented on code in PR #10485:
URL: https://github.com/apache/ozone/pull/10485#discussion_r3398265758


##########
hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java:
##########
@@ -435,44 +435,29 @@ private void updateRatisConfiguration(List<RaftPeer> 
followers, List<RaftPeer> l
     }
   }
 
-  private static RaftPeer createRaftPeer(OMNodeDetails omNode) {
-    String nodeId = omNode.getNodeId();
-    RaftPeerId raftPeerId = RaftPeerId.valueOf(nodeId);
-    InetSocketAddress ratisAddr = new InetSocketAddress(
-        omNode.getHostAddress(), omNode.getRatisPort());
-    RaftPeerRole startRole = omNode.isRatisListener() ?
-        RaftPeerRole.LISTENER : RaftPeerRole.FOLLOWER;
+  /**
+   * Build a RaftPeer for the given OM node. The peer address is always set
+   * as a hostname:port string (never a resolved IP). Ratis ultimately hands
+   * this string to gRPC's NettyChannelBuilder.forTarget(...), whose default
+   * DnsNameResolver re-resolves hostnames on connection failure / refresh.
+   * Baking a resolved IP into RaftPeer.address would freeze the peer at one
+   * IP for the channel's lifetime, breaking recovery from peer pod restarts
+   * in environments like Kubernetes where DNS names are stable but IPs are
+   * not. See HDDS-15514 (DNS-refresh-on-failure for all RPC paths).
+   */
+  static RaftPeer createRaftPeer(OMNodeDetails omNode) {
+    return createRaftPeer(omNode, omNode.getNodeId());
+  }
 
+  static RaftPeer createRaftPeer(OMNodeDetails omNode, String nodeId) {

Review Comment:
   Combine these two createRaftPeer methods:
   ```java
     static RaftPeer createRaftPeer(OMNodeDetails omNode) {
       return RaftPeer.newBuilder()
           .setId(RaftPeerId.valueOf(omNode.getNodeId()))
           .setAddress(omNode.getRatisHostPortStr())
           .setStartupRole(omNode.isRatisListener() ? RaftPeerRole.LISTENER : 
RaftPeerRole.FOLLOWER)
           .build();
     }
   ```
   ```diff
   +++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/OzoneManagerRatisServer.java
   @@ -227,10 +227,8 @@ public static OzoneManagerRatisServer newOMRatisServer(
          // On regular startup, add all OMs to Ratis ring
          raftPeers.add(localRaftPeer);
   
   -      for (Map.Entry<String, OMNodeDetails> peerInfo : 
peerNodes.entrySet()) {
   -        String peerNodeId = peerInfo.getKey();
   -        OMNodeDetails peerNode = peerInfo.getValue();
   -        RaftPeer raftPeer = 
OzoneManagerRatisServer.createRaftPeer(peerNode, peerNodeId);
   +      for (OMNodeDetails peerInfo : peerNodes.values()) {
   +        RaftPeer raftPeer = 
OzoneManagerRatisServer.createRaftPeer(peerInfo);
   
            // Add other OM nodes belonging to the same OM service to the Ratis 
ring
            raftPeers.add(raftPeer);
   ```
   



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to