[ https://issues.apache.org/jira/browse/HDFS-4353?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13543397#comment-13543397 ]
Todd Lipcon commented on HDFS-4353: ----------------------------------- {code} - sock.setSoTimeout(dfsClient.getConf().socketTimeout); {code} did this timeout setting (just after the newPeer call) get lost in the refactor? ---- {code} + private Peer peer; + private long time; {code} Make these final ---- {code} + private Daemon daemon; {code} Put with the other variable declarations (below {{class Value}} ---- - Rename {{scInstance}} to {{pcInstance}} or just {{instance}} - Javadoc for {{PeerCache.get(DataNode)}} is out of date - still refers to old params and types ---- {code} + public synchronized void put(DatanodeID dnId, org.apache.hadoop.hdfs.net.Peer peer) { {code} Shouldn't need fully qualified class name here ---- {code} - this.socketIn = NetUtils.getInputStream(s); - this.socketOut = NetUtils.getOutputStream(s, dnConf.socketWriteTimeout); - this.isLocal = s.getInetAddress().equals(s.getLocalAddress()); + this.socketIn = peer.getInputStream(); + this.socketOut = peer.getOutputStream(); {code} {{peer.getOutputStream}} here calls {{new SocketOutputStream(channel, 0)}} -- ie doesn't set a write timeout. However, the previous code here did set a write timeout. Does this turn out to not matter due to another call later? I have the same question in a number of other places where we used to pass a WRITE_TIMEOUT to {{NetUtils.getOutputStream}} but now appear to end up with timeout 0 (eg in {{newBlockReader}}). I see a few explicit calls to {{setWriteTimeout}} but can you please double check that we didn't miss any cases? Our test coverage of timeout behavior is light. ---- {code} + * Free the resources associated with this peer factory. + * This normally includes sockets, etc. + * + * @throws IOException If there is an error closing the PeerFactory {code} Refers to "factory" when it should say "server". ---- The {{peerServer}} JavaDoc should explain a little bit more about what kind of 'tracking' it does of connections. I find it a little incongruous that {{PeerServer}} is responsible for tracking the set of connected peers. Since all connected clients have the same {{Peer}} interface, couldn't it stay as part of DataXceiverServer (ie just rename {{childSockets}} to {{childPeers}} or {{connectedPeers}}? Also seems strange to me that the {{PeerServer}} interface would have {{removePeer}} but not {{addPeer}}. Along the same lines, it seems odd that {{Peer.close}} would be responsible for removing itself from the {{peerServer}} - it's kind of inverted responsibility here, and odd since Peers are also used on clients with no associated server. ---- -{{TcpPeerServer}} missing audience annotation > Encapsulate connections to peers in Peer and PeerServer classes > --------------------------------------------------------------- > > Key: HDFS-4353 > URL: https://issues.apache.org/jira/browse/HDFS-4353 > Project: Hadoop HDFS > Issue Type: Sub-task > Components: datanode, hdfs-client > Affects Versions: 2.0.3-alpha > Reporter: Colin Patrick McCabe > Assignee: Colin Patrick McCabe > Attachments: 02-cumulative.patch > > > Encapsulate connections to peers into the {{Peer}} and {{PeerServer}} > classes. Since many Java classes may be involved with these connections, it > makes sense to create a container for them. For example, a connection to a > peer may have an input stream, output stream, readablebytechannel, encrypted > output stream, and encrypted input stream associated with it. > This makes us less dependent on the {{NetUtils}} methods which use > {{instanceof}} to manipulate socket and stream states based on the runtime > type. it also paves the way to introduce UNIX domain sockets which don't > inherit from {{java.net.Socket}}. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira