[ https://issues.apache.org/jira/browse/HDFS-11546?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15965226#comment-15965226 ]
Chris Douglas commented on HDFS-11546: -------------------------------------- Looks good, overall. A few questions: * Many fields e.g., {{ConnectionManager.Timer}}, {{RouterRpcClient.retryPolicy}}, {{RouterRpcClient.executorService}} can be final * {{RemoteLocationContext#equals}} relying on hashcode equality of Strings is too weak * In {{ConnectionPool#getNumActiveConnections}}, instead of catching AIOOBException: use a lock, COWArrayList, or other threadsafe collection. * The threading in {{ConnectionPool}} generally seems wonky. It avoids locks, but catches a lot of exceptions. Instead of synchronizing on a special {{Object lock}}, most of this could synchronize on the {{connections}} field or use a threadsafe collections. * {{ConnectionPool}} seems to distribute requests to connections RR, adding new connections (up to some limit) if it wraps while a connection is still "busy". Is that right? * {{ConnectionPool#cleanup}} should remove from the end of an ArrayList to avoid copies, not the front (and be correctly synchronized) * If the client in the {{ConnectionPool}} is configured to retry, and the proxied client retries, that may go to a different connection in the pool (or a different router), right? Should the proxy never retry to avoid repeating past operations, or does some other mechanism prevent this? * {{ConnectionPool#close}} doesn't seem to do any cleanup work (interrupting threads, etc.). This is a "soft" shutdown? * {{ConnectionManager}} uses {{Timer/TimerTask}}, which are sort-of deprecated in favor of {{ScheduledThreadPoolExecutor}} after 1.5 * The {{ConnectionManager}} creates keys for each RPC proxy by creating a String of the UGI and hashcode for each token. The chance of collision seems remote, but unnecessarily non-zero. Instead of a flat {{String -> ConnectionPool}} map, could this maintain a key of user/NN? Is there a particular reason to include tokens as part of the key? * Does {{RouterRpcClient#invokeSequential}} and {{RouterRpcClient#invokeConcurrent}} implement functionality similar to HADOOP-12077? There should probably be a documentation JIRA to describe common patterns, limitations, and deployment. In particular, the subset of {{ClientProtocol}} implemented by {{RouterRpcServer}} should be documented. * I didn't review the details of {{RouterRpcServer}} since most of it seems to be wrapping the client proxy, but there are some TODO items there. Those don't need to block commit to the branch, but they should probably be documented or addressed before merge. * The defaults in {{hdfs-site.xml}} look conservative; the description could include some cursory guidance on setting them. * Thanks for adding the integration tests > Federation Router RPC server > ---------------------------- > > Key: HDFS-11546 > URL: https://issues.apache.org/jira/browse/HDFS-11546 > Project: Hadoop HDFS > Issue Type: Sub-task > Components: hdfs > Affects Versions: HDFS-10467 > Reporter: Inigo Goiri > Assignee: Inigo Goiri > Attachments: HDFS-11546-HDFS-10467-000.patch, > HDFS-11546-HDFS-10467-001.patch, HDFS-11546-HDFS-10467-002.patch, > HDFS-11546-HDFS-10467-003.patch, HDFS-11546-HDFS-10467-004.patch > > > RPC server side of the Federation Router implements ClientProtocol. -- This message was sent by Atlassian JIRA (v6.3.15#6346) --------------------------------------------------------------------- To unsubscribe, e-mail: hdfs-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: hdfs-issues-h...@hadoop.apache.org