On our production clusters, we occasionally see that NameNode sends an empty block replication request to DataNode on every heartbeat, thus blocking this DataNode from replicating or deleting any block.
This is partly caused by DataNode sending a wrong number of replications in progress which will be fixed by
HADOOP-5465. There is also a flaw at the NameNode side. NameNode should not interpret the number of replications in progress as the number of targets since replication is done through a pipeline. It also should make sure that no empty replication request is sent to DataNode.