[ 
https://issues.apache.org/jira/browse/HADOOP-18365?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17579141#comment-17579141
 ] 

ASF GitHub Bot commented on HADOOP-18365:
-----------------------------------------

snmvaughan commented on code in PR #4692:
URL: https://github.com/apache/hadoop/pull/4692#discussion_r944861525


##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java:
##########
@@ -1753,7 +1756,28 @@ public ConnectionId(InetSocketAddress address, Class<?> 
protocol,
     InetSocketAddress getAddress() {
       return address;
     }
-    
+
+    /**
+     * This is used to update the remote address when an address change is 
detected.  This method
+     * ensures that the {@link #hashCode()} won't change.
+     *
+     * @param address the updated address
+     * @throws IllegalArgumentException if the hostname or port doesn't match
+     * @see Connection#updateAddress()
+     */
+    void setAddress(InetSocketAddress address) {
+      if (!Objects.equals(this.address.getHostName(), address.getHostName())) {

Review Comment:
   The hostnames will match since the purpose of this call is only to update 
the IP address, and It is not intended as a general purpose mutator.  In 
addition, the protections here are required to ensure that the hashcode does 
not change, which is based off of the hostname and port.  If the hashcode 
changes then the connections map will fail to clean-up correctly.





> Updated addresses are still accessed using the old IP address
> -------------------------------------------------------------
>
>                 Key: HADOOP-18365
>                 URL: https://issues.apache.org/jira/browse/HADOOP-18365
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: common
>         Environment: Demonstrated in a Kubernetes environment running Java 11.
>            Reporter: Steve Vaughan
>            Assignee: Steve Vaughan
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> When the IPC Client recognizes that an IP address has changed, it updates the 
> server field and logs a message:
> Address change detected. Old: 
> journalnode-1.journalnode.hdfs.svc.cluster.local/10.1.0.178:8485 New: 
> journalnode-1.journalnode.hdfs.svc.cluster.local/10.1.0.182:8485
> Although the change is detected, the client will continue to connect to the 
> old IP address, resulting in repeated log messages.  This is seen in managed 
> environments when JournalNode syncing is enabled and a JournalNode is 
> restarted, with the remaining nodes in the set repeatedly logging this 
> message when syncing to the restarted JournalNode.
> The source of the problem is that the remoteId.address is not updated.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to