Fix Version/s: 0.5
jbellis: am i missing something? it looks like TcpConnectionManager.allConnections_ will only ever contain a single TcpConnection, since before adding any connection it checks contains() first, which relies on TcpConn.equals, which reports that any TcpConns w/ same local & remote endpoints are equal
junrao: yes, TcpConnectionManager.allConnections_ can have no more than 1 element.
jbellis: that might explain why it's so easy to swamp things and start getting timeouts – if all your connections are full of command data, "success" replies will have to wait for those to drain out first before being sent
IMO the Right Design is one connection for commands, one connection for acks/replies, rather than a single pool of connections for everything. that way a connection from A -> B "full" of outgoing commands can't block replies from A -> B acking commands that came the other way.