- a workload is running which puts a bunch of local sockets in the PeerCache
- the workload abates for a while, causing the sockets to go "stale" (ie the DN side disconnects after the keepalive timeout)
- the workload starts again
In this case, the local socket retrieved from the cache failed the newBlockReader call, and it incorrectly disabled local sockets on that host. This is similar to an earlier bug
HDFS-3376, but not quite the same.
The next issue we ran into is that, once this happened, it never tried local sockets again, because the cache held lots of TCP sockets. Since we always managed to get a cached socket to the local node, it didn't bother trying local read again.