Details
Description
In ipc/HBaseClient.java, the method sendParam does:
out.writeInt(dataLength); //first put the data length out.write(data, 0, dataLength);//write the data
While analyzing some tcpdump traces tonight, I saw that this consistently translates to 1 TCP packet with a 4 byte payload followed by another TCP packet with the RPC itself. This makes inefficient use of network resources and adversely affects TCP throughput. I believe each of those lines translates to a write system call on the socket's file descriptor (unnecessary system calls are also bad for performance). The code attempts to call out.flush(); but this approach is ineffective on sockets in Java (as far as I empirically noticed over the past few months).