We currently retry BlocksByRoot requests 5 times before stopping in the P2P layer. If a block fails to be retrieved, eventually a child block will be received (unless that chain stops extending), which will cause BlockChain to fetch the block from P2P. This is inefficient, since we already have that block, and we should instead be fetching the missing link.