Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Won't Fix
-
None
-
None
-
None
Description
BlockReceiver process packets in BlockReceiver.receivePacket() as follows
- read from socket
- enqueue the ack
- write to downstream
- write to disk
The above steps is repeated for each packet in a single thread. When there are a lot of concurrent writes in a datanode, the write time in #4 becomes very long. As a result, it leads to SocketTimeoutException since it cannot read from the socket for a long time.