You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Tsz-wo Sze (Jira)" <ji...@apache.org> on 2026/04/10 16:53:00 UTC

[jira] [Updated] (HDDS-15006) XceiverClientGrpc.connectToDatanode should not create connections in the remapping function

     [ https://issues.apache.org/jira/browse/HDDS-15006?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tsz-wo Sze updated HDDS-15006:
------------------------------
    Description: 
{code:java}
//XceiverClientGrpc
  private final ConcurrentMap<DatanodeID, ChannelInfo> dnChannelInfoMap;
{code}

In HDDS-14571, it uses [ConcurrentMap.compute|https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html#compute-K-java.util.function.BiFunction-] to create connection in XceiverClientGrpc. However, the remappingFunction may be called multiple times to create and drop objects as mentioned in the javadoc . As a result, it may create a connection and then drop it without closing it.

- Note that the current code indeed does not have a bug

since it uses ConcurrentHashMap which calls the remappingFunction exactly once. However, it may become a bug when changing to other ConcurrentMap implementation.

Also, it is more efficient to make the remapping function light weighted so it won't hold the lock for a long time. It is generally a good practices as method in [ConcurrentHashMap.compute|https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#compute-K-java.util.function.BiFunction-].

  was:In HDDS-14571, it uses ConcurrentHashMap.compute(..) to create connection in XceiverClientGrpc.  However, ConcurrentHashMap.compute(..) can use the remappingFunction to create and drop objects when there is a race condition.  As a result, it may create a connection and then drop it without closing it.

     Issue Type: Improvement  (was: Bug)
        Summary: XceiverClientGrpc.connectToDatanode should not create connections in the remapping function  (was: XceiverClientGrpc may create and drop connections without closing it)

> XceiverClientGrpc.connectToDatanode should not create connections in the remapping function
> -------------------------------------------------------------------------------------------
>
>                 Key: HDDS-15006
>                 URL: https://issues.apache.org/jira/browse/HDDS-15006
>             Project: Apache Ozone
>          Issue Type: Improvement
>          Components: Ozone Client
>            Reporter: Tsz-wo Sze
>            Assignee: Rishabh Patel
>            Priority: Major
>
> {code:java}
> //XceiverClientGrpc
>   private final ConcurrentMap<DatanodeID, ChannelInfo> dnChannelInfoMap;
> {code}
> In HDDS-14571, it uses [ConcurrentMap.compute|https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentMap.html#compute-K-java.util.function.BiFunction-] to create connection in XceiverClientGrpc. However, the remappingFunction may be called multiple times to create and drop objects as mentioned in the javadoc . As a result, it may create a connection and then drop it without closing it.
> - Note that the current code indeed does not have a bug
> since it uses ConcurrentHashMap which calls the remappingFunction exactly once. However, it may become a bug when changing to other ConcurrentMap implementation.
> Also, it is more efficient to make the remapping function light weighted so it won't hold the lock for a long time. It is generally a good practices as method in [ConcurrentHashMap.compute|https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#compute-K-java.util.function.BiFunction-].



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org